APP賬號密碼傳輸安全分析


最近在搞公司的安卓APP測試(ThinkDrive 企郵雲網盤)測試,安卓app測試時使用代理抓包,發現所此app使用HTTP傳輸賬號密碼,且密碼只是普通MD5加密,存在安全隱患,無法防止sniffer攻擊、中間人攻擊(因此這次安全問題,加強對這兩安全術語的了解):

問題1:賬號密碼采用http傳輸,賬號與密碼(MD5值)均可以捕獲;
問題2:密碼雖采用MD5加密,簡單密碼可以在線解密;
問題3:密碼不解密也一樣可以登錄,通過A賬號在app登錄,再用sniffer得到的B 帳號與密碼(MD5值),使用Fiddler修改A賬號的請求完成B賬號在APP登錄
 
     公司郵箱各版本其實使用的也是明文傳輸,最近WEB雖采用了HTTPS傳輸,但仍是傳輸的明文,可以抓包查看(HTTPS也可通過Fiddler解析成明文),基於此原因,於是對主流郵箱登錄進行抓包分析,本文主要分析QQ是如何把賬號密碼從客戶端傳到服務端,學習借鑒相關經驗。
 
===========分析結果(Findyou)===============
【QQ觸屏版】
測試帳號:2198400585
用戶密碼:123qwe
加密方法:RSA非對稱加密
傳輸協議:HTTPS
 
【WEB版】
測試帳號:2198400585
用戶密碼:123qwe
加密方法:MD5(hexchar2bin(MD5(密碼))+QQ號16進制)+ 驗證碼
傳輸協議:HTTPS
分析結論:使隨機 驗證碼混合MD5加密以保證每次登錄的值不一樣
===========分析結果(Findyou)===============
 
 
  • 【QQ觸屏版分析】 
 
 
 
 
操作步驟:1.使用Chrome修改瀏覽器User Agent為iphone
              2.打開Fiddler准備抓包
              3.訪問mail.qq.com,QQ會自動適配到觸屏版
              4.查看 http://w.mail.qq.com/cgi-bin/loginpage?f=xhtml源碼
得到關鍵代碼如下:
復制代碼
復制代碼
    loginForm.onsubmit = function(){
        var pwd = document.getElementById("pwd");
        var p = document.getElementById("p");
        var tsValue = document.getElementById("ts").value;
        var PublicKey = "CF87D7B4C864F4842F1D337491A48FFF54B73A17300E8E42FA365420393AC0346AE55D8AFAD975DFA175FAF0106CBA81AF1DDE4ACEC284DAC6ED9A0D8FEB1CC070733C58213EFFED46529C54CEA06D774E3CC7E073346AEBD6C66FC973F299EB74738E400B22B1E7CDC54E71AED059D228DFEB5B29C530FF341502AE56DDCFE9";
            var RSA = new RSAKey();
            RSA.setPublic(PublicKey, "10001");
        var Res = RSA.encrypt(pwd.value+ '\n' + tsValue + '\n');
        if (Res)
        {
            p.value = hex2b64(Res);
            pwd.value = "";
        }
        return true;
    }
復制代碼
復制代碼

如此可以看使用加密方法: RSA公鑰加密算法

 

Fiddler抓包如下:(P為密碼加密后的值)

 
 
 
 
 
  • 【WEB版分析】 
 
注:網上查閱眾多相關資料(網上有許多介紹QQ登錄相關的內容),總結實踐測試截圖抓包如下
 
Step1:  打開mail.qq.com,向服務器 獲取驗證碼 
捕獲請求:
https://ssl.ptlogin2.qq.com/check?uin=2198400585@qq.com&appid=522005705&ptlang=2052&js_type=2&js_ver=10009&r=0.8771616001613438
返回數據有兩種情況:
1). ptui_checkVC('1','aabf7b95f41689c5872740515288dcb5b1911c3de95f2092','\x00\x00\x00\x00\x83\x08\xee\x49');
2). ptui_checkVC('0','!BQI','\x00\x00\x00\x00\x83\x08\xee\x49');
其中 ‘1’代表需要驗證碼,‘0’代表不需要驗證碼 ,'!BQI' 就是默認的驗證碼;
 
Step2: 密碼加密 
騰訊JS加密代碼: 
M=C.p.value;
var I=hexchar2bin(md5(M));
var H=md5(I+pt.uin);
var G=md5(H+C.verifycode.value.toUpperCase());
 
密碼“123qwe”通過以上加密方法,得到的結果與抓包請求中的加密值一樣(請求截圖見Step3)
pt.uin =  \x00\x00\x00\x00\x83\x08\xee\x49     QQ號 2198400585的16進制 000000008308ee49 
 
 
Step3:登錄請求
捕獲請求: 
https://ssl.ptlogin2.qq.com/login?ptlang=2052&aid=522005705&daid=4&u1=https%3A%2F%2Fmail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dptlogin%26ss%3D%26validcnt%3D%26clientaddr%3D2198400585%40qq.com&from_ui=1&ptredirect=1&h=1&wording=%E5%BF%AB%E9%80%9F%E7%99%BB%E5%BD%95&css=https://mail.qq.com/zh_CN/htmledition/style/fast_login148203.css&mibao_css=m_ptmail&u_domain=@qq.com&uin=2198400585&u=2198400585@qq.com&p=  15A6FB7C3A0F0F12BE2BB2BFA52F7BDF&verifycode=  !BQI&fp=loginerroralert&action=2-6-30865&g=1&t=1&dummy=&js_type=2&js_ver=10009
 
登錄成功后返回的數據:
ptuiCB('0','0','https://ssl.ptlogin2.mail.qq.com/check_sig?pttype=1&uin=2198400585&service=login&nodirect=0&ptsig=9mgQ2dwnOftcwH965zksFLFPidMP2zxKQZJXkxdfOy0_&s_url=https%3a%2f%2fmail.qq.com%2fcgi-bin%2flogin%3fvt%3dpassport%26vm%3dwpt%26ft%3dptlogin%26ss%3d%26validcnt%3d%26clientaddr%3d2198400585%40qq.com&f_url=&ptlang=2052&ptredirect=101&aid=522005705&daid=4&j_later=0&low_login_hour=0&regmaster=0','1','登錄成功!', 'QQ');
 
 
分析以上兩種方法,采用非對稱式(公/私鑰)加密方法較為安全,已建議APP小組研發采用 RSA非對稱加密 ,使用HTTPS實現登錄
 
http://www.cnblogs.com/findyou/p/3244917.html?utm_source=tuicool&utm_medium=referral


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM