Black Hat Asia 2023

คิดจะ Hack คิดถึง Vulnhub พร้อมตัวอย่างการแฮคจาก Android App จนสามารถควบคุม Server ของ App นั้นๆ

วันนี้ทางทีมงาน TechTalkThai ได้รับเกียรติจากนักเขียนรับเชิญ MaYaSeVeN ผู้ที่เปิดสอน Hacking Workshop สำหรับคนไทย มาเล่าประสบการณ์การเล่น Vulnhub เพื่อฝึก Hack ระบบกันแบบฟรีๆ แต่ความยากนั้นก็ยังถือว่าอยู่ในระดับที่ยากและท้าทาย ใครที่สนใจเรื่องราวแนวนี้พลาดไม่ได้ ขอเรียนเชิญทุกท่านอ่านบทความจาก MaYaSeVeN กันได้เลยครับ

 

mayaseven_logo

สวัสดีครับผม MaYaSeVeN ในบทความนี้ผมจะมานำเสนอ CTF/labs ที่เอาไว้ฝึกแฮคฟรี ที่เป็นรูปแบบ Boot-to-Root โดยในการฝึกแฮคในลักษณะนี้คือโจทย์จะให้ VM Image มาหลังจากเรา Boot VM นั้นแล้ว ก็ให้เราทำการแฮค Guest OS นั้นจนได้สิทธิ์ Root นั้นละครับ Boot-to-Root

 

รู้จักกับ Vulnhub กันก่อน

Vulnhub (https://www.vulnhub.com/) คือที่รวบรวม Vulnerable By Design หรือ VM Image ที่มีช่องโหว่ และเราเองก็สามารถสร้าง VM Image ที่มีช่องโหว่และอัพโหลดขึ้นไปไว้บน Vulnhub ให้คนอื่นได้ลองเล่นด้วยได้เช่นกัน ซึ่งในปัจจุบันนี้บน Vulnhub มีโจทย์ให้เราเล่นมากกว่า 140 โจทย์เลยทีเดียว

หน้าตาของเว็บไซต์ www.vulnhub.com
หน้าตาของเว็บไซต์ www.vulnhub.com

 

ข้อดีของโจทย์ลักษณะนี้คือเสมือนการแฮค Server จริงๆ เลย เริ่มตั้งแต่การเก็บข้อมูลเป้าหมายด้วย Nmap หาช่องโหว่จนได้ Shell และก็หาช่องโหว่อีกรอบหรือหลายรอบจนได้สิทธิ์ Root

ข้อเสียของ CTF/labs แบบ Boot-to-Root คือเป็นโจทย์แบบจำลองสถานการณ์เดียว เช่น บริษัท Best Security Inc. กำลังพัฒนา Software ตัวหนึ่งและ Server นี้กำลังทดลองให้บริการ Software ตัวนั้นอยู่ เป็นต้น นั้นหมายความว่าถ้าเราอยากจะฝึก OWASP Top 10 ให้ครบทั้ง 10 ข้อหรือหวังจะฝึกพื้นฐานอันนี้คงไม่ใช่คำตอบ เพราะโจทย์ค่อนข้างยากเลยทีเดียว

 

ตัวอย่างการเล่นโจทย์บน Vulnhub

ผมจะยกตัวอย่างการเล่นโจทย์ตัวหนึ่งที่ผมชอบคือ Flick II ของ Leonjza เพราะมี Mobile App มาเกี่ยวข้องด้วย โดยต้องเริ่มทำการเก็บข้อมูลจากฝั่ง Mobile App ไล่ไปเรื่อยๆ จนกระทั่งได้สิทธิ์ Root ในฝั่ง Server Side

เนื้อหาโจทย์ที่จะทดลองเล่นกันในครั้งนี้
เนื้อหาโจทย์ที่จะทดลองเล่นกันในครั้งนี้

 

โจทย์บอกว่าบริษัท Flick Inc. เร่งทำงานอย่างหนักเพื่อที่จะได้ปล่อย Checker App ให้ทัน Deadline ท่ามกลางความวุ่นวายในที่สุดก็ได้ App ที่ให้เราสามารถทดสอบความปลอดภัยก่อนที่จะนำไปใช้จริง (แปลให้เข้ากับสถานการณ์จริงนิดนึง 5555+)

สิ่งที่เราได้มาจากโจทย์คือไฟล์ Android .apk ที่จะนำขึ้นไปอยู่บน Play Store และไฟล์ VM ที่จะนำไปไว้บน Cloud Hosting ต่อไป

หลังจากที่ Download โจทย์มาเสร็จแล้ว ผมก็ Boot VM นั้นและนำ Android App ไปติดตั้งใน Emulator แล้วจึงทำการ Scan Port VM ด้วย Nmap จนได้ผลตามรูปด้านล่าง

VM server side ของ android app หลังจาก boot ขึ้นมาผมตั้งค่า network ของ VM ตัวนี้เป็น NAT
VM Server Side ของ Android App หลังจาก Boot ขึ้นมาผมตั้งค่า Network ของ VM ตัวนี้เป็น NAT

 

Android app หลังจากติดตั้งและทำการตั้งค่า API Server
Android App หลังจากติดตั้งและทำการตั้งค่า API Server

 

ผลการ scan port ด้วย nmap จะเห็นว่ามีการเปิดแค่ port 443 ในเบื้องต้นเดาว่าน่าจะเป็น web service port ที่เอาไว้คุยกับ Android app
ผลการ Scan Port ด้วย nmap จะเห็นว่ามีการเปิดแค่ Port 443 ในเบื้องต้นเดาว่าน่าจะเป็น Web Service Port ที่เอาไว้คุยกับ Android App

 

เตรียม Environment เสร็จหมดแล้ว! ลุยกันต่อเลย!

ขั้นตอนต่อไปผมก็ลองเล่น Android App ในมุมผู้ใช้และพบว่า App นี้เอาไว้ Check สถานะของ Server ตามรูป

ตัวอย่างการใช้งาน Android app ที่โจทย์ให้มา
ตัวอย่างการใช้งาน Android app ที่โจทย์ให้มา

 

จากรูป Output เหมือนการใช้ ps ที่เป็น Linux Command ผมจึงเดาได้ว่าต้องมีการส่งคำสั่ง OS Command ไปที่ฝั่ง Server Side ซึ่งนั่นแปลว่าเราอาจจะทำ Command Injection ได้ จากนั้นผมจึงได้พยายาม Intercept การคุยกันระหว่าง Android App กับ Server Side ด้วย Burp แต่ทำได้ไม่สำเร็จ

หลังจาก Intercept ข้อมูลไม่ได้ผมก็ทำการ Decompile ตัว Android App เพื่อดูการทำงานของ Android App ได้ผลดังภาพด้านล่างนี้

vulnhub_007

ใน PubKeyManager.class ผมเจอสาเหตุว่าทำไมถึง Intercept การคุยกันระหว่าง Android App และ Server Side ไม่ได้แล้ว นั่นก็เป็นเพราะว่าตัว Android App มีการทำ Certificate Pinning ไว้นั้นเอง

 

หาทางจัดการกับการทำ Certificate Pinning ให้ได้

มาถึงตรงนี้ผมมีทางเลือก 2 ทางคือ

1. ทำการ Patch Android App ตัวนี้โดยการแก้ไข Dalvik Assembly Code ที่ Decompile มาเพื่อ Bypass การตรวจสอบ Certificate Pinning และทำการ Recompile กลับไปเป็นไฟล์ APK อีกครั้ง แล้วจึงใช้ Burp เพื่อ Intercept การทำงาน ได้ผลตามรูป

ข้อมูลที่ดักจับได้จากการคุยกันระหว่าง android app และ server side ด้วย burp suite
ข้อมูลที่ดักจับได้จากการคุยกันระหว่าง Android App และ Server Side ด้วย Burp Suite

 

2. ทำการอ่าน Java Code ที่ Decompile มาว่ามันทำงานยังไงแล้วก็เขียนโปรแกรมมาส่ง Message คุยกับ API ฝั่ง Server Side โดยตรง

 

พอมาถึงจุดนี้หลายคนเริ่มมองออกแล้วว่า Android App ตัวนี้มีช่องโหว่อะไรให้สังเกตจากรูปบน /do/cmd/cHM= โดยคำว่า cHM= หลังจาก Decode ด้วย base64 จะได้ ps นั้นหมายความเราสามารถที่จะให้ Server รันคำสั่งอะไรก็ได้ด้วยคำสั่งในรูปแบบดังต่อไปนี้

/do/cmd/base64_encode(‘OS command’)

ผมจึงได้ทำการเขียน Exploit หรือ Code ที่ใช้โจมตีช่องโหว่เพื่อทำ Reverse Shell ตามรูป

รูป code ที่ใช้โจมตี server side เพื่อทำการ reverse shell
รูป Code ที่ใช้โจมตี Server Side เพื่อทำการ Reverse Shell

 

ได้ Shell แล้ว! ต่อไปคือการเพิ่มระดับสิทธิ์!

หลังจากได้ Shell ผมก็ทำการเก็บข้อมูลเพิ่มเติมเพื่อจะหาช่องโหว่ในการเพิ่มสิทธิ์เริ่มจากอ่านไฟล์ /etc/passwd เพื่อดูว่าเครื่องนี้มี Users อะไรอยู่บ้างตามรูป

ไฟล์ /etc/passwd จะเห็นว่ามี users ที่น่าสนใจอยู่สามคนคือ robin, bryan, sean
ไฟล์ /etc/passwd จะเห็นว่ามี Users ที่น่าสนใจอยู่สามคนคือ robin, bryan, sean

 

ให้เราย้อนกลับไปดูรูปหน้าตา Android App ด้านบนอีกครั้งจะเห็นว่ามีฟีเจอร์ Use Secure Access อยู่ แต่ไม่สามารถเปิดใช้ได้ผมเลยลองไปดูใน Java Code ที่ Decompile มาพบว่ามันคือ ssh นั้นเองตามรูป

code ในส่วนฟีเจอร์ User Secure Access
Code ในส่วนฟีเจอร์ User Secure Access

 

จากรูปด้านบนเราจะเห็นว่าเป็นการ Login ssh ด้วย User robin นั้นเองแต่ฟีเจอร์นี้ใช้ไม่ได้เพราะ Server Side ไม่ได้เปิด Port 22 แต่จากจุดนี้เราจะได้ Password ของ User robin แต่ Password ถูก Encode อยู่ตามรูป

password ssh ของ robin ถูก encode ด้วย xor
Password ssh ของ Robin ถูก Encode ด้วย XOR

 

ผมจึงได้ทำการเขียนโปรแกรมขึ้นมาเพื่อทำการ XOR เพื่อให้ได้ Password ของ robin ตามรูป

vulnhub_013

ผลการ Decode Password ของ robin ได้ Password คือ 40373df4b7a1f413af61cf7fd06d03a565a51898

vulnhub_014

ด้วยการใช้รหัสผ่านนั้น สุดท้ายเราก็ได้ Shell บน User robin แล้ว

ในตอนนี้เราก็ได้ Shell ของ User robin บนเครื่อง Server Side ของ Android app แล้วครับ แต่โจทย์ยังไม่จบเพียงเท่านี้ สิ่งที่เราต้องทำต่อจากนี้ก็คือการหาทางเพิ่มสิทธิ์ต่อไปเรื่อยๆ จนกระทั่งได้สิทธิ์ Root มานั่นเองถึงจะถือว่าจบการทำ Boot-to-Root ในโจทย์ข้อนี้ แต่เพื่อไม่ให้บทความนี้ยาวจนเกินไป ผมขอตัดจบลงตรงนี้ ให้เพื่อนๆ ได้ลองไปเล่นกันต่อเองนะครับ

เล่นจนจบ เมื่อได้สิทธิ์ Root และได้  Flag แล้ว
เล่นจนจบ เมื่อได้สิทธิ์ Root และได้ Flag แล้ว

 

สำหรับเพื่อนๆ ที่เล่นแล้วติดขัดอะไรหรือมีคำถามสงสัย ก็สามารถเข้ามาพูดคุยกันได้ที่ Facebook Fan Page https://www.facebook.com/MaYaSeVeN-139105159494751/ เลยนะครับ

 

ก็จบบทความแนะนำ Vulnhub กันแบบถึงพริกถึงขิงกันไปในครั้งนี้โดยคุณ MaYaSeVeN แล้วนะครับ ทางทีมงานก็ต้องขอขอบคุณทาง MaYaSeVeN ที่ช่วยสละเวลามาให้ความรู้ผ่านทางบทความบนเว็บไซต์แก่ผู้อ่านของเราทุกท่านด้วยเช่นกัน และทางทีมงาน TechTalkThai ก็ขออนุญาตใช้พื้นที่ตรงนี้ช่วยโปรโมทคอร์ส Hacking Workshop ของ MaYaSeVeN ด้วยเลยก็แล้วกันครับ

 

MaYaSeVeN เปิด Hacking Workshop วันที่ 18-19 มิ.ย. แจกสิทธิ์นักศึกษาฟรี 1 ที่นั่ง โดย TechTalkThai

สำหรับผู้ที่อยากอัพเดตความรู้ทางด้าน Security ของตนเองแบบลงลึก ทาง MaYaSeVeN ได้ออกมาเปิดคอร์ส Hacking Workshop ในรอบวันที่ 18-19 มิถุนายน 2016 นี้อีกครั้ง พร้อมจับมือกับ TechTalkThai แจกสิทธิ์ให้นักศึกษาฟรี 1 ที่นั่ง โดยมีรายละเอียดเนื้อหาในคอร์สและวิธีการสมัครดังนี้ https://www.techtalkthai.com/mayaseven-opens-hacking-workshop-18-19-june-2016-with-1-free-student-quota/


About techtalkthai

ทีมงาน TechTalkThai เป็นกลุ่มบุคคลที่ทำงานในสาย Enterprise IT ที่มีความเชี่ยวชาญทางด้าน Network, Security, Server, Storage, Operating System และ Virtualization มารวมตัวกันเพื่ออัพเดตข่าวสารทางด้าน Enterprise IT ให้แก่ชาว IT ในไทยโดยเฉพาะ

Check Also

พบ ‘HinataBot’ บอทเน็ตที่อาจสร้างการโจมตี DDoS ขนาด 3.3 Tbps ได้

พบมัลแวร์บอตเน็ตใหม่ HinataBot มุ่งเป้าโจมตี Realtek SDK, Huawei Router และ Hadoop YARN Server เพื่อรวมการโจมตีที่อาจสร้าง Distributed Denial of …

[Video] NCSA Webinar Series EP.8 – WAAP ช่วยยกระดับ Security Posture ขององค์กรได้อย่างไร

สำหรับผู้ที่ไม่ได้เข้าฟังการบรรยาย NCSA Webinar Series EP.8 เรื่อง “WAAP ช่วยยกระดับ Security Posture ขององค์กรได้อย่างไร” ที่เพิ่งจัดไปเมื่อสัปดาห์ที่ผ่านมา หรือต้องการรับชมการบรรยายซ้ำอีกครั้ง สามารถเข้าชมวิดีโอบันทึกย้อนหลังได้ที่บทความนี้ครับ