1. 程式人生 > >APP賬號密碼傳輸安全分析

APP賬號密碼傳輸安全分析

安卓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/[email protected]&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&[email protected]&uin=2198400585&[email protected]&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實現登入