CAPTCHA是(全自動區分計算機和人類的圖靈測試)的簡稱,是用於區分計算機和人類的一種程序算法,這種程序必須能生成並評價人類能很容易經過但計算機卻通不過的測試。php
像咱們平時最常遇到的,就是基於圖片的驗證碼。這類圖片驗證碼一般包含的,都是些易於用戶識別簡單的驗證信息。以下圖所示。用戶必須準確的識別圖像內的字符,並以此做爲人機驗證的答案,方可經過驗證碼的人機測試。相反若是驗證碼填寫錯誤,那麼驗證碼字符將會自動刷新並更換一組新的驗證字符,直到用戶可以填寫正確的驗證字符爲止。html
如下列舉的是一些較易受到暴力攻擊的點。例如:git
咱們知道不少網站都有提交表單的功能,並須要由站點管理員審覈經過。例如:會員申請,聯繫咱們,反饋表,調查表等。這些功能都須要驗證碼的保護,若是不加以防禦那麼將會致使如下狀況的出現:github
某些包含大量數據的站點極易遭受數據挖掘攻擊,所以它們也須要驗證碼的保護。例如:社交網絡和搜索引擎。web
驗證碼被繞過,有如下兩個緣由:算法
在如下的內容,我將會帶你們認識到這兩個問題所在。以及如何解決這些問題,創建更爲安全的人機驗證。數據庫
設計問題則意味着驗證碼本質上的脆弱性,但執行卻不存在問題。如下演示將有助於咱們瞭解設計問題的真正緣由,以及如何破解它:安全
如下的示例中咱們能夠看到,這裏的驗證碼就是一道數學運題。而這裏的問題就出在頁面的HTML源碼上。服務器
你能夠在Github上下載到該驗證碼的源碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/ArithmeticCAPTCHA網絡
在這種狀況下攻擊者每每都會經過獲取該頁面的HTML源碼,計算答案並提交HTTP響應來破解驗證碼。
你能夠在Github上下載到該利用代碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits
某些驗證碼可能會採用相對有限的問題數據庫。例如如下是一個基於圖片的驗證碼,很顯然這裏不能再利用上面提到的破解方案來破解。但這裏的問題出在,這裏的圖片驗證碼字符是固定而且有限的,在本例中該驗證碼只會在來回10個固定字符組合中更換。所以一旦掌握了它的問題數據庫,那麼破解也天然就不成問題了。
你能夠在Github上下載到該驗證碼的源碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/TenRepeatedCAPTCHA
攻擊者首先必須手動解決這10個驗證碼問題,並同時記錄下這些問題的答案。而後經過工具將這些問題的答案存放在本身的數據庫中,進行不斷的暴力攻擊嘗試便可。
你能夠在Github上下載到該利用代碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits
執行問題則意味着驗證碼因爲執行不力而可被破解,但從設計的角度來看是完美的。
如下示範將有助於咱們瞭解,執行問題的真正含義以及如何破解它:
在演示中,咱們正在使用Google reCAPTCHA人機驗證。咱們使用API將用戶解決的CAPTCHA響應發送給Google的端點。更多請點擊:https://www.google.com/recaptcha/intro/index.html 。API以JSON的輸出形式回覆請求,以及HTTP狀態碼。到如今爲止,還沒發現什麼問題 !!
可是執行問題也就出在這裏。開發人員沒法檢查JSON響應,而以檢查發送的HTTP狀態碼是否爲200 OK,做爲驗證碼正確與否的判斷依據。
你能夠在Github上下載到該驗證碼的源碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/weakcaptcha1.php
攻擊者只須要製做一個腳本便可將任何值發送給人機驗證碼,而且都將會被服務器所接收,由於不管你發送什麼答案,服務器都只會經過檢查Google API發送的狀態碼是否爲200 OK來做爲判斷依據。下圖中,咱們做爲答案發送的值是「InvalidAnswerOfCAPTCHA」
你能夠在Github上下載到該利用代碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits
驗證碼存在於web頁面,在用戶提交後將被驗證,但問題卻出在了if和else一個簡單的子句中。這個錯誤是因爲開發人員將響應碼寫在了其它部分造成的。因此這裏即便驗證碼答案是錯誤的,應用程序仍將給予用戶積極的響應。
你能夠在Github上下載到該驗證碼的源碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/weakcaptcha2.php
攻擊者只須要製做一個腳本,便可向驗證碼發送任意值。在下圖中,咱們做爲答案發送的值是「InvalidAnswerOfCAPTCHA」
你能夠在Github上下載到該利用代碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits
驗證碼存在於web頁面,但在提交後未在服務器端進行驗證。
你能夠在Github上下載到該驗證碼的源碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/weakcaptcha3.php
攻擊者只需經過輸入錯誤的驗證碼和任意電子郵件,就能夠輕鬆地繞過它。
你能夠在Github上下載到該利用代碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits
其實這個問題也很簡單,你們能夠按照如下步驟,來製做一個強大的CAPTHCA功能:
設計:實施設計良好的CAPTCHA方案。從以上示例中咱們能夠看到,大多數咱們本身設計的驗證碼都或多或少的存在一些問題。所以,我建議你們儘量的使用像Google這樣的第三方CAPTCHA。
執行:在你選擇了具備良好設計的人機識別系統後,下一步是正確的執行。咱們已經看到,儘管有一個設計良好的CAPTCHA,可是若是不能正確執行,仍然能夠被破解。若是你使用的是Google reCAPTCHA,請參照如下操做步驟:
你能夠從這裏下載安全的CAPTCHA代碼:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/goodcaptcha.php
在實際業務及生產中,某些功能會要求有CAPTCHA。而不安全的CAPTCHA,將會致使敏感數據被竊取,認證攻擊,DOS用戶甚至管理員等嚴重問題的發生。所以對於開發人員和使用者而言,具備一個好的設計和實施的CAPTCHA相當重要!
全部腳本的Github連接:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script
*參考來源:securelayer7。