JS应用

JS应用
EZL1NGJS应用
作用域(本地&全局)
运行后相关的数据值
调用堆栈(由下到上)
是代码的执行逻辑顺序
常见分析调试
- 代码全局搜索
- 文件流程断点
- 代码标签断点
- XHR提交
用途
- 针对JS开发应用
- 密码登录枚举爆破
- 参数提交漏洞检测
- 泄漏URL有更多测试
JS逆向
登录算法
流程&全局搜索
- 流程断点:审查元素抓网络请求包发起程序
- 全局搜索:通过抓包参数名进行代码全局搜索
标签&XHR断点
- 标签断点:审查元素对应标签按钮加入断点
- XHR断点:审查元素源代码加入XHR断点配置
BurpSuite插件应用
下载phantomjs并设置环境变量 https://phantomjs.org/download.html
BurpSuite加载jsEncrypter插件 https://github.com/c0ny1/jsEncrypter/releases
对逆向的加密算法提取JS文件及代码
将代码写入到模版中(引用JS和调用加密-phantomjs_server.js)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20var 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;
}运行刚写入的模版文件后插件连接测试
1
phantomjs phantomjs_server.js
正常设置发包后选择引用插件选项
反调试
什么是反调试?
实现防止他人调试、动态分析自己的代码
如何检测反调试?
- 键盘监听(F12)
- 检测浏览器的高度插值
- 检测开发者人员工具变量是否为true
- 利用console.log调用次数
- 利用代码运行的时间差
- 利用toString
- 检测非浏览器
如何绕过反调试?
- 禁用断点法
- 条件断点法
- 此处暂停法
- 置空函数法
- 本地覆盖法
混淆加密
- 开源代码混淆解密 JJEncode AAEncode JSFuck https://www.sojson.com/
- 商业代码混淆解密 https://www.jsjiami.com/ https://jsdec.js.org/
JS安全泄露
- 会增加攻击面(URL、接口,分析调试代码逻辑)
- 敏感信息(用户密码、ak/sk、token/session)
- 潜在危险函数(eval、dangerallySetInnerHTML)
- 开发框架类(寻找历史漏洞Vue、NodeJS、Angular 等)
打包器Webpack:PackerFuzzer AK/SK
云安全利用:工具箱CF(云安全后续会讲更多)
浏览器插件:Pentestkit FindSomething Wappalyzer(前期的JS 收集项目)










