题目:
关键是第二个if语句,是一个正则表达式过滤,涵盖了之前题目的部分答案。
要点:
因为有config,php过滤所以要对config.php进行过滤。有system和exec过滤所以要换另一个系统命令。有cat所以要更换另一种抓取文件的方式。
过滤方式:
对于config.php我们可以对其进行base64编码,为什么是baser64,貌似只是因为比较常用,用别的也可以。
对于系统命令的过滤我们可以使用另一个系统命令passthru()。
对于cat的过滤我是用的tac,不过方法不唯一,大家可以看看其他人的博客,也有其他的方法,命令。
知识点:
因为网站是对config.php过滤,所以我们需要传参的参数是加密后的代码,传参后进行解密。所以base64的解密格式为:base64_decode()。注意的是我们需要给这个代码设置一个变量。
关于系统命令,我查到的一共有三个分别是:passthru(),system(),exec(),三种方式的用法相同,作用有一点点区别,不过在这个题里没有任何问题。
关于抓取文件内容有cat tac rec
cat是从第一行开始抓到最后一行,tac是从最后一行抓到第一行,rec是将抓到的内容倒置。
答案:
前戏说完了,下面是整体,将代码整理好后是这个样子:
?c=$a =base64_decode('Y29uZmlnLnBocA==');passthru("tac $a");
编码和调用系统函数的位置不能换,因为tac抓取时需要用到变量a。
传参后得到flag:
后记:
再web12之前有的题是没有过滤php的,但不能使用php的伪协议,有没有大佬告诉我为什么?