正準(zhǔn)備啟動(dòng)信息收集工作,頁面上有三個(gè)地方引起了我的注意:.do 的接口地址、登錄功能、密碼找回功能。
審查 .do 接口。看到 .do 自然聯(lián)想到 struts2 命令執(zhí)行全家桶。
安恒出品的 S2 漏洞驗(yàn)證工具掃描下:
掃描不出漏洞
審查登錄功能。登錄功能的審查點(diǎn)很多,比如賬號是否可枚舉、密碼是否可暴破,但前提是沒有驗(yàn)證碼,顯然這里存在圖片驗(yàn)證碼,所以,我先確認(rèn)驗(yàn)證碼是否可繞過。
攔截登錄請求:
應(yīng)答標(biāo)志為 2,第二次重發(fā),應(yīng)答標(biāo)志變?yōu)?1
顯然,驗(yàn)證碼防御機(jī)制有效,雖然 Python 調(diào)用 tesseract 識別圖片的手法可有效攻擊圖片驗(yàn)證碼,但需要我爬取該站的大量圖片來訓(xùn)練,這個(gè)階段無需太深入,暫時(shí)放一放。
審查密碼找回功能。密碼找回功能很容易出現(xiàn)邏輯錯(cuò)誤,經(jīng)驗(yàn)來看,至少可從七個(gè)方面攻擊密碼找回功能:重置憑證接收端可篡改、重置憑證泄漏、重置憑證未校驗(yàn)、重置憑證可暴破、用戶混淆、應(yīng)答中存在影響后續(xù)邏輯的狀態(tài)參數(shù)、token 可預(yù)測。
訪問密碼找回頁面:
攔截密碼找回的請求:
從應(yīng)答描述可知,提示該用戶不存在,重發(fā)幾次,結(jié)果相同,說明圖片驗(yàn)證碼未生效,好了,第一個(gè)洞,用戶名可枚舉。
顯然,用戶名在該請求的 params 參數(shù)中,URL 解碼可得明文:
于是,將 root 設(shè)定為枚舉變量,加載中國人姓名(top500)、后臺賬號兩個(gè)字典,進(jìn)行枚舉:(這里需要的注意的是,大部分的系統(tǒng)可能存在黑名單校驗(yàn),枚舉時(shí)可使用VPN進(jìn)行IP輪換)
得到三個(gè)有效賬號:nana、admin、liufei。
隨意選個(gè)賬號進(jìn)入密碼找回流程,liufei,應(yīng)答為 JSON 數(shù)據(jù),格式化后嚇我一跳:
敏感信息大贈(zèng)送!有郵箱,甚至有哈希密碼。記下來,第二個(gè)漏洞,賬號相關(guān)敏感信息泄漏。
我的目的很明確,獲取登錄密碼,所以,我計(jì)劃利用泄漏信息,從信息庫和哈希反解兩方面達(dá)到目的。
信息庫。提取郵箱中的用戶名,liufei 的 liufei、nana 的 18xxxxxx56、admin 的 legxxxxxxng,在信息庫中查詢歷史密碼。
只找到 liufei 相關(guān)的多個(gè)歷史密碼,逐一驗(yàn)證,均錯(cuò)誤。
哈希反解。提取三個(gè)賬號的哈希密碼,liufei 的
a1e0476879cab2a76cc22c80bbf364dd、nana 的 208f0aba4a6d4b9afe94207e6c57d594、admin 的 3faf009c43bb39c5a37859bc48feaff3。
有了哈希密碼,第一時(shí)間查彩虹表(https://www.cmd5.com/),反解明文密碼:
只有賬號 liufei 的密碼解出為 !QAZ2wsx,nana、admin 無解,暫時(shí)放下。第三個(gè)漏洞,業(yè)務(wù)系統(tǒng)存在弱口令賬號 liufei。
通過 liufei / !QAZ2wsx 登錄網(wǎng)站:
功能非常有限,只有個(gè)回收站,里面沒有業(yè)務(wù)任何數(shù)據(jù)。
上圖中有幾個(gè)輸入框,應(yīng)該是個(gè)查詢功能,但是找不到查詢按鈕,嘗試在前端 html 源碼中翻找查詢接口,無果;在 burp 的報(bào)文歷史中審查 JS,也沒找到有用的接口。看來,還得找個(gè)高權(quán)限的賬號。
回到先前未反解出來的兩個(gè)賬號,nana 的
208f0aba4a6d4b9afe94207e6c57d594、admin 的 3faf009c43bb39c5a37859bc48feaff3。
https://www.cmd5.com/擁有海量的彩虹表數(shù)據(jù),它反解不出來,很可能是個(gè)強(qiáng)口令。對于強(qiáng)口令的暴破,我習(xí)慣圍繞用戶名,制作具有社工屬性的密碼字典,如,用戶名 nana,社工屬性密碼可能為 NaNa、na520na、nana@19901015。如何生成社工屬性密碼字典?hashcat!對滴,hashcat 不僅是哈希暴破神器,也支持基于規(guī)則生成密碼字典,規(guī)則庫位于 hashcat/rules/:
其中,dive.rule 含有我需要的規(guī)則,選之。我把 nana 視為基礎(chǔ)信息存入 base.txt 中作為輸入,讓 dive.rule 模仿學(xué)習(xí)生成類似的密碼字典,保存至 se_passwds.txt:接著用社工字典暴破哈希密碼:
7 秒出結(jié)果,得到 nana 的密碼 nanacnacnanac,第四個(gè)漏洞,業(yè)務(wù)系統(tǒng)存在社工屬性口令賬號 nana。用類似的手法,制作了賬號 admin 的社工密碼字典,遺憾,并未暴出 admin 的密碼。沒關(guān)系,用 nana / nanacnacnanac 登錄系統(tǒng),或許有新發(fā)現(xiàn)。
一旦進(jìn)入后臺,習(xí)慣上先找三類功能:上傳功能、查詢功能、命令功能。上傳功能,通過各種任意文件上傳攻擊手法,上傳 webshell;查詢功能,審查是否存在 SQL 注入,拿數(shù)據(jù)(如,哈希密碼);命令功能,指那些有著名工具實(shí)現(xiàn)的功能,比如,輸入個(gè) IP,業(yè)務(wù)功能探測該 IP 是否存活,服務(wù)端可能執(zhí)行了 ping 命令,又如,上傳個(gè)壓縮包,頁面顯示壓縮包內(nèi)容,服務(wù)端可能執(zhí)行了 unzip 命令,這時(shí),用命令注入或命令選項(xiàng)注入的手法,攻擊服務(wù)端。
登錄 nana 賬號,業(yè)務(wù)功能也不多,但有個(gè)上傳功能:
我得深入審查它,或許是 getshell 的唯一通道。
先上傳一個(gè)正常的 PNG 圖片,頁面報(bào)錯(cuò),提示非管理員禁止上傳:
這可不好玩了,admin 的哈希密碼之前用彩虹表、社工字典都嘗試過,無法反解,前進(jìn)步伐再次受阻。
回想之前刺探過的密碼找回功能,發(fā)現(xiàn)泄漏用戶哈希密碼就未再深入,應(yīng)該再審查下,或許能重置 admin 密碼。
用 admin 進(jìn)入密碼找回流程,先順利通過服務(wù)端用戶名是否存在的校驗(yàn),然后向該賬號綁定的郵箱地址發(fā)送密碼重置 URL,請求如下:
顯然,參數(shù) email 存在不安全的直接對象引用(IDOR)問題,將其替換為攻擊者的郵箱,90% 的概率會收到重置郵件。
于是,我找了個(gè)匿名郵箱,嘗試劫持 admin 的密碼找回郵件:
很快,匿名郵箱收到來信,訪問帶 token 的密碼重置鏈接,還真能修改密碼:
至此,已經(jīng)拿到管理員的后臺權(quán)限。后續(xù)便可以很方便的上傳大馬小馬了。就不在一一列舉。
另外參數(shù) email 存在不安全的直接對象引用(IDOR)問題這是一個(gè)很常見的漏洞類型,通過抓包修改參數(shù)等操作很容易拿到修改密碼鏈接。






