最近在搞公司的安卓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會自動適配到觸屏版
得到關鍵代碼如下:
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®master=0','1','登錄成功!', 'QQ');
分析以上兩種方法,采用非對稱式(公/私鑰)加密方法較為安全,已建議APP小組研發采用
RSA非對稱加密
,使用HTTPS實現登錄。
http://www.cnblogs.com/findyou/p/3244917.html?utm_source=tuicool&utm_medium=referral