您当前位置: 首页 » 代码审计 » boblog变量覆盖导致任意文件包含

boblog变量覆盖导致任意文件包含

2017年2月23日 | 发表评论(0) 查看评论

很早的一个洞了,重新复现一下,原洞修复了两次,全被绕过了,只复现其中一个比较有代表性的

下载地址:http://ftp-idc.pconline.com.cn/efeaecce337a1119e3cdc5c978a3b790/pub/download/200808/Bo-blogV2.1.1.tar.gz

在go.php中

大致意思已经进行注释了。

当访问http://127.0.0.1/bblog/go.php/user/1/ 类似这样的链接时$q_url为/bblog/go.php/user/1/  $rewritedURL为user/1

然后将$rewritedURL中符合正则的内容替换为'<‘.$RedirectTo[$i].'<‘    然后按<将$tmp_rewritedURL分离,此时$tmp_rewritedURL包含三个部分1)第一个'<‘之前的数据、2)两个'<‘之间的数据、3)第二个'<‘之后的数据

>Array
(
[0] =>
[1] => view.php?go=user_1
[2] =>
)

因为正则中并没有强制规定头和尾(^$)导致我们可以在头尾处添加'<‘来扰乱逻辑,从而可以控制$tmp_rewritedURL的内容和键值的位置http://127.0.0.1/bblog/go.php/<test<user/1/ 这样便可以成功控制值和位置

http://127.0.0.1/bblog/go.php/ Array ( [0] => [1] => test [2] => [3] => view.php?go=user_1 [4] => )

http://127.0.0.1/bblog/go.php/<< Array ( [0] => [1] => [2] => [3] => test [4] => [5] => view.php?go=user_1 [6] => )

之后我们便可以控制$tmp_rewritedURL[2]和$tmp_rewritedURL[1]中的值=>$rewritedURL可控

经过

后 得到$parsedURL=Array ( [path] => view.php [query] => go=user_1 ) =>$parsedURL[path]可控

造成任意文件包含