?Part1 前言?
大家好,我是ABC_123。在日常的滲透測試及紅隊(duì)評估項(xiàng)目中,經(jīng)常遇到http 401身份認(rèn)證的情況,具體就是訪問一個特定目錄的時候,會彈出一個要求輸入用戶名密碼的框框。很多朋友會誤以為是與tomcat的http basic認(rèn)證一樣,就是把用戶名及密碼進(jìn)行了簡單的base64加密,然后使用相應(yīng)的工具進(jìn)行弱口令猜解,實(shí)際上這里面有各種各樣的身份驗(yàn)證算法,非常復(fù)雜。接下來ABC_123就搭建IIS測試環(huán)境,給大家分享一下相關(guān)經(jīng)驗(yàn),同時分享一下不同情況下弱口令枚舉的關(guān)鍵Java代碼實(shí)現(xiàn),網(wǎng)上能用的java代碼極少,甚至是搜索不到,ABC_123也是踩了一大堆的坑。
注:特別感謝我的APT老大哥的指點(diǎn),Negotiate協(xié)議和Kerberos協(xié)議的問題困擾了我好長時間,在老哥的指點(diǎn)下茅塞頓開。
?Part2 技術(shù)研究過程?
基礎(chǔ)環(huán)境搭建
IIS中間件可以很方便地設(shè)置常用的HTTP 身份認(rèn)證,本地搭建一個IIS環(huán)境,對需要身份認(rèn)證的/fck目錄進(jìn)行權(quán)限設(shè)置,雙擊“身份驗(yàn)證”選項(xiàng)。
發(fā)現(xiàn)IIS默認(rèn)情況下有以下這幾種身份驗(yàn)證方式,分別是“Windows身份驗(yàn)證”、“基本身份驗(yàn)證”、“匿名身份驗(yàn)證”、“摘要式身份驗(yàn)證”。其中匿名身份驗(yàn)證就是允許任意用戶訪問,不牽扯到輸入弱口令問題,這里就不過多敘述了。
基本身份驗(yàn)證
首先看第一種情況,也就是最常見的Http Basic認(rèn)證,就是類似于Tomcat后臺管理頁面的登錄方式。如下圖所示,開啟“基本身份驗(yàn)證”選項(xiàng),其它的全部關(guān)閉。
在這種情況下,以GET請求訪問/fck目錄時返回如下消息頭,"Basic" 表示所使用的驗(yàn)證方案是基本身份驗(yàn)證,這是HTTP協(xié)議中最簡單的一種認(rèn)證方法。"realm="192.168.237.129"" 指示了受保護(hù)資源所屬的域,除了IP地址,也可以是一個域環(huán)境的域名。
使用burpsuite進(jìn)行抓包發(fā)現(xiàn),其加密方式就是普通的Base64加密,與大家最常見的Tomcat的后臺登錄加密方式是一樣的,這種的太過常見,這里就不過多敘述。
摘要式身份驗(yàn)證
接下來嘗試一下“摘要式身份驗(yàn)證”,IIS中間件下的開啟摘要式身份驗(yàn)證需要加入域環(huán)境,于是ABC_123安裝了一個域控虛擬機(jī),域名為test111.com。接下來選擇test111.com之后點(diǎn)擊確定,IIS就啟用了該認(rèn)證模式。
此時,以GET請求/fck目錄,發(fā)現(xiàn)服務(wù)器返回如下消息頭:"Digest" 表示所使用的驗(yàn)證方案是摘要身份驗(yàn)證;"qop" 表示質(zhì)量保護(hù),這里是指定為"auth",表示使用身份驗(yàn)證;"algorithm" 指定了使用的加密算法,這里是MD5-sess;"nonce" 是一個由服務(wù)端生成的隨機(jī)字符串;realm則給出了域控服務(wù)器的域名,就是我們搭建的域環(huán)境test111.com。
根據(jù)彈出的提示框輸入一個用戶名密碼,之后使用burpsuite抓包,發(fā)現(xiàn)瀏覽器發(fā)送的http請求是如下格式,看起來非常復(fù)雜,已經(jīng)不是使用簡單的java代碼就能夠?qū)崿F(xiàn)弱口令猜解的。
最后,ABC_123踩了一大堆坑,然后各種搜索、嘗試了各種代碼,最后給出如下真正可用的java代碼。將如下代碼改成多線程,就可以實(shí)現(xiàn)對此的HTTP 摘要身份驗(yàn)證的用戶名密碼的暴力破解了。
Windows身份驗(yàn)證(Negotiate+NTLM)
接下來嘗試一下“集成Windows 身份驗(yàn)證”方式,勾選相應(yīng)的選項(xiàng)之后,使用burpsuite對其進(jìn)行抓包。
此時,以GET請求/fck目錄,發(fā)現(xiàn)服務(wù)器返回如下消息頭,返回消息頭有兩個WWW-Authenticate,ABC_123查閱資料發(fā)現(xiàn),這里主要是為了兼容性的考量。如果客戶端不支持Negotiate協(xié)議,那么我們的瀏覽器就會選擇NTLM認(rèn)證方式;如果客戶端支持并選用了Negotiate協(xié)議,又會有兩種情況,分別是Kerberos協(xié)議及NTLM協(xié)議。這時候如果客戶端支持Kerberos,會優(yōu)先使用Kerberos驗(yàn)證;如果不支持Kerberos,則會選用NTLM認(rèn)證。這里面很繞,如果新手朋友聽不明白,可以繼續(xù)看接下來的實(shí)驗(yàn)。
根據(jù)提示框的提示,輸入用戶名密碼之后,使用抓包工具進(jìn)行抓包發(fā)現(xiàn)Authorization: Negotiate TlRMTVNTUAADAAAA,base64解碼之后發(fā)現(xiàn)是Authorization: Negotiate NTLMSSP+二進(jìn)制數(shù)據(jù),說明此時我們的瀏覽器選擇了NTLM認(rèn)證。
對于這種情況下的HTTP?NTLM賬號密碼猜解,ABC_123又是踩了一大堆的坑,最終給出的真正能用的Java代碼如下:
Windows身份驗(yàn)證(Negotiate+Kerberos)
接下來看最后一種情況,就是Negotiate認(rèn)證下的Kerberos協(xié)議過程。本地繼續(xù)搭建一個虛擬機(jī),新建一個域用戶并以域用戶身份登錄此虛擬機(jī)。
此時目標(biāo)url的/fck目錄不能以ip地址形式訪問,需要以計(jì)算機(jī)名的形式瀏覽,此時發(fā)現(xiàn)不需要輸入用戶名及密碼就可以直接訪問/fck目錄。因?yàn)槲覀円杂蛴脩羯矸莸卿浟水?dāng)前虛擬機(jī),當(dāng)前域用戶是有權(quán)限訪問/fck目錄的,所以此時瀏覽器使用了Kerberos認(rèn)證。此時使用Fiddler抓包,在“認(rèn)證”選項(xiàng)卡下,發(fā)現(xiàn)了通信過程是Kerberos協(xié)議。
?Part3 總結(jié)?
1.? 對于HTTP身份驗(yàn)證的弱口令審計(jì),需要仔細(xì)分析服務(wù)器返回消息頭中的WWW-Authenticate字段。
2.? 本篇文章對于新手會難以理解,最好是能搭建環(huán)境嘗試一下,還有更多關(guān)于HTTP身份驗(yàn)證的情況,后續(xù)ABC_123繼續(xù)搭建環(huán)境給大家分享。
公眾號專注于網(wǎng)絡(luò)安全技術(shù)分享,包括APT事件分析、紅隊(duì)攻防、藍(lán)隊(duì)分析、滲透測試、代碼審計(jì)等,每周一篇,99%原創(chuàng),敬請關(guān)注。
Contact me: 0day123abc#gmail.com文章來源:http://www.zghlxwxcb.cn/news/detail-765578.html
(replace # with @)文章來源地址http://www.zghlxwxcb.cn/news/detail-765578.html
到了這里,關(guān)于第83篇:HTTP身份認(rèn)證401不同情況下弱口令枚舉方法及java代碼實(shí)現(xiàn)(上篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!