看了相關密碼找回漏洞的分析文章后,打算找個應用來進行這方面的分析研究。最近剛入手了丁盯智能門磁這個智能家居硬件,它通過硬件和軟件app的結合,來監控門的安全性。看到它驗證碼中只是四位簡單的數字,估計其中可能存在安全漏洞,就著手進行了相關的測試。
存在的相關漏洞已經通過了相關企業,已經完成了修復。現在的文章來做個記錄和對有需要的同學做個參考。
軟件后臺設計中存在缺陷導致可遍歷賬號信息,并重置任意賬戶密碼
通過應用app的使用,發現后臺設計存在兩個問題:
1.login1接口會在發送密碼前先進行是否存在賬號進行檢測,返回相應的錯誤碼,可以隨機遍歷手機號測試接口取得存在的手機號列表,可能因為注冊用戶較少原因,測試158號碼時候只得到一個注冊手機信息。
測試代碼:
https://github.com/joeyxy/python/blob/master/crawler/dingding/dingding.py
2.找回密碼功能中,通過使用應用,觀察其邏輯,反編譯其軟件,找到了aes加密算法及相應的key及iv向量組成方式。因為使用了4位純數字弱驗證碼,雖然設定了過期時間為120秒,但是后臺沒有限定提交的次數,實際測試中,基本在不到一分鐘的測試中就可以利用password2接口設計缺陷破解驗證碼,直接提交修改其它注冊用戶的密碼。
測試代碼:
https://github.com/joeyxy/python/blob/master/crawler/dingding/poc_dd3.py
這里使用到的分析工具主要有:Burp Suite,JD-Jui
手機通過配置代理將數據發送到Burp Suite分析
遍歷賬號login相應細節,存在賬號則返回碼為:0
提交賬號請求:
服務器對賬號請求的返回數據
測試破解驗證碼,修改用戶密碼。首先是請求接口password1,提交手機號碼和參數,請求發送驗證碼,接口會返回aes加密所要使用的相關key,然后通過aes加密算法使用key+驗證碼和iv加密驗證碼加密碼的字符串算出密碼,發送給給服務器,這里代碼是通過遍歷測試,根據接口返回的信息,檢查返回碼,錯誤碼為0就表示修改密碼成功,打印相關消息。
反編譯apk包所得到的加密算法:
找回密碼password1接口測試:
更新密碼password2接口測試:
將上面的測試過程編碼,測試結果:
應用后臺存在的漏洞主要是在于沒有限定后臺請求的次數,同時使用了簡單數字驗證碼。在分析的過程中,花費時間多的地方在于對于加密算法的分析,通過反編譯軟件來找到AES算法及相應key與iv的組成。下面的工作就是進行編碼測試了。
文章來源:FreeBuf黑客與極客(FreeBuf.COM)