公司新產品體驗,發現很多交互、UI、功能設計上的小問題。因而花了點時間隨意挑了幾個功能深刻的玩了一下,順手提了BUG。接口層,看了一下接口文檔,簡單測了一下接口,BUG其實還挺嚴重的,後面詳細分析,爲了顧及服務器後臺大佬(架構師)的面子,費時費力在APP測試短信驗證碼服務器與APP總體處理邏輯,提交BUG以下:python
哎!TX背景的架構師的解決結果,讓我稍許失望。android
一、先說結論:重點是能夠短期(一、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條/天的限制(剛加),同設備多號碼(不停更換號碼)短信發送可無限制
以上接口沒有對外暴路,相對安全一點。但安全隱患是存在的,後面會講實操如何實際測試,對是測試!
四、第三個問題:短信炸彈
以前沒有單號碼的條數限制、發送頻率的限制,
如今有了,就不能任性發,此問題做廢,但稍稍解釋一下。
五、第四個問題:浪費錢,影響形象
短信驗證碼是爲了用戶快速登陸,沒有達到預期,都是浪費錢!故從這個角度說,沒有安全措施,就是浪費錢!還不停給用戶不須要的垃圾短信!
六、第五個衍生的問題:驗證碼與登陸邏輯的安全缺陷
在測登陸接口時試了,輸錯試過250次短信驗證碼(數字是巧合,嗯!),最後一次正確,依舊能夠登陸成功!what?怎麼有這麼牛X的操做???
單看4位數驗證碼,沒有一點問題對吧?
手機在用戶手裏,你也收不到,幾位仍是不同?NO!!!
首先,4位驗證碼有10^4=10000種可能,驗證碼3分鐘內有效。
其次,登陸無錯誤次數限制
就問一句:你能不能在180秒破解登陸,就1W種可能!
答案:so eazy!
其餘扯淡的吹噓的玩意都不說,實操怎麼浪費公司錢(短信費用)!!!(啊!~~老闆聽我解釋,不是你想的那樣!)
假設我非公司員工,不瞭解協議與邏輯,有什麼辦法呢,多的是,先提兩種:
第一步:隨機生成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都是有加密等各類措施防止中間人攻擊
二、此方法須要必定實力,有代碼或其它功底,第一種方式,徹底不有壓力
三、如裏是不當心獲得了接口協議文檔的,直接跑接口,完美!!!
想了不少,有不少想說,
寫到這時忽然發現,準備寫的感觸稍稍過於偏激,
很久未曾熱血與衝動。
深呼吸...1分鍾....................................................................................
仍是來點雞湯!
安全無小事,認真對待你發現的每個BUG,也許錯過它,就是公司破產的第一步!
BUG不分大小均記錄,有利於經驗的整理、線上回題回溯、背鍋時的有理有據反駁!
努力提高知識廣度,開拓眼界,增長思惟的深度!
祝各位端午節快樂!