• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 校园文章 > 正文

    ThinkPHP,framework,任意代码执行漏洞预警|预警明牌有漏洞吗?

    时间:2020-03-29来源:山茶花美文网 本文已影响 山茶花美文网手机站
    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做开发的同学关注。尽早升级官方的安全补丁


    • ThinkPHP,framework,任意代码执行漏洞预警|预警明牌有漏洞吗? 相关文章:
    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全