不知道为什么,我就想发篇文章
初遇
虽然是人不可貌相,但是这个也夸张了。
看着这么简陋至极(找回密码)的上古世纪网站,漏洞肯定很多吧
那来看看登录正确的返回格式,顺便破解个密码
细看
哈哈,对吧,果然简陋,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);
}
再见
事实上,对于弱密码还是可以通过字典(暴力枚举),不断的尝试登陆,
在服务器没有做限制的情况下,还是可以拿到密码的
所以下一步是写个小脚本?