暴力破解及驗(yàn)證碼安全(邏輯漏洞)
1.暴力破解注意事項(xiàng)
破解前一定要有一個有效的字典(top100 top2000 csdn QQ 163等字典)? ? ?判斷用戶是否設(shè)置了復(fù)雜密碼叉跛,網(wǎng)站是否存在驗(yàn)證碼 嘗試登陸的行為是否有限制洋满,網(wǎng)站是否雙因素驗(yàn)證 token值等绍填。
對目標(biāo)網(wǎng)站進(jìn)行注冊讽挟,搞清楚賬號密碼的一些限制,比如目標(biāo)站點(diǎn)要求密碼必須是8位以上弧蝇,字母數(shù)字組合,則可以按照此優(yōu)化字典,比如去掉不符合要求的密碼盐固。
如果破解的是管理后臺密碼,可使用admin/administrator/root/test賬號幾率較高丈挟,可以使用這三個賬號+隨便一個密碼字典進(jìn)行暴力破解闰挡,是破解過程中一定要觀察提示,如‘用戶名或密碼錯誤’礁哄,‘用戶名錯誤’长酗,‘密碼錯誤’
賬號注冊問題? ?查看注冊賬號時是否有驗(yàn)證碼? 賬號是否可以無限注冊
2.暴力破解分類 b/s c/s
2.1 基于表單的暴力破解
基于pikachu漏洞演示平臺
先打開pikachu? ? 選暴力破解->基于表單的暴力破解? ?隨便輸入賬號和密碼 用burp抓包
抓取下來數(shù)據(jù)包 發(fā)送給測試器
選擇位置 然后清除burp自己設(shè)置的所有標(biāo)記
手動將username改成admin并將password這個參數(shù)設(shè)置好標(biāo)記(需要先知道賬號才可以爆破密碼否則兩個一起爆破難度大大提高)
設(shè)置好之后選擇有效載荷添加字典
點(diǎn)擊粘貼可以將字典直接粘貼過來? 點(diǎn)擊下面的按鈕可以導(dǎo)入一個文本格式的子字典
導(dǎo)入好自己的字典后點(diǎn)擊開始攻擊
密碼是123456
2.2 基于驗(yàn)證碼的暴力破解
on client常見問題:不安全的將驗(yàn)證碼在cookie中泄露,不安全的將驗(yàn)證碼在前端源代碼中泄露
還是用pikachu? 和之前一樣 賬號admin隨便輸入一個密碼? 正確的驗(yàn)證碼
繼續(xù)發(fā)送給測試器? ?將所有標(biāo)記清除
因?yàn)槭乔岸薐S效驗(yàn)驗(yàn)證碼是否正確? 現(xiàn)在提交過來說明已經(jīng)效驗(yàn)完成? 直接刪除掉vcode? 將password標(biāo)記好
設(shè)置好后 添加字典? 設(shè)置一下線程 開始攻擊
on server常見問題:驗(yàn)證碼在后臺不過期 導(dǎo)致長期會用(PHP默認(rèn)session是24分鐘后過期)桐绒,校驗(yàn)碼效驗(yàn)不嚴(yán)格夺脾,邏輯出現(xiàn)問題。驗(yàn)證碼設(shè)計的泰國簡單和有規(guī)律的被猜解
還是繼續(xù)抓包? 因?yàn)轵?yàn)證碼是后端驗(yàn)證? 但是session是在24分鐘后過期所以不需要刪除驗(yàn)證碼? 直接將密碼設(shè)置好標(biāo)記? 直接導(dǎo)入字典開始攻擊就可以
設(shè)置好后導(dǎo)入字典開始爆破
基于token破解
由于token值輸出在前端源代碼中茉继,容易被獲取咧叭,因此也就失去了方暴力破解的意義,一般token在防止CSRF上會有比較好的功效烁竭。
注意:破解方式為音叉菲茬;線程數(shù)設(shè)為1;Grep-Extract設(shè)置好開始token" value=" 結(jié)束為" /> ;有郊載荷設(shè)為遞歸搜索
"token" value="
還是和之前一樣? 抓包發(fā)送到測試器?
但是攻擊類型選擇音叉 將password和token設(shè)置標(biāo)記
選擇有效載荷
有效載荷比之前多了一個? 1是password? 2是token
password還是和之前一樣導(dǎo)入密碼字典? 2選擇遞歸搜索
點(diǎn)擊選項(xiàng)? 選擇在響應(yīng)中提取以下項(xiàng)目
點(diǎn)擊獲取回復(fù)
直接將token值位置定義好? 點(diǎn)OK
點(diǎn)擊開始攻擊
彈出上面錯誤? 直接將線程調(diào)成1就好了
驗(yàn)證碼識別
先抓取一個數(shù)據(jù)包? ?把抓取到的包復(fù)制下來
打開驗(yàn)證碼爆破工具Pkav HTTP Fuzzer 1.0.2.1
將抓取到的數(shù)據(jù)包復(fù)制進(jìn)來
開始配置軟件? ?還是將password和驗(yàn)證碼設(shè)置標(biāo)記
導(dǎo)入一個字典
開始驗(yàn)證碼識別項(xiàng)設(shè)置
驗(yàn)證碼地址需要去需要爆破的網(wǎng)站復(fù)制驗(yàn)證碼圖片的地址
因?yàn)轵?yàn)證碼是存數(shù)字的? ?在識別范圍改成0--9就可以了 可以加快驗(yàn)證碼識別速度
這里調(diào)用的第三方驗(yàn)證碼識別庫
上面設(shè)置好驗(yàn)證碼的長度 如果驗(yàn)證碼是固定的 直接輸入固定數(shù)字就可以
下面是驗(yàn)證碼錯誤重試 因?yàn)槊總€密碼都要測試一遍 有可能驗(yàn)證碼錯誤? 導(dǎo)致密碼沒有真正的提交到服務(wù)器? 所以這里要設(shè)置一下重試規(guī)則
進(jìn)入發(fā)包器選項(xiàng) 啟動爆破
速度很快
驗(yàn)證碼分類
GIF動畫驗(yàn)證碼
手機(jī)短信驗(yàn)證碼
手機(jī)語音驗(yàn)證碼
視頻驗(yàn)證碼
驗(yàn)證碼繞過思路
驗(yàn)證碼由客戶端JS生成并僅僅由js驗(yàn)證(只需要手動輸入對一次 用burp抓包刪除掉驗(yàn)證碼即可繞過)
驗(yàn)證碼存放在HTML或cookie里(token方法可以繞過)
賬號密碼輸入錯誤一定次數(shù)出現(xiàn)驗(yàn)證碼(有可能錯誤次數(shù)在cookie內(nèi) 每次輸入錯誤cookie某個參數(shù)值加一 讓該參數(shù)值一直為未錯誤的狀態(tài) 驗(yàn)證碼就會一直不出來)
驗(yàn)證碼不過期(抓包抓到一個正確的驗(yàn)證碼 在有效期內(nèi)一直使用該驗(yàn)證碼)
沒有進(jìn)行非空判斷(直接不輸入驗(yàn)證碼)
驗(yàn)證碼安全修改
1.強(qiáng)制要求輸入驗(yàn)證碼婉弹,否則睬魂,必須實(shí)施IP策略, 不要被X-Forwaded-For繞過
2.驗(yàn)證碼只能用一次镀赌,用完立即過期氯哮,不能再次使用
3.驗(yàn)證碼不要太弱,扭曲商佛,變形喉钢,干擾線條,干擾背景色良姆,變換字體等
4.大網(wǎng)站最好使用同一驗(yàn)證碼肠虽,各處使用同一個驗(yàn)證碼接口
3.暴力破解C/S
主要工具 Hydra Bruter
第一個爆破工具Bruter
全部設(shè)置好之后就可以開始破解
工具需要放在英文目錄下 否則會找不到文件
瞬間出賬號密碼
第二個爆破工具是kali平臺下的hydra
hydra是著名黑客組織thc的一款開源的暴力密碼破解工具,可以在線破解多種密碼玛追。官網(wǎng):http://www.thc.org/thc-hydra税课,可支持AFP, Cisco
AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET,
HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET,
HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP,
MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere,
PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB, SMTP, SMTP
Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet,
VMware-Auth, VNC and XMPP等類型密碼。
安裝:
1.yum安裝相應(yīng)依賴包
# yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel libncurses-devel
2.hydra編譯安裝
# cd /usr/local/src
# wget http://freeworld.thc.org/releases/hydra-6.3-src.tar.gz
# tar zxf hydra-6.3-src.tar.gz
# cd hydra-6.3-src
# ./configure# make
# make install
# ./configure會檢測當(dāng)前系統(tǒng)一些組件配置豹缀,主要是對于破解支持模塊的檢測伯复,可根據(jù)需要安裝對應(yīng)的支持庫和依賴包
hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns]
[-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT]
-R 繼續(xù)從上一次進(jìn)度接著破解。
-S 采用SSL鏈接邢笙。
-s PORT 可通過這個參數(shù)指定非默認(rèn)端口啸如。
-l LOGIN 指定破解的用戶,對特定用戶破解氮惯。
-L FILE 指定用戶名字典叮雳。
-p PASS 小寫,指定密碼破解妇汗,少用帘不,一般是采用密碼字典。
-P FILE 大寫杨箭,指定密碼字典寞焙。
-e ns 可選選項(xiàng),n:空密碼試探互婿,s:使用指定用戶和密碼試探捣郊。
-C FILE 使用冒號分割格式,例如“登錄名:密碼”來代替-L/-P參數(shù)慈参。
-M FILE 指定目標(biāo)列表文件一行一條呛牲。
-o FILE 指定結(jié)果輸出文件。
-f 在使用-M參數(shù)以后驮配,找到第一對登錄名或者密碼的時候中止破解娘扩。
-t TASKS 同時運(yùn)行的線程數(shù)着茸,默認(rèn)為16。
-w TIME 設(shè)置最大超時的時間琐旁,單位秒涮阔,默認(rèn)是30s。
-v / -V 顯示詳細(xì)過程旋膳。
server 目標(biāo)ip
service 指定服務(wù)名澎语,支持的服務(wù)和協(xié)議:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等途事。
OPT 可選項(xiàng)
其它實(shí)例:
1.破解ssh:
# hydra -l 用戶名 -p 密碼字典 -t 線程-vV -e ns ip ssh
# hydra -l 用戶名 -p 密碼字典 -t 線程-o save.log -vV ip ssh
2.
破解ftp:
# hydra ip ftp -l 用戶名 -P 密碼字典 -t 線程(默認(rèn)16) -vV
# hydra ip ftp -l 用戶名 -P 密碼字典-e ns -vV
3.get
方式提交验懊,破解web登錄:
# hydra -l 用戶名 -p 密碼字典 -t 線程-vV -e ns ip http-get /admin/
# hydra -l 用戶名 -p 密碼字典 -t 線程-vV -e ns -f ip http-get /admin/index.php
4.post
方式提交,破解web登錄:
# hydra -l 用戶名 -P 密碼字典-s 80 ip http-post-form "/admin/login.php:username=^USER^&password=^PASS^&submit=login:sorry password"
# hydra -t 3 -l admin -P pass.txt -o out.txt -f 10.36.16.18 http-post-form "login.php:id=^USER^&passwd=^PASS^:wrong username or password"
(參數(shù)說明:-t同時線程數(shù)3尸变,-l用戶名是admin义图,字典pass.txt,保存為out.txt召烂,-f 當(dāng)破解了一個密碼就停止碱工, 10.36.16.18目標(biāo)ip,http-post-form表示破解是采用http的post方式提交的表單密碼破解,<title>中的內(nèi)容是表示錯誤猜解的返回信息提示奏夫。)
5.
破解https:
# hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https
6.
破解teamspeak:
# hydra -l 用戶名 -P 密碼字典 -s 端口號-vV ip teamspeak
7.
破解cisco:
# hydra -P pass.txt 10.36.16.18 cisco
# hydra -m cloud -P pass.txt 10.36.16.18 cisco-enable
8.
破解smb:
# hydra -l administrator -P top100.txt 192.168.0.102 smb
9.
破解pop3:
# hydra -l muts -P pass.txt my.pop3.mail pop3
10.
破解rdp:
# hydra 192.168.0.102 rdp -l administrator -P top100.txt -V
11.
破解http-proxy:
# hydra -l admin -P pass.txt http-proxy://10.36.16.18
12.
破解imap:
# hydra -L user.txt -p secret 10.36.16.18 imap PLAIN
# hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN
此工具強(qiáng)大之處遠(yuǎn)多于以上測試怕篷,其密碼能否破解關(guān)鍵在于強(qiáng)大的字典,對于社工型滲透來說酗昼,有時能夠得到事半功倍的效果
以上是工具安裝教程及使用說明
下面開始實(shí)戰(zhàn)? 還是爆破之前的FTP
4.防暴力猜解
防止暴力破解是非常簡單的廊谓,無論是B/S架構(gòu)或者是C/S架構(gòu),下面總結(jié)出以下幾點(diǎn)麻削。
?? 1蒸痹、密碼的復(fù)雜性
?毫無疑問,密碼設(shè)置一定要復(fù)雜呛哟,這是最基本的叠荠,最低層的防線,密碼設(shè)定一定要有策略:
??? ①對于重要的應(yīng)用扫责,密碼長度最低位8位數(shù)以上榛鼎,盡量在8位數(shù)之16位數(shù)之間。
??? ②絕不允許以自己的手機(jī)號碼鳖孤,郵箱等關(guān)鍵“特征”為密碼者娱。
??? ③用戶名與密碼不能有任何聯(lián)系,如用戶名為“admin”淌铐,密碼為“admin888”肺然。
??? ④僅僅以上三點(diǎn)是不夠的,比如說“12345678”腿准、“222222222”际起、“11111111”這樣的密碼拾碌,長度夠了,但是也極為危險街望,因?yàn)檫@些即為弱口令校翔。這些密碼一般都已經(jīng)被收錄到了攻擊者的字典之中。所以就必須要增加密碼的復(fù)雜性灾前。比如以下方案:
??? ·至少一個小寫字母(a-z)
??? ·至少一個大寫字母(A-Z)
??? ·至少一個數(shù)字(0-9)
??? ·至少一個特殊字符(*&^%$#@!)
??? 如果你感覺你的密碼足夠強(qiáng)大防症,就讓攻擊者去攻擊幾年吧,雖然這只是句玩笑哎甲,也說明了密碼策略的重要性蔫敲,密碼復(fù)雜,不單單是對暴力破解有防范炭玫,也對其他的攻擊有防范奈嘿,例如MD5密碼破解,你的密碼足夠復(fù)雜吞加,CMD5解密也是比較難的裙犹。
2、驗(yàn)證碼措施
??? 驗(yàn)證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans
Apart”(全自動區(qū)分計算機(jī)和人類的圖靈測試)的縮寫衔憨,是一種區(qū)分用戶是計算機(jī)和人的公共全自動程序叶圃。
使用驗(yàn)證碼可以有效的防止:惡意破解密碼、刷票践图、論壇灌水等掺冠。可以說驗(yàn)證碼最主要的是防范“機(jī)器人”平项,如圖12-12所示赫舒,是一個用戶注冊頁面,嵌入驗(yàn)證碼之后可以有效的防止機(jī)器人注冊(機(jī)器人在注冊后通常會發(fā)布一些廣告帖闽瓢,違法貼)接癌。
??????????? ????????????? 圖12-12?? 驗(yàn)證碼
??? 至今驗(yàn)證碼不單單可以有效的防止暴力破解,刷票扣讼,網(wǎng)絡(luò)水軍缺猛,也可以要用來防護(hù)CSRF等其他一些不安全的因素。
雖然說驗(yàn)證碼簡單椭符,有效荔燎,但是也看什么類型的驗(yàn)證碼,至今驗(yàn)證碼可以分為很多種销钝,有圖片驗(yàn)證碼有咨,有手機(jī)驗(yàn)證碼,有郵箱驗(yàn)證碼蒸健,還有答題驗(yàn)證碼座享,這里以圖片驗(yàn)證碼為例解說婉商。
??? 圖片驗(yàn)證碼有非常多的種類,有的比較復(fù)雜渣叛,“機(jī)器人”很難識別丈秩,可能人都很難識別,但有的比較簡單淳衙,很容易被“機(jī)器人”識別出來蘑秽,如圖12-13所示,有各類的驗(yàn)證碼箫攀。
??????????????? 圖12-13?? 各式各樣的驗(yàn)證碼
有時候站長朋友可能會感覺到奇怪肠牲,自己明明開啟了驗(yàn)證碼,為什么還有那么多的垃圾用戶注冊匠童?答案是驗(yàn)證碼被“機(jī)器人識別了”埂材!驗(yàn)證碼也能被識別出來塑顺?對汤求,你沒有聽錯,很多驗(yàn)證碼都可以被識別严拒,像國內(nèi)的知名的“discuz”論壇的驗(yàn)證碼扬绪,就經(jīng)常被識別,好在“discuz”官方團(tuán)隊(duì)一直在更新裤唠,不然國內(nèi)一大批論壇可就“中招”了挤牛。
??? 這里的識別驗(yàn)證碼大概的原理是分析背景和文字的顏色,還原出字母部分的字樣种蘸,與樣板進(jìn)行匹配墓赴,找出相似度高的結(jié)果。至今航瞭,有些專門識別驗(yàn)證碼的團(tuán)隊(duì)诫硕,開發(fā)出云識別接口,在識別驗(yàn)證碼的時候只需要調(diào)用接口就可以了刊侯,這讓不少沒有驗(yàn)證碼識別經(jīng)驗(yàn)的程序員也可以快速快發(fā)出來驗(yàn)證碼識別程序章办,有利也有弊。
??? 另外一種驗(yàn)證碼破解滨彻,不可以叫做識別藕届,而是由于程序的錯誤導(dǎo)致了驗(yàn)證碼“失效”。驗(yàn)證碼在驗(yàn)證的流程一般為由服務(wù)端生成字符串亭饵,保存在SESSION之中休偶,然后經(jīng)過程序轉(zhuǎn)換為圖片驗(yàn)證碼發(fā)向客戶端,客戶端接受之后辜羊,使用<img>標(biāo)簽顯示踏兜,當(dāng)用戶輸入驗(yàn)證碼之后懂算,與SESSION之中的字符串相比較,如果驗(yàn)證相等的話庇麦,證明是正確的驗(yàn)證碼计技,否則是錯誤的。而有些程序員山橄,在寫驗(yàn)證碼比較時候垮媒,在比較之后,沒有在服務(wù)端去生成新的驗(yàn)證碼航棱,而返回到服務(wù)端之后睡雇,由<img>標(biāo)簽發(fā)起訪問,生成驗(yàn)證碼饮醇,這樣就導(dǎo)致了客戶端如果不去解析<img>表現(xiàn)它抱,驗(yàn)證碼就不會發(fā)生改變,從而造成了驗(yàn)證碼“無效”朴艰。這樣的例子不在少數(shù)观蓄。
??? 在使用驗(yàn)證碼的時候,現(xiàn)在單純的圖片驗(yàn)證碼正在逐漸變少祠墅,而采用問題提問侮穿,漢字,這樣驗(yàn)證碼卻原來越多毁嗦,但是卻是依然是可以識別的亲茅,只不過增加了識別的成本而已。所以在使用驗(yàn)證碼方面一定要注意狗准,驗(yàn)證碼一定要復(fù)雜度克锣,在復(fù)雜的同時并且盡量不降低用戶體驗(yàn),如果人都不能識別出驗(yàn)證碼腔长,那么網(wǎng)站就沒有存在的意義了袭祟。
注:本節(jié)的驗(yàn)證碼為防止爆力破解的驗(yàn)證碼,而非是作為身份標(biāo)識的驗(yàn)證碼饼酿。
3榕酒、登陸日志(限制登錄次數(shù))
??? 使用登陸日志可以有效的方式暴力破解,登陸日志意為:當(dāng)用戶登錄時故俐,不是直接進(jìn)行登陸想鹰,而是去登陸日志里面去查找,用戶時候不是已經(jīng)登陸錯誤了药版,還有登陸錯誤的次數(shù)辑舷,時間。如果連續(xù)是連續(xù)錯誤槽片,將采取某種措施何缓。
例如Oracle數(shù)據(jù)庫就有一種機(jī)制肢础,當(dāng)密碼輸入錯誤三次之后,每次登陸時間間隔為10秒鐘碌廓,這樣就大大減少了被破解的風(fēng)險传轰,我們完全可以做到登陸第三次錯誤后延時10秒登陸,第四五延時15秒谷婆,這樣也是一種有效的解決暴力破解的方案慨蛙。
??? 有些朋友可能會問,當(dāng)?shù)顷戝e誤幾次之后纪挎,我們直接封鎖賬戶24小時期贫,這樣不就更方便了嗎?顯然這樣做是可以异袄,但是不要忘記通砍,攻擊者是不能在破解了,但是你還能登陸嗎烤蜕?所以封孙,不要直接進(jìn)行封鎖賬戶,詳細(xì)描述請參照第十章玖绿,邏輯漏洞章節(jié)敛瓷。
??? 暴力破解防范還有其他很多種方法,讀者可以根據(jù)自身的需求去尋找合適自己的方案斑匪。
?
?
?