本文由AlbertJay创作
原文地址:https://www.freebuf.com/articles/web/400377.html
前言
本篇内容旨在挖掘漏洞实战思路经验分享,希望能够为初涉此领域的爱好者与技术起步者搭建一座桥梁。以平实易懂的语言,引导你逐步了解Web应用逻辑漏洞。从JavaScript的基本信息收集出发,逐渐深入至漏洞发掘和利用,每一步都旨在实践中学以致用。本文也会通过实例分析,展示漏洞的多样形态,也强调安全意识的重要性。无需深厚技术背景,只需对安全保持好奇与热情,这篇实战经验分享将陪伴你开启一段既严谨又富启发性的学习历程,在轻松氛围下掌握逻辑漏洞挖掘的要领,为维护网络环境的安全贡献自己的力量。
一、JS文件收集与分析
HTML Script标签中的JS链接
在网页源代码中,通过<script>标签直接嵌入或引用的JS文件是基础来源。检查源代码(右键 > 查看网页源代码),可发现此类链接。
HTML内嵌JS代码中的链接
有时JS文件链接嵌于其他JS脚本内部,同样需查看源代码以识别这些间接引用。
其他JS文件内的链接
使用浏览器开发者工具(如DevTools的Sources面板)进行全局搜索,可揭示隐藏于其他JS文件中的JS链接。
Source Map文件的利用
若存在未删除的Source Map文件,这可能是获取原始代码的途径。尝试在JS文件URL后添加.map下载,随后可利用工具如reverse-sourcemap进行反编译。
二、敏感信息收集
url:"/api/login"
xxx.post("/api/login", params)
Object(xxx["a"])("/api/login", params)
path:"/user/login"
route.push("/user/login")
案例分享——网站后台权限获取
1、在 JS 文件获取到已经失效的 JWT Token,可了解 JWT Token 的格式
2、在 JS 文件获取到可未授权访问的接口信息,通过接口可获取到用户名、用户id、项目id信息,可用于构造 JWT Token
3、在 JS 文件获取到网盘视频教程的地址和提取码,在产品部署视频中获取到了 JWT Secret
4、通过之前获取到的所有信息,构造了 JWT Token,成功登录了网站后台
三、常见的逻辑漏洞测试
-
用户名、密码爆破
-
登录接口可尝试爆破用户名、密码
-
密码找回接口可尝试爆破用户名
-
存在加密的站点,可尝试执行 JS 代码进行密码爆破
-
短信轰炸
-
登录接口、密码找回接口可尝试短信轰炸
-
可通过在手机号前面添加“0”,在手机号前面或后面添加“ ”、“,”、“;”绕过次数限制
-
存在加密的站点,可尝试执行 JS 代码进行短信轰炸
-
隐藏的注册接口
-
可在“敏感信息收集”步骤获取到的 API 列表、前端路由列表中,查找注册的接口、注册的前端页面,尝试注册
-
可在登录页面查看页面元素,递归展开所有标签,查看是否存在隐藏的注册页面标签
-
即使在前端 JS 等所有文件都没找到注册相关接口页面信息,也可将登录的接口 login、signin 改为 register、signup 测试注册接口是否存在
-
目录爆破
-
可分析“敏感信息收集”步骤获取到的 API 列表,对相关的 API 接口路径进行目录爆破
案例分享——加密接口密码爆破
访问登录页面,并在控制台执行密码爆破的 JS 代码,然后选择字典,即可进行密码爆破
在发送短信的接口处打断点,并在控制台执行短信轰炸的 JS 代码,即可进行短信轰炸
四、未授权漏洞测试
对于常规没有加密、签名限制的站点,可以分别构造 GET 请求包、空请求体的 POST 请求包,使用 BurpSuite 批量遍历“敏感信息收集”步骤获取到的 API 列表,根据响应信息判断 API 接口是否可未授权访问
如果 API 接口可未授权访问,可根据响应信息中的报错信息提示构造具体的请求包
如果响应信息中没有报错的详细信息,可使用 VSCode 或其他 IDE 打开保存所有 JS 的文件夹,通过 API 接口路径进行全局搜索,获取 API 接口的具体参数信息
1、案例分享——API 接口遍历
对于常规没有加密、签名限制的站点,可以分别构造 GET 请求包、空请求体的 POST 请求包,使用 BurpSuite 批量遍历“敏感信息收集”步骤获取到的 API 列表,根据响应信息判断 API 接口是否可未授权访问
前端页面测试
对于存在加密、签名限制的站点,可以浏览器手动访问“敏感信息收集”步骤获取到的前端路由列表,根据页面中能否加载出具体信息判断 API 接口是否可未授权访问
大部分站点,未登录的情况下直接访问前端路由路径,会跳转到登录页面,可尝试下面几种方式使其不再跳转
某些站点会在 JS 代码中定义一个变量,变量中存储了所有未登录情况下可访问的前端路由列表,可使用浏览器 DevTools 的 Sources 面板中 overrides 功能,修改 JS 代码,将所有前端路由加入到这个变量,即可在未登录的情况下访问所有的前端路由页面
某些站点会通过特定 API 接口的响应信息判断当前是否已登录,只需使用 BurpSuite 配置自动修改响应信息,即可伪造成登录的状态,访问所有的前端路由页面
某些站点会通过 localStorage、 sessionStorage 存储的数据判断当前是否已登录,只需分析 JS 代码,在 localStorage、 sessionStorage 构造相应的数据,即可伪造成登录的状态,访问所有的前端路由页面
2、案例分享——前端页面权限测试
某些站点会在 JS 代码中定义一个变量,变量中存储了所有未登录情况下可访问的前端路由列表,可使用浏览器 DevTools 的 Sources 面板中 overrides 功能,修改 JS 代码,将所有前端路由加入到这个变量,即可在未登录的情况下访问所有的前端路由页面
JS 断点手动测试
对于存在加密、签名限制的站点,如果直接访问前端路由路径,会跳转到登录页面,而又没有找到办法阻止其跳转,那么可以使用以下的方式进行手动测试:
在浏览器 DevTools 的 Sources 面板全局搜索登录接口路径如 /api/login,在 JS 中的对应位置打断点
根据调用登录接口的代码格式,构造出调用其他接口的 JS 代码
点击登录,在断点停住后,在 Console 中执行调用其他接口的 JS 代码
在 BurpSuite 查看响应信息,根据响应信息判断 API 接口是否可未授权访问
如果响应信息是加密的,那么需要在 JS 中找到解密的逻辑,在解密的位置打断点,来查看解密后的响应信息
3、案例分享——JS 断点手动测试
在模板下载的接口处打断点,并在控制台执行调用其他接口的 JS 代码,测试其他接口是否可未授权访问
总结
从JavaScript文件的搜集到敏感信息的深度挖掘,这一系列流程展示了如何高效且全面地评估Web应用的安全状况。同时也能配合利用开发工具、自动化测试工具以及手动调试技巧,以发现潜在的安全漏洞和未授权访问点。
原文始发于微信公众号(Ots安全):实战经验分享:Web应用逻辑漏洞挖掘技巧与案例分析
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论