米斯特白帽培訓(xùn)講義 漏洞篇 弱口令、爆破、遍歷
講師:gh0stkey
整理:飛龍
協(xié)議:CC BY-NC-SA 4.0
成因
弱口令沒有嚴(yán)格和準(zhǔn)確的定義,通常認(rèn)為容易被別人(它們有可能對(duì)你很了解)猜測(cè)或被破解工具破解的口令均為弱口令。弱口令指的是僅包含簡(jiǎn)單數(shù)字和字母的口令,例如"123"、"abc"等,因?yàn)檫@樣的口令很容易被別人破解。
通過(guò)爆破工具就可以很容易破解用戶的弱口令。
目前網(wǎng)絡(luò)上也有人特地整理了常用的弱口令(Top 100):
123456 a123456 123456a 5201314 111111 woaini1314 qq123456 123123 000000 1qaz2wsx 1q2w3e4r
qwe123 7758521 123qwe a123123 123456aa woaini520 woaini 100200 1314520 woaini123 123321
q123456 123456789 123456789a 5211314 asd123 a123456789 z123456 asd123456 a5201314 aa123456
zhang123 aptx4869 123123a 1q2w3e4r5t 1qazxsw2 5201314a 1q2w3e aini1314 31415926 q1w2e3r4
123456qq woaini521 1234qwer a111111 520520 iloveyou abc123 110110 111111a 123456abc w123456
7758258 123qweasd 159753 qwer1234 a000000 qq123123 zxc123 123654 abc123456 123456q qq5201314
12345678 000000a 456852 as123456 1314521 112233 521521 qazwsx123 zxc123456 abcd1234 asdasd
666666 love1314 QAZ123 aaa123 q1w2e3 aaaaaa a123321 123000 11111111 12qwaszx 5845201314
s123456 nihao123 caonima123 zxcvbnm123 wang123 159357 1A2B3C4D asdasd123 584520 753951 147258
1123581321 110120 qq1314520
危害

中石油的多個(gè)加油站的視頻監(jiān)控被入侵,我們可以通過(guò)它們看一些隱私。也可以通過(guò)它把監(jiān)控器關(guān)掉,來(lái)進(jìn)行一些非法活動(dòng)。
實(shí)戰(zhàn)
比如說(shuō),我們使用這樣一段代碼來(lái)演示弱口令漏洞,它模擬了某個(gè)系統(tǒng)的后臺(tái)。(課件里沒有這個(gè)代碼,這是我還原出來(lái)的)
<form method="POST" action="./lesspass.php">
<input type="text" name="un" />
<input type="password" name="pw" />
<input type="submit" value="登錄" />
</form>
<?php
$un = @$_POST['un'];
$pw = @$_POST['pw'];
if($un == '' && $pw == '')
return;
else if($un == 'admin' && $pw == 'admin888')
echo '登錄成功';
else
echo '登錄失敗';
第一行到第六行組成了一個(gè) HTTP 表單。我們可以看到,這個(gè)表單使用 POST 方法向這個(gè)頁(yè)面自己提交信息,un表單域?qū)?yīng) PHP 的un變量,pw表單域?qū)?yīng) PHP 的pw變量。
第七行和第八行從 HTTP 請(qǐng)求的主體中取出un參數(shù)和pw參數(shù)。
第九到第十四行對(duì)用戶名和密碼參數(shù)做判斷,如果都為空,那么我們認(rèn)為它僅僅是顯示頁(yè)面的請(qǐng)求,直接返回。如果un為admin,且pw為admin888,因?yàn)檫@是我們預(yù)設(shè)的正確用戶名和密碼,所以顯示登陸成功,否則顯示登錄失敗。
真實(shí)代碼的用戶名和密碼是從數(shù)據(jù)庫(kù)里面取的,但是它仍然是確定的東西,而且如果存在弱口令,還是能破解出來(lái),原理一致。
把它保存為lesspass.php,將其部署后訪問(wèn)http://localhost/lesspass.php。
接下來(lái)我們假裝不知道真實(shí)密碼,開始嘗試。對(duì)于管理員賬戶,用戶名一般是admin,密碼可能為admin、admin123、admin888、123456、123abcadmin等等。
首先輸入admin和admin,嘗試失?。?/p>

之后是admin和admin123,還是失敗。最后嘗試admin和admin888,成功。

可見,爆破破解的原理就是一個(gè)一個(gè)嘗試,破解效果完全取決于你所使用的字典。如果密碼碰巧在你的字典中,就一定能成功。
Burp Suite 爆破
首先我們需要把瀏覽器和 Burp 的代理配置好,打開 Burp 的攔截模式。之后我們?cè)?code>lesspass.php頁(yè)面中隨便輸入什么東西并提交,在 Burp 中就可以看到攔截的封包:

為了爆破密碼,我們需要使用它的 Intruder 功能,右鍵彈出菜單并選擇"Send to Intruder":

之后訪問(wèn) Intruder 標(biāo)簽頁(yè),在 Position 子標(biāo)簽頁(yè)中我們可以看到封包。

我們需要點(diǎn)擊右邊的Clear按鈕把所有標(biāo)記清除掉,由于我們需要破解密碼,我們選中密碼參數(shù)值點(diǎn)擊Add。

之后我們切換到旁邊的 Payloads 標(biāo)簽頁(yè),點(diǎn)擊中間的load按鈕,加載字典。我們選擇之前的top100.txt。

不要忘了要將admin888插入進(jìn)去。在下面的輸入框中輸入admin888,并點(diǎn)擊旁邊的Add。

點(diǎn)擊右上角的Start Attack來(lái)開始爆破,我們會(huì)看到結(jié)果列表。

我們點(diǎn)擊Length表頭,讓它按照長(zhǎng)度來(lái)排序??梢园l(fā)現(xiàn)有一個(gè)項(xiàng)目的長(zhǎng)度與其它明顯不同,那么它就是正確的結(jié)果。

Burp Suite 遍歷
比如這段代碼,我們將其保存為info.php:
<?php
$id = @$_GET['id'];
$arr = array('1', '2', '3', '4', '5');
if(in_array($id, $arr, true))
echo "用戶名:$id 密碼:123456";
else
echo "信息出錯(cuò)";
這段代碼模擬了用戶信息的查詢頁(yè)面,一共有五條記錄。我們可以訪問(wèn)這個(gè)頁(yè)面,并使用 Burp 來(lái)攔截。像之前一樣,發(fā)送到Intruder,然后清除掉所有標(biāo)記,只保留 ID 的標(biāo)記:

由于是純數(shù)字,我們把上面的Payload Type調(diào)成Numbers。下面,我們把From設(shè)為1,To設(shè)為10,Step設(shè)為1。

之后點(diǎn)擊Start Attack。我們可以看到結(jié)果,其中ID 1 ~ 5 的長(zhǎng)度都是 224,6 ~ 10 都是 211。我們之前的測(cè)試中,2 是有效的,所以 224 應(yīng)該是有效內(nèi)容的長(zhǎng)度。
