
Apache Struts2 S2-045 (CVE-2017-5638) शोषण और बचाव का प्रदर्शन करने वाली Docker-आधारित सुरक्षा लैब, व्यावहारिक प्रशिक्षण के लिए WAF सुरक्षा के साथ कमजोर और पैच किए गए अनुप्रयोगों की विशेषता।
एक Docker-आधारित सुरक्षा प्रयोगशाला जो Apache Struts2 S2-045 कमजोरी (CVE-2017-5638) के विरुद्ध शोषण और रक्षा दोनों का प्रदर्शन करती है। इस प्रयोगशाला में शामिल हैं:
⚠️ सुरक्षा चेतावनी: इस प्रयोगशाला में काम करने वाले शोषण और कमजोर कोड शामिल हैं। केवल पृथक वातावरण में उपयोग करें। सार्वजनिक नेटवर्क पर खुलासा न करें।
┌─────────────────────────────────────────────────────────────┐
│ होस्ट (केवल 127.0.0.1) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ सिम्युलेटर │───▶│ Nginx प्रॉक्सी │ │
│ │ (curl-आधारित) │ │ + WAF नियम │ │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ┌───────┴────────┐ │
│ │ │ │
│ ┌───────▼──────┐ ┌───────▼──────┐ │
│ │ रक्षा ऐप │ │ कमजोर ऐप │ │
│ │ (Struts 6.3) │ │ (2.3.31) │ │
│ │ पोर्ट: 8080 │ │ पोर्ट: 8081 │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ शोषण कंटेनर │───▶ कमजोर ऐप (8081) │
│ └─────────────────┘ │
│ │
│ लॉग माउंटेड: ./logs/nginx/, ./logs/app/, │
│ ./logs/app-vulnerable/ │
└─────────────────────────────────────────────────────────────┘
# रिपॉजिटरी क्लोन करें
git clone https://github.com/ACharaf06/cybersec.git
cd cybersec
# सभी कंटेनर बनाएं (पहली बार में कई मिनट लग सकते हैं)
docker compose build
# रक्षा प्रयोगशाला शुरू करें (nginx + पैच किया गया ऐप)
docker compose up -d nginx app
# कमजोर ऐप शुरू करें (शोषण प्रदर्शन के लिए)
docker compose up -d app-vulnerable
# सेवाओं के चलने की पुष्टि करें
docker compose ps
# सेवाओं के स्वस्थ होने की प्रतीक्षा करें (लगभग 60 सेकंड)
sleep 60
# स्वास्थ्य समापन बिंदु जांचें
curl http://127.0.0.1:8080/struts-lab/health # रक्षा प्रयोगशाला
curl http://127.0.0.1:8081/struts-lab/health # कमजोर ऐप
अपेक्षित आउटपुट:
"status":"healthy" और "strutsVersion":"6.3.0.2 (पैच किया गया - S2-045 के लिए कमजोर नहीं)""status":"healthy" और "strutsVersion":"2.3.31 (S2-045 के लिए कमजोर)"# सिम्युलेटर कंटेनर चलाएं (रक्षा तंत्र का परीक्षण करता है)
docker-compose run --rm simulator
# या अलग-अलग परीक्षण मैन्युअल रूप से चलाएं:
# वैध अपलोड
curl -X POST -F "[email protected]" http://127.0.0.1:8080/struts-lab/upload
# संदिग्ध Content-Type (WAF द्वारा अवरुद्ध किया जाएगा)
curl -v -X POST \
-H "Content-Type: multipart/form-data; boundary=----SUSPICIOUS" \
http://127.0.0.1:8080/struts-lab/upload
# शोषण कंटेनर चलाएं (S2-045 शोषण प्रदर्शित करता है)
docker-compose --profile exploit run --rm exploit
# या Python शोषण स्क्रिप्ट सीधे उपयोग करें
python3 exploit/exploit.py http://127.0.0.1:8081/struts-lab 'whoami'
# या bash स्क्रिप्ट उपयोग करें
./exploit/demo_exploit.sh
⚠️ चेतावनी: कमजोर एप्लिकेशन जानबूझकर शोषण योग्य है। केवल पृथक वातावरण में चलाएं।
# रक्षा प्रयोगशाला लॉग
tail -f logs/nginx/access.log # Nginx एक्सेस लॉग
tail -f logs/nginx/error.log # WAF ब्लॉक
tail -f logs/app/struts-lab.log # रक्षा ऐप लॉग
# कमजोर ऐप लॉग
tail -f logs/app-vulnerable/struts-lab.log # कमजोर ऐप लॉग
# सभी लॉग संयुक्त
docker-compose logs -f
वैध अनुरोध:
200 प्रतिक्रियाINFO स्तर अपलोड प्रसंस्करण संदेशसंदिग्ध/विकृत अनुरोध:
403 Forbidden या 400 Bad Requestसफल शोषण:
लॉग उदाहरण:
Nginx संदिग्ध Content-Type को अवरुद्ध कर रहा है (रक्षा प्रयोगशाला):
[WAF] संदिग्ध Content-Type पैटर्न अवरुद्ध - अनुरोध आईडी: abc123
ऐप अनुरोध मेटाडेटा लॉग कर रहा है (रक्षा प्रयोगशाला):
[REQUEST] ID=abc123 Content-Type=multipart/form-data Method=POST URI=/upload
[UPLOAD] अनुरोध abc123 के लिए फ़ाइल अपलोड प्रसंस्करण
सफल शोषण (कमजोर ऐप):
HTTP/1.1 200 OK
...
root
(कमांड आउटपुट प्रतिक्रिया बॉडी में दिखाई देता है)
127.0.0.1 से बंधी हैं (कोई बाहरी पहुंच नहीं)S2-045 (CVE-2017-5638) Apache Struts2 संस्करण 2.3.5 - 2.3.31 और 2.5 - 2.5.10 में एक गंभीर कमजोरी थी जहाँ:
कमजोर ऐप (पोर्ट 8081) इस कमजोरी को प्रदर्शित करता है। रक्षा प्रयोगशाला (पोर्ट 8080) दिखाती है कि इससे कैसे बचाव किया जाए।
.
├── docker-compose.yml # कंटेनर ऑर्केस्ट्रेशन
├── README.md # यह फ़ाइल
├── EXPLOITATION_GUIDE.md # विस्तृत शोषण मार्गदर्शिका
├── TECHNICAL_DETAILS.md # तकनीकी कार्यान्वयन विवरण
├── GLOSSARY.md # सुरक्षा शब्दों की शब्दावली
├── nginx/
│ ├── nginx.conf # मुख्य nginx कॉन्फ़िगरेशन
│ └── waf-rules.conf # S2-045 पैटर्न के लिए WAF नियम
├── app/ # रक्षा प्रयोगशाला (पैच किया गया)
│ ├── Dockerfile # Tomcat + Maven बिल्ड
│ └── struts-app/
│ ├── pom.xml # Maven प्रोजेक्ट (Struts 6.3.x)
│ └── src/main/
│ ├── java/ # एक्शन क्लासेस
│ ├── resources/ # Struts + Log4j कॉन्फ़िग
│ └── webapp/ # JSP व्यू + web.xml
├── app-vulnerable/ # कमजोर ऐप (शोषण के लिए)
│ ├── Dockerfile # Tomcat + Maven बिल्ड
│ └── struts-app/
│ ├── pom.xml # Maven प्रोजेक्ट (Struts 2.3.31)
│ └── src/main/
│ ├── java/ # एक्शन क्लासेस
│ ├── resources/ # Struts + Log4j कॉन्फ़िग
│ └── webapp/ # JSP व्यू + web.xml
├── exploit/ # शोषण उपकरण
│ ├── Dockerfile # शोषण कंटेनर
│ ├── demo_exploit.sh # Bash शोषण स्क्रिप्ट
│ └── exploit.py # Python शोषण स्क्रिप्ट
├── simulator/
│ ├── Dockerfile # Alpine + curl
│ └── simulate.sh # परीक्षण स्क्रिप्ट
└── logs/ # माउंटेड लॉग निर्देशिका
├── nginx/
├── app/ # रक्षा प्रयोगशाला लॉग
└── app-vulnerable/ # कमजोर ऐप लॉग
# सभी कंटेनर रोकें
docker compose down
# वॉल्यूम और लॉग हटाएं
docker compose down -v
rm -rf logs/
# पूर्ण सफाई (इमेज सहित)
docker compose down --rmi all -v
परियोजना इस प्रकार आयोजित की गई है:
app/ - रक्षा प्रयोगशाला एप्लिकेशन (Struts 6.3.x, पैच किया गया)app-vulnerable/ - कमजोर एप्लिकेशन (Struts 2.3.31)exploit/ - शोषण उपकरण और स्क्रिप्टnginx/ - WAF नियमों के साथ Nginx रिवर्स प्रॉक्सी कॉन्फ़िगरेशनsimulator/ - हमला पैटर्न सिम्युलेटरlogs/ - एप्लिकेशन लॉग (gitignored)# केवल कमजोर ऐप को पुनर्निर्माण करें
docker compose build app-vulnerable
docker compose up -d app-vulnerable
# केवल रक्षा ऐप को पुनर्निर्माण करें
docker compose build app
docker compose up -d app
# शोषण कंटेनर को पुनर्निर्माण करें
docker compose build exploit
अस्वीकरण: यह प्रयोगशाला केवल शैक्षिक उद्देश्यों के लिए है। जिम्मेदारी से और केवल नियंत्रित वातावरण में उपयोग करें।
| कंटेनर | उद्देश्य | पोर्ट |
|---|
nginx | WAF नियमों, दर सीमा के साथ रिवर्स प्रॉक्सी | 127.0.0.1:8080 |
app | Tomcat 9 + Struts 6.3.x (पैच किया गया, रक्षा प्रयोगशाला) | केवल आंतरिक |
app-vulnerable | Tomcat 9 + Struts 2.3.31 (कमजोर, शोषण के लिए) | 127.0.0.1:8081 |
exploit | शोषण प्रदर्शन कंटेनर | N/A |
simulator | परीक्षण अनुरोध भेजता है (सामान्य + संदिग्ध पैटर्न) | N/A |
| विशेषता | कमजोर ऐप (पोर्ट 8081) | रक्षा प्रयोगशाला (पोर्ट 8080) |
|---|
| Struts संस्करण | 2.3.31 (कमजोर) | 6.3.0.2 (पैच किया गया) |
| WAF सुरक्षा | ❌ कोई नहीं | ✅ Nginx WAF नियम |
| दर सीमा | ❌ कोई नहीं | ✅ 10 अनुरोध/सेकंड |
| अनुरोध आकार सीमाएँ | ❌ कोई नहीं | ✅ 10MB बॉडी, 8KB हेडर |
| सुरक्षा लॉगिंग | ⚠️ न्यूनतम | ✅ व्यापक |
| OGNL इंजेक्शन | ✅ शोषण योग्य | ❌ अवरुद्ध/पैच किया गया |
| RCE संभव | ✅ हाँ | ❌ नहीं |
| उपयोग का मामला | शोषण प्रदर्शन | रक्षा प्रशिक्षण |