从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

有的Web安全防护产品,为了防止帐号密码被自动化工具攻击、破解,采用了一种技术手段:对网页中的帐号密码,甚至是cookie,进行加密,然后再传输。希望以此加密传输,达到安全防护、防破解的目的。这样做真的有效吗?一步步来看:
比如下面抓取到的一段传输数据为例:

防护是什么效果?


POST /login/ HTTP/1.1
Host: 192.168.80.131
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: [http://192.168.80.131/login/?next=/](http://192.168.80.131/login/?next=/)
X-Requested-With: XMLHttpRequest
Content-Length: 443
Content-Type: multipart/form-data;
boundary=
---------------------------146043902153
Cookie: csrftoken=XJeOhq0dkSPVb3zBWhArYLNQxpqkm
Connection: close

-----------------------------146043902153
Content-Disposition: form-data; name="logname"
admin

-----------------------------146043902153
Content-Disposition: form-data; name="logpass"
14e1b600b1fd579f47433b88e8d85291

-----------------------------146043902153
Content-Disposition: form-data; name="csrfmiddlewaretoken"
y7BblF2tcCBSQ6SZHLltrI1ocnWVQ0KcXVgo

-----------------------------146043902153--


很明显的看到,对密码部分成行了加密。

攻击者会怎么做?


如果遇到这种被保护的情况,攻击者一般会怎么做呢?

1、常规思路:
准备好破解字典 -> 查找网站用户名密码加密方式 -> 使用脚本语言(如JS)模拟前端的加密方式,借助破解字典 -> 利用重放工具加载加密过的爆破字典进行爆力破解。

2、大神思路:
准备好破解字典 -> 查找网站用户名密码加密方式 -> 请求明文用户名密码到NodeJs -> NodeJs直接调用JavaScript加密方法加密 -> NodeJs将加密后的用户名密码发送到需要爆破的网站 -> NodeJs根据网站响应判断用户名密码是否正确 -> 使用重放工具循环爆破。
从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

实战演练:


某网站登陆页面,密码在用户登陆过程中被加密传输。

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

如果登陆成功,返回errorcode等于0:

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

如果登陆失败,返回errorcode等于-1。

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

使用工具


Burpsuit、NodeJs
burpsuit用来做重放,nodejs用来写自动攻击脚本。

实战过程

1:找网站密码加密方式


a)查看登陆页面源码

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

可见,form.append(“logpass”,hex_md5(hex_md5($(“#logpass”).val())));对用户输入的密码调用了两次hex_md5()进行加密。

b)查找定义hex_md5()加密方法的位置。

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!
 

2:NodeJs调用JavaScript加密方法加密


a)将md5.js文件保存到本地,并使用export将加密方法暴露出来。

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

b) 创建NodeJs服务器,接收http GET请求
创建server.js文件,将以下代码写入文件:

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

c) 引用md5.js,加密nodejs接收到的用户密码
添加加密代码到server.js中。Server.js代码如下:

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

3:使用重放工具循环爆破


a) 开启nodejs服务器
node server.js

b) 测试可爆破性

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

在nodejs中查看网站返回信息:

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

c) 使用burpsuit对node.js服务器进行重放。

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

密码被成功破解!:


从前端对帐号密码加密,就可以防止自动化破解了吗?Nodejs一例破解测试,告诉你真像!

结论:


加密的密码还是被破解了,说明加密帐号密码内容防自动化破解,是不安全的,是失败的理论。虽然不少安全厂商宣传可以对传输内容进行加密,而事实上竟全是无用功,形同虚设,因为一开始路子就走错了,加密的再好也没用。

正确的防自动化破解思路:


像上面的操作,如果不是加密密码内容,而是加密密码字段本身呢?那样,没有帐号密码可校验!那样才达到了真正的防自动化破解攻击。

猜你喜欢

转载自blog.csdn.net/qq_43422918/article/details/114925578