滲透測試之暴力破解及驗證碼安全

暴力破解及驗證碼安全(邏輯漏洞)

1.暴力破解注意事項

破解前一定要有一個有效的字典(top100 top2000 csdn QQ 163等字典)? ? ?判斷用戶是否設置了復雜密碼,網站是否存在驗證碼 嘗試登陸的行為是否有限制,網站是否雙因素驗證 token值等。

對目標網站進行注冊,搞清楚賬號密碼的一些限制,比如目標站點要求密碼必須是8位以上,字母數字組合,則可以按照此優化字典,比如去掉不符合要求的密碼。

如果破解的是管理后臺密碼,可使用admin/administrator/root/test賬號幾率較高,可以使用這三個賬號+隨便一個密碼字典進行暴力破解,是破解過程中一定要觀察提示,如‘用戶名或密碼錯誤’,‘用戶名錯誤’,‘密碼錯誤’



賬號注冊問題? ?查看注冊賬號時是否有驗證碼? 賬號是否可以無限注冊



2.暴力破解分類 b/s c/s

2.1 基于表單的暴力破解

基于pikachu漏洞演示平臺

先打開pikachu? ? 選暴力破解->基于表單的暴力破解? ?隨便輸入賬號和密碼 用burp抓包

抓取下來數據包 發送給測試器


選擇位置 然后清除burp自己設置的所有標記



手動將username改成admin并將password這個參數設置好標記(需要先知道賬號才可以爆破密碼否則兩個一起爆破難度大大提高)

設置好之后選擇有效載荷添加字典



點擊粘貼可以將字典直接粘貼過來? 點擊下面的按鈕可以導入一個文本格式的子字典



導入好自己的字典后點擊開始攻擊



密碼是123456

2.2 基于驗證碼的暴力破解

on client常見問題:不安全的將驗證碼在cookie中泄露,不安全的將驗證碼在前端源代碼中泄露

還是用pikachu? 和之前一樣 賬號admin隨便輸入一個密碼? 正確的驗證碼

繼續發送給測試器? ?將所有標記清除


因為是前端JS效驗驗證碼是否正確? 現在提交過來說明已經效驗完成? 直接刪除掉vcode? 將password標記好


設置好后 添加字典? 設置一下線程 開始攻擊



on server常見問題:驗證碼在后臺不過期 導致長期會用(PHP默認session是24分鐘后過期),校驗碼效驗不嚴格,邏輯出現問題。驗證碼設計的泰國簡單和有規律的被猜解

還是繼續抓包? 因為驗證碼是后端驗證? 但是session是在24分鐘后過期所以不需要刪除驗證碼? 直接將密碼設置好標記? 直接導入字典開始攻擊就可以


設置好后導入字典開始爆破



基于token破解

由于token值輸出在前端源代碼中,容易被獲取,因此也就失去了方暴力破解的意義,一般token在防止CSRF上會有比較好的功效。

注意:破解方式為音叉;線程數設為1;Grep-Extract設置好開始token" value=" 結束為" /> ;有郊載荷設為遞歸搜索

"token" value="

還是和之前一樣? 抓包發送到測試器?

但是攻擊類型選擇音叉 將password和token設置標記



選擇有效載荷



有效載荷比之前多了一個? 1是password? 2是token

password還是和之前一樣導入密碼字典? 2選擇遞歸搜索


點擊選項? 選擇在響應中提取以下項目




點擊獲取回復



直接將token值位置定義好? 點OK



點擊開始攻擊




彈出上面錯誤? 直接將線程調成1就好了



驗證碼識別

先抓取一個數據包? ?把抓取到的包復制下來

打開驗證碼爆破工具Pkav HTTP Fuzzer 1.0.2.1

將抓取到的數據包復制進來

開始配置軟件? ?還是將password和驗證碼設置標記



導入一個字典

開始驗證碼識別項設置


驗證碼地址需要去需要爆破的網站復制驗證碼圖片的地址



因為驗證碼是存數字的? ?在識別范圍改成0--9就可以了 可以加快驗證碼識別速度


這里調用的第三方驗證碼識別庫



上面設置好驗證碼的長度 如果驗證碼是固定的 直接輸入固定數字就可以

下面是驗證碼錯誤重試 因為每個密碼都要測試一遍 有可能驗證碼錯誤? 導致密碼沒有真正的提交到服務器? 所以這里要設置一下重試規則



進入發包器選項 啟動爆破

速度很快



驗證碼分類

GIF動畫驗證碼

手機短信驗證碼

手機語音驗證碼

視頻驗證碼




驗證碼繞過思路

驗證碼由客戶端JS生成并僅僅由js驗證(只需要手動輸入對一次 用burp抓包刪除掉驗證碼即可繞過)

驗證碼存放在HTML或cookie里(token方法可以繞過)

賬號密碼輸入錯誤一定次數出現驗證碼(有可能錯誤次數在cookie內 每次輸入錯誤cookie某個參數值加一 讓該參數值一直為未錯誤的狀態 驗證碼就會一直不出來)

驗證碼不過期(抓包抓到一個正確的驗證碼 在有效期內一直使用該驗證碼)

沒有進行非空判斷(直接不輸入驗證碼)

驗證碼安全修改

1.強制要求輸入驗證碼,否則,必須實施IP策略, 不要被X-Forwaded-For繞過

2.驗證碼只能用一次,用完立即過期,不能再次使用

3.驗證碼不要太弱,扭曲,變形,干擾線條,干擾背景色,變換字體等

4.大網站最好使用同一驗證碼,各處使用同一個驗證碼接口



3.暴力破解C/S

主要工具 Hydra Bruter

第一個爆破工具Bruter


全部設置好之后就可以開始破解

工具需要放在英文目錄下 否則會找不到文件



瞬間出賬號密碼

第二個爆破工具是kali平臺下的hydra

hydra是著名黑客組織thc的一款開源的暴力密碼破解工具,可以在線破解多種密碼。官網: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安裝相應依賴包

# 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會檢測當前系統一些組件配置,主要是對于破解支持模塊的檢測,可根據需要安裝對應的支持庫和依賴包

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 繼續從上一次進度接著破解。

-S 采用SSL鏈接。

-s PORT 可通過這個參數指定非默認端口。

-l LOGIN 指定破解的用戶,對特定用戶破解。

-L FILE 指定用戶名字典。

-p PASS 小寫,指定密碼破解,少用,一般是采用密碼字典。

-P FILE 大寫,指定密碼字典。

-e ns 可選選項,n:空密碼試探,s:使用指定用戶和密碼試探。

-C FILE 使用冒號分割格式,例如“登錄名:密碼”來代替-L/-P參數。

-M FILE 指定目標列表文件一行一條。

-o FILE 指定結果輸出文件。

-f 在使用-M參數以后,找到第一對登錄名或者密碼的時候中止破解。

-t TASKS 同時運行的線程數,默認為16。

-w TIME 設置最大超時的時間,單位秒,默認是30s。

-v / -V 顯示詳細過程。

server 目標ip

service 指定服務名,支持的服務和協議: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 可選項

其它實例:

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 線程(默認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"

(參數說明:-t同時線程數3,-l用戶名是admin,字典pass.txt,保存為out.txt,-f 當破解了一個密碼就停止, 10.36.16.18目標ip,http-post-form表示破解是采用http的post方式提交的表單密碼破解,<title>中的內容是表示錯誤猜解的返回信息提示。)

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

此工具強大之處遠多于以上測試,其密碼能否破解關鍵在于強大的字典,對于社工型滲透來說,有時能夠得到事半功倍的效果



以上是工具安裝教程及使用說明

下面開始實戰? 還是爆破之前的FTP






4.防暴力猜解

防止暴力破解是非常簡單的,無論是B/S架構或者是C/S架構,下面總結出以下幾點。


?? 1、密碼的復雜性

?毫無疑問,密碼設置一定要復雜,這是最基本的,最低層的防線,密碼設定一定要有策略:


??? ①對于重要的應用,密碼長度最低位8位數以上,盡量在8位數之16位數之間。


??? ②絕不允許以自己的手機號碼,郵箱等關鍵“特征”為密碼。


??? ③用戶名與密碼不能有任何聯系,如用戶名為“admin”,密碼為“admin888”。


??? ④僅僅以上三點是不夠的,比如說“12345678”、“222222222”、“11111111”這樣的密碼,長度夠了,但是也極為危險,因為這些即為弱口令。這些密碼一般都已經被收錄到了攻擊者的字典之中。所以就必須要增加密碼的復雜性。比如以下方案:

??? ·至少一個小寫字母(a-z)

??? ·至少一個大寫字母(A-Z)

??? ·至少一個數字(0-9)

??? ·至少一個特殊字符(*&^%$#@!)


??? 如果你感覺你的密碼足夠強大,就讓攻擊者去攻擊幾年吧,雖然這只是句玩笑,也說明了密碼策略的重要性,密碼復雜,不單單是對暴力破解有防范,也對其他的攻擊有防范,例如MD5密碼破解,你的密碼足夠復雜,CMD5解密也是比較難的。


2、驗證碼措施


??? 驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans

Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機和人的公共全自動程序。


使用驗證碼可以有效的防止:惡意破解密碼、刷票、論壇灌水等。可以說驗證碼最主要的是防范“機器人”,如圖12-12所示,是一個用戶注冊頁面,嵌入驗證碼之后可以有效的防止機器人注冊(機器人在注冊后通常會發布一些廣告帖,違法貼)。

??????????? ????????????? 圖12-12?? 驗證碼


??? 至今驗證碼不單單可以有效的防止暴力破解,刷票,網絡水軍,也可以要用來防護CSRF等其他一些不安全的因素。


雖然說驗證碼簡單,有效,但是也看什么類型的驗證碼,至今驗證碼可以分為很多種,有圖片驗證碼,有手機驗證碼,有郵箱驗證碼,還有答題驗證碼,這里以圖片驗證碼為例解說。


??? 圖片驗證碼有非常多的種類,有的比較復雜,“機器人”很難識別,可能人都很難識別,但有的比較簡單,很容易被“機器人”識別出來,如圖12-13所示,有各類的驗證碼。


??????????????? 圖12-13?? 各式各樣的驗證碼


有時候站長朋友可能會感覺到奇怪,自己明明開啟了驗證碼,為什么還有那么多的垃圾用戶注冊?答案是驗證碼被“機器人識別了”!驗證碼也能被識別出來?對,你沒有聽錯,很多驗證碼都可以被識別,像國內的知名的“discuz”論壇的驗證碼,就經常被識別,好在“discuz”官方團隊一直在更新,不然國內一大批論壇可就“中招”了。


??? 這里的識別驗證碼大概的原理是分析背景和文字的顏色,還原出字母部分的字樣,與樣板進行匹配,找出相似度高的結果。至今,有些專門識別驗證碼的團隊,開發出云識別接口,在識別驗證碼的時候只需要調用接口就可以了,這讓不少沒有驗證碼識別經驗的程序員也可以快速快發出來驗證碼識別程序,有利也有弊。


??? 另外一種驗證碼破解,不可以叫做識別,而是由于程序的錯誤導致了驗證碼“失效”。驗證碼在驗證的流程一般為由服務端生成字符串,保存在SESSION之中,然后經過程序轉換為圖片驗證碼發向客戶端,客戶端接受之后,使用<img>標簽顯示,當用戶輸入驗證碼之后,與SESSION之中的字符串相比較,如果驗證相等的話,證明是正確的驗證碼,否則是錯誤的。而有些程序員,在寫驗證碼比較時候,在比較之后,沒有在服務端去生成新的驗證碼,而返回到服務端之后,由<img>標簽發起訪問,生成驗證碼,這樣就導致了客戶端如果不去解析<img>表現,驗證碼就不會發生改變,從而造成了驗證碼“無效”。這樣的例子不在少數。


??? 在使用驗證碼的時候,現在單純的圖片驗證碼正在逐漸變少,而采用問題提問,漢字,這樣驗證碼卻原來越多,但是卻是依然是可以識別的,只不過增加了識別的成本而已。所以在使用驗證碼方面一定要注意,驗證碼一定要復雜度,在復雜的同時并且盡量不降低用戶體驗,如果人都不能識別出驗證碼,那么網站就沒有存在的意義了。


注:本節的驗證碼為防止爆力破解的驗證碼,而非是作為身份標識的驗證碼。


3、登陸日志(限制登錄次數)


??? 使用登陸日志可以有效的方式暴力破解,登陸日志意為:當用戶登錄時,不是直接進行登陸,而是去登陸日志里面去查找,用戶時候不是已經登陸錯誤了,還有登陸錯誤的次數,時間。如果連續是連續錯誤,將采取某種措施。


例如Oracle數據庫就有一種機制,當密碼輸入錯誤三次之后,每次登陸時間間隔為10秒鐘,這樣就大大減少了被破解的風險,我們完全可以做到登陸第三次錯誤后延時10秒登陸,第四五延時15秒,這樣也是一種有效的解決暴力破解的方案。


??? 有些朋友可能會問,當登陸錯誤幾次之后,我們直接封鎖賬戶24小時,這樣不就更方便了嗎?顯然這樣做是可以,但是不要忘記,攻擊者是不能在破解了,但是你還能登陸嗎?所以,不要直接進行封鎖賬戶,詳細描述請參照第十章,邏輯漏洞章節。


??? 暴力破解防范還有其他很多種方法,讀者可以根據自身的需求去尋找合適自己的方案。



?

?

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。