js逆向

在表单爆破密码时经常会出现密码在包里被加密的情况,不能直接用burpsuite+字典进行爆破。这时候需要在网页找出进行加密的js文件,过一遍加密再去爆破。

前端调试

浏览器的source有很多功能:

  1. 设置断点
  2. 进行调试

通过设置断点,调试时可以准确定位到进行加密的函数

断点

普通断点

直接在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文件

在附近发现了加密函数

进行调试


那一行都是调试可以用到的,但目前我只会用两种:

  1. 执行至下一个断点
  2. 跳过断点(不在断点处暂停)

通过调试,可以观察到密码值的变化,可以把鼠标放在元素名上面查看值,也可以通过右边的窗口查看

将函数名选中,将鼠标放在上面还可以查看函数返回值

很显然这里是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