不知道爲什麼,我就想發篇文章
初遇
雖然是人不可貌相,但是這個也誇張了。
看着這麼簡陋至極(找回密碼)的上古世紀網站,漏洞肯定很多吧
那來看看登錄正確的返回格式,順便破解個密碼
細看
哈哈,對吧,果然簡陋,jQuery都沒有用,還是用原始的提交按鈕
咦,傳輸的密碼加密了?MD5破解之,不對,怎麼這麼久也不行,看看JS處理函數,居然還加鹽處理了?還是動態加鹽?
有點意思,動態鹽值+MD5
通過請求POST方法,獲取後臺的動態鹽值如HENPUM
,後端鹽的生成與處理未知,初步推斷是隨機到每個用戶的每次請求(但是每次發送把鹽給帶上是什麼鬼!!!)
核心構造: encPassword = MD5(MD5(pass) + seed);
這樣兩層加密之後,基本上就安全了,尤其是對弱密碼來說安全性得到了極大的提高(當然是對於傳輸和存儲,可以扛住彩虹表的攻擊)
//表單處理函數,獲取鹽
function fillLoginForm()
{
//純天然$函數233
//後端鹽的生成與處理未知,初步
$('seed').value = LoadURLSync("POST", "/learn/ajax/vcode", '');
var password = $('password');
if (password.value == '')
{
alert("Please type in your password..");
password.focus();
return false;
}
var passEnc = $('passEnc');
var seed = $('seed');
//加密
passEnc.value = encodePass(password.value, seed.value);
password.value = '';
return true;
}
//加密函數
function encodePass(pass, seed)
{
return hex_md5(hex_md5(pass) + seed);
}
//純天然$函數233
function $(id)
{
return document.getElementById(id);
}
再見
事實上,對於弱密碼還是可以通過字典(暴力枚舉),不斷的嘗試登陸,
在服務器沒有做限制的情況下,還是可以拿到密碼的
所以下一步是寫個小腳本?