【JS逆向篇上】算法逆向&断点调试&BP插件

前置知识

1、作用域:(本地&全局)

简单来说就是运行后相关的数据值

2、调用堆栈:(由下到上)

简单来说就是代码的执行逻辑顺序

3、常见分析调试:

-代码全局搜索

-文件流程断点

-代码标签断点

-XHR提交断点

4、为什么要学这个?

-针对JS开发应用

-密码登录枚举爆破

-参数提交漏洞检测

-泄漏URL有更多测试

小知识点

JS逆向-流程&全局搜索-登录算法

流程断点:审查元素抓网络请求包发起程序

全局搜索:通过抓包参数名进行代码全局搜索

JS逆向-标签&XHR断点-登录算法

标签断点:审查元素对应标签按钮加入断点

XHR断点:审查元素源代码加入XHR断点配置

JS逆向-结合BurpSuite-插件引用

1、下载phantomjs并设置环境变量

Download PhantomJS

2、BurpSuite加载jsEncrypter插件

Releases · c0ny1/jsEncrypter · GitHub

3、对逆向的加密算法提取JS文件及代码

JSEncrypt.js

var r = new JSEncrypt,

o = "xxxxxxxxx";

r.setPublicKey(o);

var s = r.encrypt(password)

return s

4、将代码写入到模版中(引用JS和调用加密)

var wasSuccessful = phantom.injectJs('JSEncrypt.js');

function encrypt(password){

var r = new JSEncrypt,

o = "xxxxxxxxx";

r.setPublicKey(o);

var s = r.encrypt(password)

return s

}

// 处理函数

function js_encrypt(payload){

var newpayload;

/**********在这里编写调用加密函数进行加密的代码************/

var newpayload=encrypt(payload)

/**********************************************************/

return newpayload;

}

5、运行刚写入的模版文件后插件连接测试

phantomjs xxxxx.js

6、正常设置发包后选择引用插件选项

实战分析

JS逆向-流程&全局搜索-登录算法

1、在这里进行的加密算法

2、找到他的路径

3、这里的路径为/Vip/LoginResult,接着我们拿去全局搜索一下,ctrl+shift+F(我们可以去搜索关键词,也可以去搜索路径)

4、找到了这个地方

5、接着去追溯一下代码

logindata.UserName = encodeURI(encrypt.encrypt(numMobile));

可以看到是这地方加密的

6、我们先找下encrypt的声明函数

7、找到后我们去控制台调试一下

先创建对象,在调试值

发现这里是加密成功了的

JS逆向-标签&XHR断点-登录算法

1、文件流程断点

就是执行代码加载了哪些文件,就是请求发送的时候看哪些js参与过发包

这里的调用堆栈是从下到上的一个流程

一般我们都是看中间,这里的ajax是用来发送的,login是用来登陆的,所以我们重点去看login

1.1、点击js

1.2、他来到了这里

1.3、接着我们下断点去调试(先下断点在点击登陆)

1.4、我们发现到这里其实是以进加密好的了,所以我们去前面追溯

1.5、我们在看这边,看调用堆栈Login的时候是以进加密好的了,所以我们去找他前面的

1.6、点击ctrl和单机提交数据,接着我们还是像前面一样分析追溯代码

看(匿名这里)和Login之间的代码(主要是找密文出现和密文没出现之间的代码)

1.7、我们找到这里后点击js看一下

这就是加密算法的来源文件

找到之后就和之前一样去控制台调试一下

这适用于网站文件加载较少的情况

2、代码标签断点

2.1、右键登陆后点检查

2.2、在到登陆这段代码右键,点击发送中断的条件在把子树修改和属性修改给选上

2.3、接着点击登陆之后,发现这里就密码做了加密

2.4、一般来说这里只到数据提取,还没有到数据加密我们向下执行

2.5、我们需要一步一步的找到加密的地方,所以不推荐使用标签断点

3、XHR提交断点(xml、http、request)

3.1、(前提)首先抓到包了,判断这里是不是xhr类型的

3.2、然后选择这里代表性的,不能选随机的,要选固定的。

3.3、接着去源代码下断点

3.4、在点击登陆,找到加密算法这一部分

接着和之前一样,找到加密之前的加密算法,进行后续的操作。

JS逆向-结合BurpSuite-插件引用

1、在线网站调试

1.1、我们通过流程断点找到这里,发现在这已经做好了加密,所以我们去上面查代码

//这行代码创建了一个 JSEncrypt 对象实例 r。JSEncrypt 是一个 JavaScript 库,用于 RSA 加密。o 变量被赋值为 C.RSACODE,这里的 C.RSACODE 是一个存储 RSA 公钥的常量。
var r = new JSEncrypt, o = C.RSACODE;
//这行代码将之前定义的 RSA 公钥 (o) 设置到 JSEncrypt 实例 r 中,以便后续使用这个公钥进行加密操作。
r.setPublicKey(o);
//s 变量被赋值为加密后的结果。r.encrypt(a) 使用 JSEncrypt 实例 r 的公钥加密变量 a 的值。
//l 变量被赋值为 this.props.actions,它通常指代组件的 props 中的 actions 属性,用于访问组件的操作或方法。
var s = r.encrypt(a), l = this.props.actions;

1.2、我们把r.encrypt('labi')这个值拿出来调试一下发现加密成功,验证我们前面的逻辑并没有错

1.3、我们找到加密js这里,进去保存到桌面

1.4、可以先找一个在线运行js,这里发现是运行成功的

2、burpsuit插件引用

2.1下载phantomjs并设置环境变量

Download PhantomJS

复制这个路径

到系统环境里配置一下

2.2、BurpSuite加载jsEncrypter插件

Releases · c0ny1/jsEncrypter · GitHub

把这个插件导进burpsuit

2.3、把刚刚保存的js放到这个目录

2.4、打开phantomjs_server.js

2.5、主要修改这两部分,之后进行保存

2.6、在jsEncrypter.0.3.2目录上cmd后输入:

phantomjs phantomjs_server.js

2.7、可以看到这里开启成功

2.8、点击连接后在点击Test,发现执行成功

2.9、配置好了接着我们进行实战演示一下

先输入账号密码抓登陆包

放入intruder模块中=》选中要加密的地方=》添加payload

点击payload加载要爆破的字典

点击payload处理添加=》选择调用burp插件=》选择我们用到的插件=》开始攻击

加密成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值