前言
在实际测试中,我们一遇到登录处用户名和密码都加密的例子,我们就没办法进行深入啦。就像下面的例子,其实加密只是增加我们的攻击成本,只要还是客户端,在提交服务器之前,所有的加密基本有迹可循,直接看本地js是如何操作的即可。
在本文中,我会分析问题,然后用python来解决问题。这样,更贴合实际。
#下面是post提交的参数,可以看到,其中两处关键的地方,是加密过后的。
ZXh0Oz47bDzluJDlj7fmiJblr4bnoIHkuI3mraPnoa7vvIHor7fph43mlrDovpPlhaXjgII7Pj47Pjs7Pjs%2BPjs%2BPjs%2BPjs%2BMhWtdwzKgY7W7gTey2P%2BJbjqPKw%3D&pcInfo=Mozilla%2F5.0+%28Windows+NT+10.0%3B+WOW64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F70.0.3538.102+Safari%2F537.36undefined5.0+%28Windows+NT+10.0%3B+WOW64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F70.0.3538.102+Safari%2F537.36+SN%3ANULL
&typeName=%D1%A7%C9%FA
&dsdsdsdsdxcxdfgfg=8F430408BF32ABBBBF2A49C66FEDB4
&fgfggfdgtyuuyyuuckjg=0300D447DB23BC0305C35A9DECD3C4
&Sel_Type=STU
&txt_asmcdefsddsd=admin
&txt_pewerwedsdfsdff=
&txt_sdertfgsadscxcadsads=
1.检查本地js
image.png
这是我通过burp抓包后的结果,个人习惯在burp中看页面信息,方便一遍看一遍测试。
可以看到图中的js信息,我们把它js格式化一下,
具体网站是:js代码美化
function chkpwd(obj) {
if (obj.value != '') {
#这里是对dsdsdsdsdxcxdfgfg这个参数进行加密
var s = md5(document.all.txt_asmcdefsddsd.value + md5(obj.value).substring(0, 30).toUpperCase() + '11238').substring(0, 30).toUpperCase();
document.all.dsdsdsdsdxcxdfgfg.value = s;
} else {
document.all.dsdsdsdsdxcxdfgfg.value = obj.value;
}
}
function chkyzm(obj) {
if (obj.value != '') {
#这里是对fgfggfdgtyuuyyuuckjg参数加密
var s = md5(md5(obj.value.toUpperCase()).substring(0, 30).toUpperCase() + '11238').substring(0, 30).toUpperCase();
document.all.fgfggfdgtyuuyyuuckjg.value = s;
} else {
document.all.fgfggfdgtyuuyyuuckjg.value = obj.value.toUpperCase();
}
}
chkpwd 密码加密方式
md5(用户名+md5(密码)的前30位并且字母全大写+'11238')的前30为字母大写
chkyzm 验证码加密方式
md5(md5(验证码大写)的前30位大写字母+'11238')的前30位大写字母
可以看到,在我们试图去加密一个隐私时,估计也会采取这个方法,
但是我们会把我们怎么加密的去告诉公开吗?
其实厂家这样做的只是增加了攻击成本,但是并未实际保护。
2.python实现加密
其实就是我们用上面的加密方式去输出
//upper()是把前面字母全大写,其他就是md5一个知识点
#coding=utf-8
import hashlib
oj = hashlib.md5()
oj.update('admin')
str2 = '123456'+oj.hexdigest().upper()[0:30]+'11238'
oj.update(str2)
print oj.hexdigest().upper()[0:30]
//这里只是一条信息的加密方式,然后我们结合到字典来生成md5后的密码字典
with open('pass_md5.txt','a+') as fi:
with open('pass.txt','r') as f:
for i in f.readlines():
oj = hashlib.md5()
oj.update(i[:-1])
str2 = '123456'+oj.hexdigest().upper()[0:30]+'11238'
oj = hashlib.md5()
oj.update(str2)
fi.write(oj.hexdigest().upper()[0:30])
fi.write('\n')
# print oj.hexdigest().upper()[0:30]
ok,我们这里把生成的md5字典,结合burp就可以进行爆破啦。
不过可惜的是,验证码在参数验证中,是验证的,错后就会一直报验证码错误。
总结
日后会常常更新,人的愤怒都是对自己无能的愤怒,希望自己慢慢去做出一些改变。加油,挖洞,尽可能的去挖洞。