工具 | Nodejs暴力破解实践

当我们在进行网站安全性测试的时候,通常会遇到网站不存在登陆账号错误锁定机制、无验证码防爆破机制等。

问题描述:

当我们在进行网站安全性测试的时候,通常会遇到网站不存在登陆账号错误锁定机制、无验证码防爆破机制等。

如果用户名和密码采用的是明文传输方式,使得我们可以很轻易的无限重放登陆请求数据包,在已知用户名或者密码其中之一的情况下进行暴力破解。

而如果网站在用户登陆的时候对用户名和密码进行了加密处理,要如何快速的进行爆破呢?

代码如下:

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根据网站响应判断用户名密码是否正确 -> 使用重放工具循环爆破。

爆破.png

实战演练:

实战环境:

某网站登陆页面不存在防爆破机制,密码在用户登陆过程中被加密传输。

传输.png

登陆成功,返回errorcode等于0。

0.png

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

- 1.png

工具说明:

Burpsuit、NodeJs

安装使用说明: www.runoob.com/nodejs/nodejs-install-setup.html

实战过程:

Step 1:找网站密码加密方式

a)查看登陆页面源码

源码.png

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

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

位置.png

位置 2.png

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

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

暴露 1.png

暴露 2.png

b) 创建NodeJs服务器,接收http GET请求

创建server.js文件,将以下代码写入文件:

文件.png

c) 引用md5.js,加密nodejs接收到的用户密码

添加加密代码到server.js中。Server.js代码如下:

如下 1.png

如下 2.png

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

a) 开启nodejs服务器

服务器.png

代码如下:

#nodejs server.js

b) 测试可爆破性

访问http://127.0.0.1:8888/?name=admin&pass=123

123.png

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

信息.png

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

重放 1.png

重放 2.png

爆破成功。

成功.png

实战总结:

以上内容为 Nodejs暴力破解实践分享,如有更好的思路或者任何疑问,欢迎艾特漏斗社区那位最帅的萌新小哥哥。

文章出自:https://www.freebuf.com/column/169124.html

  1. 隐士说道:

    很多时候由于JS对用户名或密码加密过得。这不失为一种快速得解决方法。

发表评论

邮箱地址不会被公开。 必填项已用*标注