Hack-The-Box – Heist

บทความโดย
Vanitas
Cyber Security Researcher

Box Name : Heist 

Difficulty : Easy 

Point : 20

Vulnerability : 
– Cracking credential from attachment in issue.php.
– WinRM shell access.
– Forensics Investigation using Process Dump  from Firefox process. 

Enumeration & Exploit :

  1. Nmap scan แบบ all port (TCP + UDP) จะพบว่า TCP : 80,135,445 และ 5985 เปิดอยู่
  2. ลอง browse เข้าไปจะถูก re-direct ไป page : login.php ซึ่งถ้าไม่มี credential จะ log-in by guest ได้
  3. เมื่อ log-in ด้วย guest จะถูก re-direct ไปยัง page : issues.php ซึ่งจะพบบทสนทนาว่า user นามว่า Hazard มีการร้องขอไปยัง Support Admin ว่าให้สร้าง account ให้เค้าบน Windows ให้หน่อย ซึ่งมีจุดน่าสนใจคือมีการแนบ attachment file ไว้ด้วย
  4. คลิกไปดู จะพบ configuration ในลักษณะของ cisco router credential
  5. ลองเอามา crack ดูเลย โดยในกรณีที่เป็น password type 7 สามารถใช้ online cracking จาก http://www.ifm.net.nz/cookbooks/passwordcracker.html ได้ซึ่งจะได้ password ดังรูป
  6. สำหรับ password type 5 สามารถ crack ด้วย John-the-Ripper ได้ ซึ่งเมื่อ crack สำเร็จจะได้ password ในรูป plain-text ดังรูป.
  7. ซึ่งก่อนหน้านี้ตอนเราทำ Nmap scan จะพบว่า TCP port : 445 ซึ่งเป็น File Sharing ด้วย SMB นั้น open อยู่ แต่ปัญหามันคือเราจะเอา user ที่ไหนมาใช้กับ password credential ที่ crack ได้มาหล่ะ?
  8. นึกอะไรไม่ออก ก็ลองย้อนกลับไปดู page : issues.php อีกรอบ สังเกตดีๆว่าเค้า hint มาให้แล้ว
  9. ลองใช้ password ที่ crack ได้ร่วมกับ user : Hazard ไป log-in ผ่าน SMB share โดยจะพบว่า password : “stealthagent” นี่แหละ ที่ validแต่…ทุก share name นั้นก็เข้าไปทำอะไรไม่ได้เลยอยู่ดี อย่างไรต่อดี… หรือน่าจะมี credential อื่นๆอีก ที่สามารถใช้งานได้
  10. ทีนี้ลองหา sid อื่น ที่จะสามารถนำไป enumerate ต่อได้ โดยเราจะใช้ tools จาก Impackets มาเพื่อหา sid ว่าเครื่องเป้าหมาย มี sid อะไรอื่นๆอีกบ้าง ด้วย lookupsid.py (Ref : https://github.com/SecureAuthCorp/impacket/blob/master/examples/lookupsid.py)
  11. Download มา แล้วใช้ credential ของ user : Hazard เพื่อ log-in ไปหา sid ผ่าน RPC จะพบว่าเจอ user : support, Chase และ Jason เพิ่มเติม ที่ดูน่าสนใจ
  12. เมื่อเราได้ username มาเพิ่มแล้ว ก็ลองมา brute-force ด้วย password ที่ crack มาได้ทั้ง 3 อันก่อนหน้านี้ดู ด้วย module : auxiliary smb log-in โดยเราจะทำชุดข้อมูลใส่ text file ไว้ เพื่อให้มาอ่าน userpass file จาก file นี้
  13. หลังจาก brute-force เสร็จ ละเจอว่า user : Chase นั้นก็มี valid credential เช่นกัน
  14. อย่าได้รอช้า ลองนำ credential ของ user : Chase ไป log-in ผ่าน SMB share ดูเลย
  15. อาการเดียวกัน คือไม่เจอ share name แปลกๆ และทำอะไรต่อไม่ได้ แม้ credential จะ valid ก็ตาม
  16. แสดงว่า credential ที่ได้มา ต้องนำไปใช้อย่างอื่นแล้ว นำมาใช้กับ SMB share ไม่น่าได้
  17. ย้อนกลับดูตอน Nmap scan เราจะเจอว่า TCP port : 5985 ก็ open อยู่ ซึ่ง service ตัวนี้เป็น Windows Remote Management service หรือเรียกสั้นๆว่า WinRM
  18. ลอง request WinRM ดู จะพบว่าสามารถเรียก context :wsman ได้ผ่าน POST method ซึ่งโดยปกติแล้ว  Windows ส่วนมากจะถูก hardening ไว้และไม่ค่อยเปิดให้ใช้ แสดงว่า box นี้มีโอกาสทำ remote command execution ผ่าน WinRM service ได้สำหรับผู้ที่ไม่เคยทำสามารถดูรายละเอียดได้จาก https://pentestlab.blog/2018/05/15/lateral-movement-winrm/
  19. นำ credential ที่ได้ไปยัดใน shell เพื่อทำ request ผ่าน WinRM 
  20. ลองรันดู คราวนี้เราจะได้ shell ในรูปแบบของ PowerShell แล้วด้วยสิทธิ์ user : Chase ดังรูป
  21. เข้าไปที่ Desktop ของ user นี้ จะได้ flag : user.txt
  22. สังเกตว่ามีอะไรแปลกๆ คือไฟล์ todo.txt ลองเข้าไปอ่าน content ดู
  23. ดูไม่มีอะไร เก็บไว้ก่อน
  24. ลอง local enumeration ดูทั่วๆ จะพบว่าใน AppData ของ user : Chase มีการ install Firefox browser ไว้
  25. ลอง query process ด้วย : ps ผ่าน PowerShell จะพบว่าปัจจุบันก็ยังมี process ของ Firefox ใช้งานอยู่
  26. ลอง dump process ออกมาดูเลย ด้วย sysinternal tools – ProcDump (Ref : https://docs.microsoft.com/en-us/sysinternals/downloads/procdump)
  27. Download มาลงเครื่องเป้าหมายก่อน ผ่าน Invoke-WebRequest
  28. ในการทำ process dump ด้วย ProcDump จะต้อง dump ด้วย process id ที่เราระบุ โดยเราสามารถใช้ Get-Process เพื่อหา pid ของ process ที่เราต้องการได้ ดังรูป
  29. Dump ออกมากันได้เลย อย่าลืมใส่ /accepteula ด้วยเพราะเราทำผ่าน command prompt แล้วระบุ pid ที่เราได้มา ผ่าน option –ma จะได้ไฟล์ dump ที่เป็น .dmp ขนาดราวๆ 450 MB ออกมา
  30. ทำการ transfer dump file มาที่เครื่องของ attacker แล้วใช้ strings เพื่อหา keyword ว่า “password” ดู
  31. นั่งดูไปสักพัก จะเจอสิ่งที่น่าสนใจคือมีการเรียก request บาง page ด้วยการ post username, password ไว้ ซึ่งดูเหมือนจะเป็น hint บางอย่างว่าเป็น credential ของ user : admin
  32. ลอง test ดูกันเลย โดยเอา credential ที่ได้จาก dump file ไปใส่ใน WinRM shell
  33. รัน ruby file เพื่อไป authen ด้วย user : Administrator ดู ซึ่งเข้าได้แล้วดั่งที่ hint
  34. เข้าไปที่ Desktop folder ของ user : Administrator จะพบ flag : root.txt โดยสิทธิ์ local administrator ก็จะสามารถ read flag นี้ได้แล้ว