利用js文件进行渗透
本文作者:eth10(贝塔安全实验室-核心成员)
当我们访问的站点只是一个简单的登录页面时,我们应充分利用涉及到的JavaScript脚本函数或文件。
0x01 node js站点
(1) 如何判断是JS开发的站
查看登录页面的页面源代码是如下图时,那么可以简单判断本站是一个纯JS开发的站。
另外可以通过cookie来简单判断,如cookie中有connect.sid这个键,如图所示:
(2) 查看重要js文件
查看重要文件,一是寻找配置文件,二是查看app.xxx.js文件。
(3) 查看js配置文件
通过页面源码可以看到是否存在有js配置文件,如图所示:
通过逐个访问js配置文件,可以查看到很多敏感信息,如图:
通过获取的敏感信息,有时可以直接绕过登录进入到系统中,如图:
(4) 查看app.xxx.js文件
app.xxx.js文件是系统主文件,里面可以查看到很多接口,如图:
通过获取的接口信息对应构造请求,如请求方法,header,content-type等。
(5) 构造请求
访问发现缺少必要参数,继续补充参数
最终可直接未授权访问到敏感信息,如图:
对于month格式,app.xxx.js中也有对应接口,如下图:
获取管理员敏感信息
继续尝试别的接口
发现功能树
尝试功能树中的接口,可以直接获取到管理员加密hash密码,如图:
(6) 查找接口技巧
这里提供一个简单的方式,直接在浏览器中Ctrl + F进行下列关键字搜索,对于命中的会有颜色标出。也可以使用python进行页面解析一次性提取等。
搜索关键字:
method:"get"
http.get("
method:"post"
http.post("
0x02 Ajax通用接口写法
(1) 查看重要接口
直接查看源码中的script函数,如果发现$.ajax,那么恭喜你找到了部分接口,可能存在未授权访问。
(2) 构造请求
同样通过获取的接口进行对应构造。
没什么用,本来就是公开的接口,换一个。
发现敏感信息,如图:
还有这种接口。
对应构造请求,如图:
获取账户密码等敏感信息,之前留的图,有点不清晰,不用在意细节。
(3) 查看接口技巧
搜索关键字:
$.ajax
service.httppost
service.httpget
0x03 js加密密码字典生成
当你登录是发现密码是这样的:7ADAB2400D8F864E3EA5F882E124FB17270ADEC2FE75F46C300242FBB0B7D487B505364016E6E555298A3EF48ADD05FB2C93757E8C7317B246366050AA071359
128位,有没有吓到你,其实不用怕,看看如何将你的明文加密成这个,页面源代码发现加密的密钥信息。
通过获取的密钥进行构造,通过get传参,然后python批量请求就可以将你手中的明文字典加密成对应的密文了。
0x04:js登录密码硬编码
如果你登录一个网站时,发现bp抓不了数据包,但是页面提示账户密码错误,那么很大可能密码是写在页面中,通过去js文件中搜索即可获取到账户密码。
其他:
- 当文件上传是通过js前端校验的,那么通过bp抓包或者禁用js即可绕过其限制;
- 当验证码是通过前端校验的,那么通过bp截断即可绕过进行暴力破解;
更多案例请参考以下文章:
- https://www.secpulse.com/archives/35877.html
- https://zhuanlan.zhihu.com/p/79335206
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法