js逆向
在表单爆破密码时经常会出现密码在包里被加密的情况,不能直接用burpsuite+字典进行爆破。这时候需要在网页找出进行加密的js文件,过一遍加密再去爆破。
前端调试
浏览器的source有很多功能:
- 设置断点
- 进行调试
通过设置断点,调试时可以准确定位到进行加密的函数
断点
普通断点
直接在js代码中点击行号,标为蓝色即是已经设置断点
有时候会出现没有行号的情况(没有行号也可以打上断点),点击左下角的{ }进行格式化即可出现行号
js代码全挤在一行也可以点击进行格式化,变成更直观的形式
XHR断点
XHR是指XMLHttpRequest,它是一种在网页中进行客户端和服务器之间数据交换的技术。XMLHttpRequest对象允许通过JavaScript发送HTTP请求并接收来自服务器的响应。
当登录验证使用的XHR请求时,可以使用XHR断点
判断是否通过XHR验证登录
f12,点击network,然后输入账密进行登录,如果XHR抓到包则是通过XHR验证登录,可以使用XHR断点
设置XHR断点
记下XHR包的Request URL,图示url包含/portal/user/login
将url的部分写到XHR/fetch BreakPoints中,如/user/login
再次点击登录,发现程序暂停在断点处
事件断点
通过审查元素找到元素绑定的事件,这里只有一个点击事件,所以很可能加密函数就在附近,点击进入js文件
在附近发现了加密函数
进行调试
那一行都是调试可以用到的,但目前我只会用两种:
- 执行至下一个断点
- 跳过断点(不在断点处暂停)
通过调试,可以观察到密码值的变化,可以把鼠标放在元素名上面查看值,也可以通过右边的窗口查看
将函数名选中,将鼠标放在上面还可以查看函数返回值
很显然这里是encrypt(psw)这个函数对输入的密码进行了加密
一个小实验
对某小网站进行js逆向
寻找加密函数
通过network抓包找到密码传输时的字段名password_encrypt
返回登录页,进入source按ctrl+shift+f在所有文件中查找password_encrypt这个字符串
点击搜索结果后进入password_encrypt出现的位置,在可疑的地方打上断点
再次输入账号密码点击登录
通过调试可以明了的看到输入的密码从明文转成密文过程,确定加密函数
进入加密函数
点击后即可跳转到对应的函数
将加密函数整个复制下来,新开一个浏览器窗口在console处粘贴函数后执行,再执行encrypt(psw)看看能不能成功输出密文
第二行报错,创建JSEncrypt()对象出问题了
直接点进去,把整个js代码都复制下来,再把加密函数粘贴到下面后执行,成功输出密文
安装burpsuite拓展JSEncrypter
安装步骤:https://blog.csdn.net/qq1124794084/article/details/115139611
安装phantomjs
安装步骤:https://blog.csdn.net/qq_37245397/article/details/81543450
将js加密函数保存到本地
把刚刚可以输出密文的所有js代码粘贴到本地,名字可以随便起,但是后面要跟文件名对应上
编辑jsEncrypter目录下的phantomjs_server.js
新建批处理文件
方便以后连接phantomjs_server.js
@echo off
set /p var=input phantomjs_server.js path:
phantomjs %var%
pause
保存为1.bat后双击点开,如果成功结果如下图
进入burp使用jsEncrypter
能正常输出密文即可
密码爆破
抓取登录包并send to intruder
由于这网站密码错误5次之后就会锁定账号10分钟,没办法爆破演示,但可以看出是通过这种方式是可以爆破出密码的
有个问题就是不知道怎么用密文对应出明文密码。。(request包的编号对应字典行号)
参考
https://blog.csdn.net/qq1124794084/article/details/115139611
https://blog.csdn.net/a_123_4/article/details/120835977
https://blog.csdn.net/qq1124794084/article/details/115139611
https://blog.csdn.net/qq_37245397/article/details/81543450