攻防世界之Web_PHP_Include

攻防世界之Web_PHP_Include

这是一道来自攻防世界web高手进阶题的其中一道题,题目很水,但是身为小白的我也遭遇到了各种各样的问题。所以写一下这道题我所用的wp思路,还有对于其他思路的一些看法。
法一
首先,我们先拿到了这道题的在线场景,打开一看
攻防世界之Web_PHP_Include
再结合着题目的意思这是一道文件包含题同时他过滤掉了php://伪协议,我第一反应就是换一个伪协议,将php://换成data://text/plain;
于是构造一个payload:?page=data://text/plain,<?%20system(%27ls%27);?>,然后回车,如下图
攻防世界之Web_PHP_Include
其实在这里有两个很奇怪的点,第一个点就是当我用<?php system('ls');?> 去构造payload的时候是没有作用的,一定要把php删了才能正常执行,但是知道我写这篇文章之前我也没有搞懂是为什么。第二个点就更加迷幻了。第一天我去做这道题的时候,用上面的payload并没有得到我想要的结果,并且没有任何回显,突然想到是特殊字符过滤的问题,就用了下面的payload?page=data://text/plain;base64,Jmx0Oz8gc3lzdGVtKCYjMzk7bHMmIzM5Oyk7PyZndDs= 来避免字符过滤问题。但是,当我第二天回去复现的时候,他就不需要base64加密了。我也属实是没搞懂。所以,如果你用了第一个payload没有成功的话,不妨试试第二个经过base64加密的版本。最后就是用?page=data://text/plain,<?%20system(%27cat%20fl4gisisish3r3.php%27);?>这个payload来拿到flag,这里的flag在源码里并不回显在整个网页上。所以查看源码就能得到flag。攻防世界之Web_PHP_Include
法二
方法二相对于方法一来讲,显得更为直接。依靠着strstr()函数不会区分大小写的函数机制来进行命令执行。但是我在用这个方法去做这道题的时候也遇到了一个问题,当我构造好payload?page=Php://input之后,用hackbar进行POST传参的时候,发现并不能传进去。然后我猜测是不是我的hackbar的问题,于是我换了道POST传参问题,发现并不是我的hackbar的问题。于是去查了资料看了些大佬的评论,发现可能是浏览器更新版本之后的毛病。所以,打算直接burp对其进行数据包上的操作与更改。攻防世界之Web_PHP_Include
然后就是cat一下就行了。