前言

此方法是@l3m0n叔叔给我分享的,原文已经发布在90sec

我没有90sec的账号,所以自己实践一下,顺道安利给访问我博客的小伙伴。

适用情况

可以控制协议的情况下,如果%00无法截断包含,可使用这招。

<?php

$a = $_GET['file'];

include $a.'.html.php';

思路&方法

思路主要是利用了PHP的一个流封装的特性,可以参考PHP官方文档中的Example #3

假设存在文件包含的代码为:

<?php

$a = $_GET['file'];

include $a.'.html.php';

但是我们%00无法截断, 只能包含 xxxx.html.php

首先我们新建一个hello.html.php,内容为phpinfo();

然后压缩成zip,结构如下图:

QQ截图20160318150028.png

然后访问如下网址,成功包含压缩文件内的hello.html.php

http://localhost/test/blog.php?file=zip://test.zip%23hello

如图:

QQ截图20160318150113.png

把我们输入的变量和include后面的变量合起来就是

zip://test.zip#hello.html.php

代表当前目录下的test.zip压缩包里面的hello.html.php,于是包含成功。

总结

代码审计要走的路还很长~我还要继续学习

很早以前和柠檬草(l3m0n)叔叔搞站遇到过这种情况,当时无果放弃了,前几天草叔叔告诉我他有思路了。

感谢柠檬草叔叔给我分享这个技巧,让我学到了新知识 谢谢你 :)