【安全測試】如何利用短信驗證碼BUG浪費公司的錢

1、背景

  公司新產品體驗,發現很多交互、UI、功能設計上的小問題。因而花了點時間隨意挑了幾個功能深刻的玩了一下,順手提了BUG。接口層,看了一下接口文檔,簡單測了一下接口,BUG其實還挺嚴重的,後面詳細分析,爲了顧及服務器後臺大佬(架構師)的面子,費時費力在APP測試短信驗證碼服務器與APP總體處理邏輯,提交BUG以下:python

  • BUG:

 

  • 解決結果:

哎!TX背景的架構師的解決結果,讓我稍許失望。android

 

2、BUG分析

一、先說結論:重點是能夠短期(一、2分鐘)以內把短信平臺的預充值費用所有用完shell

1). 單手機號碼可發送短信:40條+
2).可多手機號,短期操做無限制發送短信驗證碼
3).對用戶影響:可作短信炸彈惡意騷擾用戶
4).對公司影響:短期耗盡充值平臺費用,致使註冊、登陸功能不可用;大量垃圾短信影響公司形象安全

 

二、第一個問題:單號碼沒有限制條數服務器

a、06.12號當天實測,能夠30來條,每15條換了一個通知號碼而已架構

b、06.14號當天實測,確實超過15條是提示超出頻率限制。(心裏OS:我有當時短信截圖,並有12號的其中部分日誌在手,日誌在手...)app

 

測試想要不背鍋哥就大發慈悲教一條:無論大小BUG均記錄在案,嚴重問題儘量全的保留界面截圖、日誌文件等直接證據。socket

 

補充:通常第三方短信平臺已有限制每一個號碼天天發送頻率與條數:通常10條左右/天,1分鐘內不超過2條工具

 

三、第二個問題:同設備、同IP、多號碼請求無限制測試

a、文檔設計,咱們直接看業務層接口設計就能發現致命的缺陷!

  • 接口文檔

 

  • 模擬請求

 

b、設計缺陷簡單分析

1)、此接口爲直接請求,基本沒有其它前置接口處理(除了接入層路由)。

協議說明:APP請求走socket協議到接入層,再由其將請求內容改爲http轉發給業務層    --本次不討論這個

缺陷1:無請求來源識別

缺陷2:同設備、同IP惡意請求,沒法作限制     --此處原覺得接入層有作,但我今天實測了一下未發現

缺陷3:無數據篡的改校驗

缺陷4:單號碼有加發送頻率限制(剛加),同設備更換號碼發送頻率無限制

缺陷5:單號碼有加15條/天的限制(剛加),同設備多號碼(不停更換號碼)短信發送可無限制

 

以上接口沒有對外暴路,相對安全一點。但安全隱患是存在的,後面會講實操如何實際測試,對是測試!

 

四、第三個問題:短信炸彈 

以前沒有單號碼的條數限制、發送頻率的限制,

如今有了,就不能任性發,此問題做廢,但稍稍解釋一下。

  • 無條數限制:一天發個幾十條給你,一個網站幾十條,多幾個網站你就跪了,有沒有經歷過某寶賣家的騷擾?
  • 無發送頻率的限制:一分鐘2條,若是沒有限制,段時間就能夠給你來個幾十上百條,手機響個不停,15條一個號碼,黑名單你都拉不過來

 

五、第四個問題:浪費錢,影響形象

短信驗證碼是爲了用戶快速登陸,沒有達到預期,都是浪費錢!故從這個角度說,沒有安全措施,就是浪費錢!還不停給用戶不須要的垃圾短信! 

 

六、第五個衍生的問題:驗證碼與登陸邏輯的安全缺陷

  • 登陸接口的Bug:

在測登陸接口時試了,輸錯試過250次短信驗證碼(數字是巧合,嗯!),最後一次正確,依舊能夠登陸成功!what?怎麼有這麼牛X的操做???

  • 驗證碼是4位數:

單看4位數驗證碼,沒有一點問題對吧?

手機在用戶手裏,你也收不到,幾位仍是不同?NO!!!

 

首先,4位驗證碼有10^4=10000種可能,驗證碼3分鐘內有效。

其次,登陸無錯誤次數限制

 

就問一句:你能不能在180秒破解登陸,就1W種可能

答案:so eazy!

  

3、如何浪費公司的錢

其餘扯淡的吹噓的玩意都不說,實操怎麼浪費公司錢(短信費用)!!!(啊!~~老闆聽我解釋,不是你想的那樣!

假設我非公司員工,不瞭解協議與邏輯,有什麼辦法呢,多的是,先提兩種:

  • 第一種方式(笨方法):

第一步:隨機生成10W+手機號碼

第二步:裝Android虛擬機,安裝產品APP

第三步:adb模擬(android自動化工具appnium什麼的也行)

1)、app啓動 : adb shell am start -n com.xxx.xxx/.xxx

2)、輸入手機號: adb shell input text 15900000000       --手機號能夠從文件中讀取

3)、點擊發送驗證碼:adb shell input tap 100 300        --發送驗證碼按鈕位置是固定的

4)、Kill APP(可繞過60秒倒計時) :adb shell am force-stop  com.xxx.xxx

第四步:循環以上三個步驟

 

說明:

一、能夠寫成bat,mac能夠寫成sh

二、吃飽了,試了一下,一個虛擬機大約5秒左右一條短信,能夠啓多個虛擬機一塊兒跑,達到1秒1條

三、多個虛擬機使用如下命令:  "adb -s 虛擬機  shell  命令"

四、以上adb仍是有些慢,最好的方法是用monkeyrunner寫(python語言)

五、這兩次測試浪費了公司很多錢,少說也有10RMB++大大額鉅款

 

  • 第二種方式(抓包模擬):

第一步:隨機生成10W+手機號碼

第二步:Android手機(或虛擬機)安裝產品APP

第三步:抓包模擬

1)、Android手機鏈接電腦共享wifi 

2)、開啓抓包工具,好比wireshark

3)、輸入手機號,點擊發送驗證碼 

4)、重得以上步驟屢次,找到規律破解

5)、python腳本或其餘工具模擬請求

 

說明:

一、此方法成功率靠運氣,很多APP都是有加密等各類措施防止中間人攻擊

二、此方法須要必定實力,有代碼或其它功底,第一種方式,徹底不有壓力

三、如裏是不當心獲得了接口協議文檔的,直接跑接口,完美!!!

 

4、感觸

想了不少,有不少想說,

寫到這時忽然發現,準備寫的感觸稍稍過於偏激,

很久未曾熱血與衝動。

深呼吸...1鍾....................................................................................

 

仍是來點雞湯!

安全無小事,認真對待你發現的每個BUG,也許錯過它,就是公司破產的第一步!

BUG不分大小均記錄,有利於經驗的整理、線上回題回溯、背鍋時的有理有據反駁!

努力提高知識廣度,開拓眼界,增長思惟的深度! 

 

祝各位端午節快樂!

相關文章
相關標籤/搜索