App滲透 - 人臉識別登入繞過
開啟APP是一個登入框
抓包後發現引數被加密了
使用Jadx脫原始碼發現,並沒有加殼也沒有混淆,運氣很好
根據經驗,先搜尋Encrypt、Decrypt等關鍵字,發現在Common.js中有一個encryptData函式
定位過去,一套加解密演算法都寫好了放在這
放到瀏覽器console裡面除錯,果然沒錯
首先測試了一下注入
至此已經可以判斷該登入點就是一個注入了,可是返回結果始終都是“使用者名稱或密碼錯”即使用了' or '1'='1
根據返回結果推測,後端的登入處的邏輯程式碼可能是這樣的
userInfo = 'select * from userinfo where username = <userName>';userPass = userInfo.password;if (userPass == <passWord>){ return 'Login success';}else{ return 'Login failed';}
通過Union注入構造萬能密碼,是可以造成任意使用者登陸的,測試過程如下先使用order by測試,得知欄位的數量為9個,構造payload
由於Oracle在進行union查詢時,所對應的欄位資料型別也必須相同,所以還要進行欄位資料型別的測試,最終結果如下
接下來就是一個欄位一個欄位的改過去,判斷哪個欄位對應的是密碼欄位,測試結果如下
在繞過後,發現程式出現了異常
仔細觀察返回的資料,其中有username(使用者名稱)、staffId(職工號)、email(郵箱)、staffName(姓名)、tel(手機號)、mobile(手機號),然而這些資料都是我剛剛自己隨便構造的,這裡應該需要一個真實的使用者資訊,供後續的登入流程使用
好在,還是有一個地方能獲取真實的使用者資訊的App還有一個忘記密碼的功能(通常這裡可以爆破使用者名稱)
利用忘記密碼的功能可以判斷使用者名稱是否存在,這裡隨便跑了一下字典,就出來好多使用者名稱
自然而然地利用這些使用者名稱使用簡訊驗證碼登入
獲取驗證碼,然後解密資料包,驚奇的發現返回了使用者基本資訊
根據登入返回結果,重新測試payload,最終結果如下
仔細看返回的登入資料,已經正常了
然後重新替換資料包登入,提示繫結IMEI
這個繞過很簡單,隨便輸入驗證碼,替換返回包,把resultCode從1001改為1000就行(常規操作)
最終還要個人臉認證
先用自己的臉檢測,這時候手機會向伺服器發包,burp把手機發向伺服器的包直接丟掉就可以繞過
修改資料包,將其中的人臉資料替換為空,然後傳送
最終的最終,成功登入APP
----------------
-
1 #
後端沒有SQL預處理嗎?