一個(gè)登錄框引起的血案
0x00 文章內(nèi)容結(jié)構(gòu)圖

0x01 管理后臺(tái)隱藏的注冊(cè)接口
很多系統(tǒng)的后臺(tái)會(huì)用一些本身存在注冊(cè)功能,但是在后續(xù)正式使用的時(shí)候,開(kāi)發(fā)人員為了圖省事,僅僅刪除前端顯示的操作。也就是說(shuō)該系統(tǒng)注冊(cè)接口仍然存在,只是你在客戶端無(wú)法找到而已。(文末有驚喜!)
案例
這是某系統(tǒng)的管理后臺(tái),除了我們所看到的以及HTML源碼,js代碼均為發(fā)現(xiàn)其他有效接口。

此時(shí),我手動(dòng)將login修改為reg,沒(méi)想到中獎(jiǎng)了。

很簡(jiǎn)單的嘗試,最終讓我獲得了2500元的賞金。
一般來(lái)說(shuō)我會(huì)嘗試像reg、register、sign字段,這些字段直接記住手動(dòng)測(cè)試即可,都沒(méi)必要用字典跑了。
再來(lái)看另一個(gè)案例:

這個(gè)時(shí)候我們就要靈活變通了,根據(jù)開(kāi)發(fā)人員的命名規(guī)則來(lái)進(jìn)行測(cè)試,此時(shí)我們應(yīng)該嘗試的便是:Reg、Register、Sign。

0x02 目錄遍歷
當(dāng)資產(chǎn)僅僅只有一個(gè)登陸框時(shí),一定要花費(fèi)兩秒鐘的時(shí)間來(lái)測(cè)試這個(gè)目錄遍歷漏洞,講真,真的只需要兩秒鐘。
案例
第一秒:直接按快捷鍵 Ctrl+U(查看頁(yè)面源代碼),講真,不要再右鍵點(diǎn)擊了,太慢。

第二秒:直接訪問(wèn)https://domain/static/,不要問(wèn)我為什么直接訪問(wèn)static目錄。這個(gè)漏洞的確認(rèn)沒(méi)必要用路徑掃描器去掃。

此時(shí)只需要了兩秒鐘,一個(gè)目錄遍歷漏洞便確認(rèn)了。后續(xù)的則是想辦法找敏感文件來(lái)擴(kuò)大危害了。
最后,找到了該系統(tǒng)的備份文件,很常規(guī)的一個(gè)備份文件的目錄,backup。

不過(guò)這里有趣的時(shí),遇到了其他困難。
找到數(shù)據(jù)庫(kù)配置文件api\app\config\database.php
可以看到加密了,使用了網(wǎng)上的phpjm加密,解密比較費(fèi)勁,不過(guò)過(guò)了一會(huì)我想到,根本沒(méi)必要解密。

通過(guò)封裝的數(shù)據(jù)庫(kù)文件可以知道database.php文件使用變量$db來(lái)存放配置信息。

我只需要新建一個(gè)文件,然后包含database.php文件,再打印出配置信息來(lái)即可。

除去后面代碼審計(jì)出來(lái)的漏洞以外,這個(gè)漏洞獲得了4000元的賞金。
0x03 三端邏輯處理不一致導(dǎo)致的問(wèn)題
這里的三端只是一個(gè)虛詞,并不是非得三端,可能是兩端,也可能是四端,只是這里我的案例是三端的原因:web端、app端、小程序端。
就像是木桶原理,你的站點(diǎn)web端做的安全系數(shù)可能很高,但是你的app端、小程序端如果很爛的話,依舊可以讓人突破進(jìn)去。
案例
首先這個(gè)站點(diǎn)我先發(fā)現(xiàn)的是web端,其次是app端,最后則是小程序端。
我在web端跟app端用了很多時(shí)間,最后突破點(diǎn)是小程序端,發(fā)現(xiàn)小程序端以后,則用了很短的時(shí)間。
Web端安全系數(shù)最高,在登陸時(shí),用了rsa加密,沒(méi)法直接爆破,并且用了token校驗(yàn)。我手動(dòng)試了一下,沒(méi)法確定用戶名,只能得到一個(gè)【用戶名或密碼錯(cuò)誤的提示】。
后來(lái)我發(fā)現(xiàn)了app端,發(fā)現(xiàn)app端有圖形驗(yàn)證碼,并且是有效的圖形驗(yàn)證碼,我試圖通過(guò)該apk文件包含的js代碼來(lái)入手,無(wú)果。
最終我發(fā)現(xiàn)了微信小程序端,在登陸時(shí)由于圖形驗(yàn)證碼是客戶端刷新,因此可以直接進(jìn)行數(shù)據(jù)包重放。
確認(rèn)用戶名是否存在非常重要,這個(gè)時(shí)候我一般會(huì)先輸入一個(gè)一定不存在的用戶名進(jìn)行嘗試,可以看到,竟然提示了【賬號(hào)不存在】,最終我通過(guò)該處枚舉出了多個(gè)用戶名。

然后我進(jìn)行了簡(jiǎn)單的爆破嘗試,未果,此時(shí)我拿著正確的用戶名去嘗試app端時(shí),發(fā)現(xiàn)了另一個(gè)問(wèn)題。
當(dāng)輸入正確的用戶名時(shí),竟然會(huì)將該用戶的基本信息返回過(guò)來(lái),包括但不限于姓名,部門,密碼的md5值。

我用拿到的賬號(hào)密碼登陸成功了web端、app端、小程序端。
最終獲得了1400元的漏洞賞金。
0x04 從系統(tǒng)幫助文檔進(jìn)行突破
當(dāng)資產(chǎn)只有一個(gè)登陸框時(shí),確認(rèn)用戶名信息則顯得至關(guān)重要,通過(guò)系統(tǒng)的幫助文檔,可以快速的幫我們確定用戶名的規(guī)則及密碼的規(guī)則。從而可以有針對(duì)性的進(jìn)行爆破。
案例
如下圖所時(shí),這個(gè)系統(tǒng)我放棄了一次又一次,在登陸時(shí)會(huì)先校驗(yàn)公司名是否存在,但是我卻連公司名都不知道,更不要說(shuō)用戶名了。

我發(fā)現(xiàn)這個(gè)系統(tǒng)用的是非自研的系統(tǒng),因此我通過(guò)蛛絲馬跡(恕我直言,我不能說(shuō)),結(jié)合google語(yǔ)法,intitle:XXXX,發(fā)現(xiàn)了該系統(tǒng)的一個(gè)測(cè)試系統(tǒng),該測(cè)試系統(tǒng)使用了另一個(gè)域名,于是我通過(guò)site該域名,發(fā)現(xiàn)了該系統(tǒng)的一個(gè)幫助文檔。
通過(guò)下圖,我獲得了,公司名的命名規(guī)則。

通過(guò)下圖,我獲得了密碼的規(guī)則,至少6位,2/3原則。

使用了正確的公司名后發(fā)現(xiàn)了,發(fā)現(xiàn)存在用戶名枚舉漏洞,然后我寫了一個(gè)腳本,原理就是三重循環(huán)。
公司名 – 用戶名 – 生成的該用戶符合規(guī)則的社工型字典。
很快,大約30秒,第一個(gè)用戶的密碼就出來(lái)了。
我使用的是用戶名+123456的形式,既符合規(guī)則,又好用。
登陸系統(tǒng)后發(fā)現(xiàn)了很多漏洞。最終也是獲得了6000元的賞金。
0x05 從js文件進(jìn)行突破
講真,我是真的很喜歡讀js文件,因?yàn)樗?jīng)常給我?guī)?lái)驚喜,接口信息、命名規(guī)則等頻率是極高的。
案例
如下圖,看到下圖的時(shí)候,我小心_臟噗通一跳,哇咔咔,竟然沒(méi)有校驗(yàn)舊密碼。

于是我構(gòu)造數(shù)據(jù)包。對(duì)了,有一個(gè)技巧,其實(shí)不用構(gòu)造數(shù)據(jù)包,直接將我紅框標(biāo)記的區(qū)域復(fù)制出來(lái),粘貼到開(kāi)發(fā)者工具,js的控制臺(tái)里,然后替換userCode變量跟password變量回車抓包即可。
我推測(cè)存在admin用戶,果然推測(cè)成功。

最終順利登陸后臺(tái),賺的2000元的賞金。
0x06 其他
當(dāng)然還有很多其他類型的,如apk重編譯突破登陸限制、圖型驗(yàn)證碼dos攻擊、歷史漏洞、Http Request Smuggling等。
我便不再說(shuō)了,網(wǎng)上很多資料。打算完結(jié)了,也不會(huì)再寫啦。
0x07 綜合
說(shuō)一個(gè)綜合的吧。我這個(gè)漏洞是利用了web端跟pc端處理邏輯不一樣,然后通過(guò)pc端js文件發(fā)現(xiàn)了密碼規(guī)則(這不是一個(gè)單純的名命規(guī)則)及可用來(lái)枚舉用戶名的接口來(lái)進(jìn)行突破的。
案例
Web端非常安全,我通過(guò)fuzz目錄,xxxx.jsp,發(fā)現(xiàn)了該站點(diǎn)的一個(gè)app下載地址download.jsp。
這個(gè)PC端跟web一樣存在圖型驗(yàn)證碼,只不過(guò)web端的圖形驗(yàn)證碼無(wú)法繞過(guò),但是pc端的圖形驗(yàn)證碼可以通過(guò)刪除該字段的值進(jìn)行繞過(guò)。
但是,不管用戶名是否存在,反饋都是一樣:賬號(hào)不存在或密碼錯(cuò)誤。
這個(gè)站點(diǎn)我放棄了很多天,因?yàn)閖s文件實(shí)在是太太太太大了,除了大還有別的障礙,總之就是一句話,讀起來(lái)費(fèi)勁。
最終我還是一段代碼一段代碼的讀了。
如下圖,原始功能是,用戶改變自己的在線/離線狀態(tài)。

這個(gè)接口導(dǎo)致我可以在未登陸狀態(tài)下,通過(guò)賬戶名加在線(1)離線(0)來(lái)根據(jù)響應(yīng)包判斷出用戶是否存在。
如果用戶名存在,那么res的值為1(即切換狀態(tài)成功),如果不存在那么值為-1

通過(guò)下圖,可以得知密碼的名命規(guī)則,字母+數(shù)字+特殊字符,最短8位。
這樣的密碼規(guī)則,確實(shí)難爆破,我心中一涼。
但是峰回路轉(zhuǎn)的是,我看到了以下代碼。
于是我推測(cè),可能是因?yàn)楹笈_(tái)的某些功能,導(dǎo)致會(huì)存在不符合規(guī)則的密碼存在,使用這些不符合規(guī)則的密碼進(jìn)行登陸時(shí),依舊可以登陸成功。
window.loation.href= main_url;
于是我用枚舉出來(lái)的幾千個(gè)賬號(hào),嘗試123456的密碼。最終成功登陸了PC端跟web端,結(jié)合其他福利獲得了2300元的賞金。
對(duì)了,再補(bǔ)充一下,通過(guò)刪除圖形驗(yàn)證碼的值繞過(guò)校驗(yàn)的截圖。
0x08 臨別
最后分享我整理好的網(wǎng)絡(luò)安全學(xué)習(xí)資料,需要的小伙伴掃碼即可領(lǐng)??!
學(xué)習(xí)路線
對(duì)于從來(lái)沒(méi)有接觸過(guò)網(wǎng)絡(luò)安全的同學(xué),我們幫你準(zhǔn)備了詳細(xì)的學(xué)習(xí)成長(zhǎng)路線圖。可以說(shuō)是最科學(xué)最系統(tǒng)的學(xué)習(xí)路線,大家跟著這個(gè)大的方向?qū)W習(xí)準(zhǔn)沒(méi)問(wèn)題。

同時(shí)每個(gè)成長(zhǎng)路線對(duì)應(yīng)的板塊都有配套的視頻提供:

因篇幅有限,僅展示部分資料,需要掃描下方二維碼獲取
