天天看點

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

0X00 前言

  手機驗證碼在web應用中得到越來越多的應用,通常在使用者登陸,使用者注冊,密碼重置等業務子產品用手機驗證碼進行身份驗證。針對手機驗證碼可能存在的問題,收集了一些手機驗證碼漏洞的案例,這裡做一個歸納總結,在測試中,讓自己的思路更加明确。常見的手機驗證碼漏洞如下: 

1、無效驗證

2、用戶端驗證繞過

3、短信轟炸

4、驗證碼爆破

5、驗證碼與手機号未綁定

0X01 無效驗證

  有驗證碼子產品,但驗證子產品與業務功能沒有關聯性,此為無效驗證,一般在新上線的系統中比較常見。

案例一: 

  擷取短信驗證碼後,随意輸入驗證碼,直接輸入兩次密碼,可成功更改使用者密碼,沒有對短信驗證碼進行驗證,可能導緻CSRF等問題。

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

案例二:任意使用者注冊

  第一步,利用自己的手機号接收驗證碼進行驗證,下一步跳轉到一個設定密碼的頁面

  第二步,抓包,篡改手機号,使用任意手機号進行注冊

問題剖析:業務一緻性存在安全隐患,身份驗證與密碼修改過程分開,驗證無效。

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

參考連結:https://woo.49.gs/static/bugs/wooyun-2016-0189300.html

        https://woo.49.gs/static/bugs/wooyun-2013-026652.html

0X02 用戶端驗證繞過 

  用戶端驗證是不安全的,可能導緻任意賬号注冊、登入及重置任意使用者密碼等一系列問題。

案例一:直接傳回明文驗證碼

  點選擷取收集驗證碼,監聽到兩條json資料,可以發現驗證碼就藏在ticket裡面,輸入9360即可登陸成功。

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

案例二:傳回密文驗證碼

  驗證加密後傳回用戶端,使用者解密即可擷取驗證碼。

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

案例三:攔截替換傳回包

  第一步,使用正常賬号修改密碼,擷取驗證碼通過時伺服器傳回資料,儲存該資訊

  第二步,使用fiddler下斷,之後點選确定,伺服器會傳回驗證碼錯誤之類的資訊,使用{"MessageHeader":{"MessageID":"RSP036","ErrorCode":"S000","Description":"成功!"}}此資訊進行替換後再執行,密碼修改成功。

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

問題剖析:常見于APP等用戶端軟體,通過攔截替換傳回資訊,繞過用戶端本地驗證。

參考連結:吉祥航空可以繞過手機驗證碼修改任意賬号密碼 

      http://cb.drops.wiki/bugs/wooyun-2015-0104509.html

0X03 短信轟炸

  短信轟炸是手機驗證碼漏洞中最常見的一種漏洞類型。

  在測試的過程中,對短信驗證碼接口進行重放,導緻大量發送惡意短信。

案例一:無限制,任意下發

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

案例二:有一定時間間隔,無限下發

  每隔60秒可下發一條短信,無限下發,短信轟炸。在測試過程中,可通過編寫Python腳本來計算短信下發時間間隔,實作短信轟炸。

#coding=utf-8
import json
import requests
import time
start_time = time.time()
count =input("Please input counts:")
phone =raw_input("Please inut your phone:")
i=0
while (i<count):
    url= "http://xxxx.cn:9092/map/GenerationUpdate"
    data=json.dumps({"headerInfo": { "functionCode": "randomcode4G"},"requestContent":{"phoneNumber":phone}})

    header = { 'User-Agent' : 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1''Host': 'xxxx.com:9092',
        }  
    r = requests.post(url, data=data,headers=header,timeout=5)
    result=r.content
    if result.count('serviceCode":0'):
        print 'Sending message : %d seconds ' % (time.time()-start_time)
    i=i+1
    #print 'send %s time'%(i)      

0X04 驗證碼爆破 

  短信驗證碼一般由4位或6位數字組成,若服務端未對驗證時間、次數進行限制,則存在被爆破的可能。

  輸入手機号擷取驗證碼,輸入任意短信驗證碼,發起請求,抓包,将短信驗證碼字段設定成payloads取值範圍為000000-999999進行暴力破解,根據傳回響應包長度判斷是否爆破成功。

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

0X05 驗證碼與手機号未綁定

  一般來說短信驗證碼僅能使用一次,驗證碼和手機号未綁定,驗證碼一段時期内有效,那麼就可能出現如下情況:

  1、A手機的驗證碼,B可以拿來用

  2、A手機在一定時間間隔内接到兩個驗證碼,都可以用。(該問題可能為産品政策設定,參考連結:https://woo.49.gs/static/bugs/wooyun-2012-08679.html)

  檢測接收驗證碼的手機号和綁定的手機号是否一緻。

案例一:任意使用者密碼重置

  1.使用自己手機号收取驗證碼

  2.自己的驗證碼和對方的手機号填上,下一步城管設定新密碼

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

 參考連結:

https://woo.49.gs/static/bugs/wooyun-2014-080315.html

https://woo.49.gs/static/bugs/wooyun-2012-013836.html

解決方案:

  1.在伺服器進行有效驗證,手機号和驗證碼在伺服器進行唯一性綁定驗證。

  2.在服務端限制驗證碼發送周期,設定時效,限制次數。

​ 關于我:一個網絡安全愛好者,緻力于分享原創高品質幹貨,歡迎關注我的個人微信公衆号:Bypass--,浏覽更多精彩文章。

手機驗證碼常見漏洞總結0X00 前言0X01 無效驗證0X02 用戶端驗證繞過 0X03 短信轟炸0X04 驗證碼爆破 0X05 驗證碼與手機号未綁定

繼續閱讀