WEB攻防-JS审计技巧

文章介绍了JS在WEB攻防中的作用,包括作用域和调用堆栈的概念,以及如何通过全局搜索、断点调试(流程断点、标签断点、XHR断点)来分析JS加密逻辑。通过实例展示了登录算法的逆向过程,利用BurpSuite和JS插件进行加密算法的复现与爆破测试。
摘要由CSDN通过智能技术生成

WEB攻防-JS系列

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

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

在这里插入图片描述

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

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

在这里插入图片描述

3、常见分析调试:

-代码全局搜索

-文件流程断点

-代码标签断点

-XHR提交断点

edge在这里插入图片描述

firefox

在这里插入图片描述

4、为什么要学这个?

-针对JS开发应用

-密码登录枚举爆破

-参数提交漏洞检测

-泄漏URL有更多测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

js加密,发到服务器,然后进行相关的解密,在处理数据。

服务器收到的不是加密内容,直接就不执行了。

所以要找到对应的JS加密

环境准备

下载phantomjs并设置环境变量
https://phantomjs.org/download.html

知识点

JavaScript-作用域&调用堆栈

JavaScript-断点调试&全局搜索

JavaScript-Burp算法模块使用

项目案例

JS逆向-登录算法

全局搜索法+三断法,即流程断点、标签断点、XHR断点

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

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

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

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

全局搜索法

看到路径,CTRL+SHIFT+F,全局搜索/Vip/LoginResult

在这里插入图片描述

找到相关的代码,只有中间一个剩下的都是注释文件。向上翻,能够看到加密方式

在这里插入图片描述

在这里插入图片描述

搜索encrypt,看到了js的加密库。

在这里插入图片描述

看到声明格式,var encrypt =new JSEncrypt()。按照这个格式尝试生成,生成加密的数据。

如果这个地方换成paylaod的进行生成,那么服务器也可以接收到payload

在这里插入图片描述

流程断点法

当点击登陆时,发起程序下的请求调用堆栈,从下向上为依次加载js的顺序,可以看到js的参与顺序。

在这里插入图片描述

CTRL+鼠标左键是可以跟进去的

在这里插入图片描述

在定位到的地方打一个断点,重新登录

在这里插入图片描述

移动到logindata上,发现数据已经被加密。

证明是从(匿名)-》Login中被加密的

在这里插入图片描述

在这里插入图片描述

翻到上面代码其实就明白了…当我们移到上边会看到引用的JS文件…在这里插入图片描述

在这里插入图片描述

再发起程序较少时使用~~~

标签断点法

通过标签进行断点。不过这个站点不支持这个做法,换一个。

在这里插入图片描述

点击登录,进行调式。不过会发现太多的请求了。这边跳的地方不对。

在这里插入图片描述

在这里插入图片描述

手工看代码就完了

在这里插入图片描述

在这里插入图片描述

XHR断点法

在这里插入图片描述

选取特有地址,/Vip/LoginResult,然后XHR提取断点

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

断点执行过程,拉出来js文件

在这里插入图片描述

在这里插入图片描述

找一个在线执行js的文件进行测试

o的参数在js断点过程中有看到

在这里插入图片描述

https://www.wetools.com/js-run

在这里插入图片描述

使用xhr断点调试,把as/user/login作为xhr断点规则

在这里插入图片描述

在这里插入图片描述

点击登录后,开始从堆栈分析

在这里插入图片描述

一个个开始寻找,处于加密过程中

在这里插入图片描述

根据这个规则,去进行加密,那么服务器一定会去执行

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

burpsuite本身有base64等操作,结合插件测

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

https://phantomjs.org/download.html

并追加到环境变量

2、BurpSuite加载jsEncrypter插件

https://github.com/c0ny1/jsEncrypter/releases

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

添加插件进入bp,并对下边的文件进行配置

在这里插入图片描述

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');	//引入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、正常设置发包后选择引用插件选项

burp抓一下那个包,然后发到爆破模块下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTKY9Znl-1689001602777)(C:\Users\86184\AppData\Roaming\Typora\typora-user-images\image-20230710192850704.png)]

选个大字典爆破试一下,使用插件

在这里插入图片描述

效果

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值