当我们在进行网站安全性测试的时候,通常会遇到网站不存在登陆账号错误锁定机制、无验证码防爆破机制等。
问题描述:
当我们在进行网站安全性测试的时候,通常会遇到网站不存在登陆账号错误锁定机制、无验证码防爆破机制等。
如果用户名和密码采用的是明文传输方式,使得我们可以很轻易的无限重放登陆请求数据包,在已知用户名或者密码其中之一的情况下进行暴力破解。
而如果网站在用户登陆的时候对用户名和密码进行了加密处理,要如何快速的进行爆破呢?
代码如下:
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=XJeOhq0dkSPVb3zBWhArYLNQxpqkmjEfmxT1x8IECMzFoyK4oVamioS3cgVaBQYB 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" y7BblF2tcCBSQ6SZHLltrI1ocnWVQ0KcXVgoBnKUuwlC3B3s9pVoLl6BRerL5x4y -----------------------------146043902153--
解决思路:
常规思路:准备好爆破字典 -> 查找网站用户名密码加密方式 -> 使用其他脚本语言(如python)模拟前台JavaScript的加密方式加密字典 -> 利用重放工具加载加密过的爆破字典进行爆破。
大神思路:准备好爆破字典 -> 查找网站用户名密码加密方式 -> 请求明文用户名密码到NodeJs -> NodeJs直接调用JavaScript加密方法加密 -> NodeJs将加密后的用户名密码发送到需要爆破的网站 -> NodeJs根据网站响应判断用户名密码是否正确 -> 使用重放工具循环爆破。
实战演练:
实战环境:
某网站登陆页面不存在防爆破机制,密码在用户登陆过程中被加密传输。
登陆成功,返回errorcode等于0。
登陆失败,返回errorcode等于-1。
工具说明:
Burpsuit、NodeJs
安装使用说明: www.runoob.com/nodejs/nodejs-install-setup.html)
实战过程:
Step 1:找网站密码加密方式
a)查看登陆页面源码
其中,form.append(“logpass”,hex_md5(hex_md5($(“#logpass”).val())));对用户输入的密码调用了两次hex_md5()进行加密。
b)查找定义hex_md5()加密方法的位置。
Step 2:NodeJs调用JavaScript加密方法加密
a)将md5.js文件保存到本地,并使用export将加密方法暴露出来。
b) 创建NodeJs服务器,接收http GET请求
创建server.js文件,将以下代码写入文件:
c) 引用md5.js,加密nodejs接收到的用户密码
添加加密代码到server.js中。Server.js代码如下:
Step3:使用重放工具循环爆破
a) 开启nodejs服务器
代码如下:
#nodejs server.js
b) 测试可爆破性
访问http://127.0.0.1:8888/?name=admin&pass=123
在nodejs中查看网站返回信息 。
c) 使用burpsuit对node.js服务器进行重放。
爆破成功。
实战总结:
以上内容为 Nodejs暴力破解实践分享,如有更好的思路或者任何疑问,欢迎艾特漏斗社区那位最帅的萌新小哥哥。
文章出自:https://www.freebuf.com/column/169124.html
很多时候由于JS对用户名或密码加密过得。这不失为一种快速得解决方法。