当前位置:WooYun(白帽子技术社区) >> php >> ThinkPHP framework 任意代码执行漏洞预警

ThinkPHP framework 任意代码执行漏洞预警

GaRY | 2012-04-09 14:58

ThinkPHP是一个国内使用很广泛的老牌PHP MVC框架。貌似国内有不少创业公司或者项目都用了这个框架。

最近官方发布了一个安全补丁,官方表述是:该URL安全漏洞会造成用户在客户端伪造URL,执行非法代码。

可是貌似大多数开发者和使用者并没有注意到此漏洞的危害性,应者了了,更不用说有多少人去升级了。随后我对其进行了分析,发现此问题果然是一个非常严重的问题,只要使用了thinkphp框架,就可以直接执行任意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代码

index.php/module/action/param1/${@print(THINK_VERSION)}

由于是双引号执行,这里为了保险起见,不给出更有危害性的代码,利用这个还是需要点技巧的。

总之这个问题非常严重,找了一下,发现目前没有修补漏洞的网站还是很多的。而ThinkPHP框架的特征其实非常好识别,有意者直接写个scanner进行扫描也未必不可能。
为了不造成更大损失,特地发帖希望引起各位使用thinkphp做开发的同学关注。尽早升级官方的安全补丁

分享到:
  1. 1#
    回复此人 感谢
    rayh4c | 2012-04-09 15:12

    = =!我擦,都已经这样了,还要技巧。

  2. 2#
    回复此人 感谢
    GaRY | 2012-04-09 15:15

    @rayh4c 擦,你这种level的不算,主要简单防一下scriptkidz

  3. 3#
    回复此人 感谢
    horseluke (微碌) | 2012-04-09 15:16

    分析真快啊........

  4. 4#
    回复此人 感谢
    请叫我大神 | 2012-04-09 15:26

    都直接上脚了

  5. 5#
    回复此人 感谢
    GaRY | 2012-04-09 15:27

    @horseluke 主要是漏洞简单。今天看到个case就顺带分析了一下

  6. 6#
    回复此人 感谢
    Xhm1n9 | 2012-04-09 16:03

    顶!

  7. 7#
    回复此人 感谢
    livers (如梦似幻) | 2012-04-09 16:26

    发现了N 久了,终于见面了。

  8. 8#
    回复此人 感谢
    cnyouker | 2012-04-09 16:35

    顶一下

  9. 9#
    回复此人 感谢
    Vi0lent (刀塔毁一生,网游穷三代,欲成高富帅,必先打AI) | 2012-04-09 16:44

    囧了,顺便抱怨下TP的DEBUG_MODEL真心不好用.开了照样生成缓存 照样生成Runtime 有木有啊有木有~

  10. 10#
    回复此人 感谢
    B1n4ry (苦逼的生存着。。。) | 2012-04-09 18:01

    这蛋疼的漏洞,话说ThinkSNS还有好多其他的漏洞,都能GetShell的。保留一部分···

  11. 11#
    回复此人 感谢
    horseluke (微碌) | 2012-04-09 18:07

    @B1n4ry ThinkSNS?ThinkPHP?两个代码上貌似已经有些不同噢

  12. 12#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-04-09 18:16

    @B1n4ry 求乌云之

  13. 13#
    回复此人 感谢
    B1n4ry (苦逼的生存着。。。) | 2012-04-09 18:17

    @horseluke 额·· 都是同一框架的二次开发吧?

  14. 14#
    回复此人 感谢
    B1n4ry (苦逼的生存着。。。) | 2012-04-09 18:26

    @xsser 看过的消息为什么不能自动变成已读? 还是我firefox问题?

  15. 15#
    回复此人 感谢
    GaRY | 2012-04-09 19:32

    @B1n4ry 貌似这两个是不同的东西吧。一个是编程框架,一个是sns系统,thinksns也没有基于thinkphp进行开发

  16. 16#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-04-09 19:49

    @B1n4ry wooyun的开发不行的,近期改进,5555555

  17. 17#
    回复此人 感谢
    PiaCa (ﻬ10wb 求把 PiaCa 改成 piaca) | 2012-04-09 20:02

    哈哈,把这句去掉就真的需要技巧了 index.php/module/action/param1/${@print(THINK_VERSION)}

  18. 18#
    回复此人 感谢
    horseluke (微碌) | 2012-04-09 21:41

    @GaRY ThinkSNS确实是基于ThinkPHP开发的(http://download.thinksns.com/attach/ThinkSNS%202.5_%E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C_%E6%99%BA%E5%A3%AB%E8%BD%AF%E4%BB%B6%EF%BC%88%E5%8C%97%E4%BA%AC%EF%BC%89%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8.pdf ),我对@B1n4ry 的疑问主要是“ThinkSNS还有好多其他的漏洞”是否可以通用于ThinkPHP——因为ThinkSNS改动过不少ThinkPHP的代码,已经远远超出一般框架应用开发的范畴。

  19. 19#
    回复此人 感谢
    zhuowater | 2012-04-10 00:52

    ~~/e还是不要用的好...

  20. 20#
    回复此人 感谢
    possible (everything is possible) | 2012-04-10 16:35

    我怎么在网上下载的版本 都没有找到漏洞
    http://www.onlinedown.net/softdown/178972_2.htm

    难道这么快 所有的都补了?响应速度 让我不适应呀

  21. 21#
    回复此人 感谢
    单恋一支花 | 2012-04-16 13:56

    楼主测试的那个版本

  22. 22#
    回复此人 感谢
    GaRY | 2012-04-16 17:46

    @possible @单恋一支花 最新版本已经没有问题了。各位直接看code.google.com里的log就看得到了

  23. 23#
    回复此人 感谢
    _Evil (科普是一种公益行为) | 2012-04-19 12:27

    Wooyun用啥框架开发的?

  24. 24#
    回复此人 感谢
    GaRY | 2012-04-19 16:20

    @_Evil 你猜

  25. 25#
    回复此人 感谢
    _Evil (科普是一种公益行为) | 2012-04-19 18:12

    @GaRY 应该自己的。

添加新回复

登录 后才能参与评论.

WooYun(白帽子技术社区)

网络安全资讯、讨论,跨站师,渗透师,结界师聚集之地

登录