首頁>技術>

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預處理嗎?

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • vue3 寫一個大屏