Insecure CAPTCHA
前言
這裏我覺得主要是要理解谷歌驗證碼這個流程,因爲這是一個邏輯漏洞,要是換成別的驗證方式,這次的漏洞也就不一定有效了,主要還是理解這個驗證碼的一個流程吧
我在別人的博客看到了這張圖,我也是通過這張圖來理解這個驗證流程的。下面簡單說下我的理解
首先用戶訪問網頁,觸發頁面的驗證碼的js模塊,向谷歌服務器發起請求,谷歌服務器將驗證碼發給用戶。用戶輸入驗證碼發送數據回去,這裏發給的是訪問網站的服務器,網站的服務器拿到驗證碼後,再去訪問谷歌的服務器,谷歌的服務器會判斷驗證碼是否正確,再將結果返回給網站服務器。
這裏服務器會用到recaptcha_check_answer函數
參數remoteip是用戶的ip,response是 recaptcha_response_field 字段的值。函數返回ReCaptchaResponse class的實例,ReCaptchaResponse 類有2個屬性 :
$is_valid是布爾型的,表示校驗是否有效,
$error是返回的錯誤代碼。
然後這裏再說下dvwa這裏的配置,點進dvwa的靶場,可以看到需要配置
就像我們上面說到的recaptcha_check_answer函數需要我們提供privkey
點擊下面的鏈接,就會跳轉到谷歌的登錄頁面,這裏我就不去登錄申請key了,我自己用docker搭的靶場設的是個內網環境,不想再去配了,最主要我看別人的博客說申請好像也存在問題,最最主要它不影響我們的去實驗,但不能體驗到它正常操作的一個流程,我感覺對挖掘它的漏洞是增加了難度的
這裏我們登錄dvwa的後臺,按照它提示找到相應的路徑下的文件,然後找到如下圖所示的兩個key,隨意的輸入些值保存
這時候我們再去訪問網頁,可以看到驗證碼雖然沒法顯示(畢竟我們是瞎填的而且也訪問不了外網…),但是能正常使用了
練習
Low
這裏我們還是直接來看代碼
我也不怎麼會php,但它主要有兩個if函數,將整體分成了兩部分,大概就是第一部分檢查驗證碼返回表單,第二部分接受用戶的表單再來進行修改
這裏很明顯我們直接跳過一個if判斷就能繞過驗證碼了
可以抓包看到提交的數據裏面有一個step數據,這裏我們直接將其改爲2,就能繞過驗證階段了
可以看到密碼被成功修改了
當我不改數據直接訪問的時候就會如上圖所示,因爲這裏訪問不了谷歌的服務器所以會報上面的錯誤。
這裏沒有一個完整體驗還是感覺欠缺了點什麼,不能抓包分析一下正常的一個流程
這裏在實際應用中還可以集合CSRF來進行,特別是這種修改密碼的不說要輸入以前的密碼,至少得要cookie吧,所以可以結合CSRF來進行攻擊。我看了下別人的博客,這裏用csrf進行攻擊時會有重定向,返回密碼修改成功的頁面…這個讓被攻擊者會意識到遭到了攻擊
下面是別人做的簡單的csrf攻擊頁面,詳見參考1
<input type=“hidden” name=“step” value=“2”
Medium
這裏midium級別還是進行了分步的判斷了,但可以看到下圖,它多了一個判斷
這其實就沒什麼意思了,和Low級別大同小異了,只是多改一個值
可以看到上圖我將step改成了2,並在末尾加上了它需要的檢查的值且賦值爲true
然後我們就成功的修改了密碼,繞過了驗證碼
CSRF和Low級別的利用沒什麼差別
High
High級別還是做了些改動,首先已經不是兩個if的判斷了,可以看下圖
這裏的resp就是谷歌服務器返回的數據,沒有課操作空間,但是它判斷驗證是否失敗是用的
if ( $resp || ( $_POST[ 'g-recaptcha-response' ] == 'hidd3n_valu3' && $_SERVER[ 'HTTP_USER_AGENT' ] == 'reCAPTCHA' ) )
這樣一句話要判斷爲true纔會說驗證失敗,前面!resp爲true,但它用的&&來連接…所以我們只要保證後面爲false就能繞過了…搞不懂用&&是什麼鬼邏輯…
這就很好搞了啊,
屬性g-recaptcha-response 的值不能是hidd3n_valu3 並且請求頭部的 HTTP_USER_AGENT 不能是 reCAPTCHA就會判斷爲false…
如上圖把USER_AGENT 改爲reCAPTCHA,然後在post裏添加&g-recaptcha-response=hidd3n_valu3
ok,這樣就能發現成功的修改了密碼
Impossible
這裏沒有分成兩部分了,然後對谷歌服務器的返回值進行單獨的校驗,這樣就修補了邏輯漏洞,而且還要求輸入以前的密碼(csrf基本over)
當然這裏還加入了Anti-CSRF token 機制防禦CSRF攻擊,和PDO技術防護sql注入
總結
這裏的不安全驗證碼,我認爲在現實中應該很難碰到?但是我覺得這裏主要是想讓我們體驗什麼是邏輯漏洞吧,特別是high級別中&&這些符號可能搞混而且還不會影響程序的運行,這樣的邏輯漏洞可能存在的機率就會比較高。
這裏把dvwa以前的十個模塊的內容就搞定了,還剩3個新出的模塊了,提前撒花✿✿ヽ(°▽°)ノ✿