思路决定成败:F12给了我黑色的眼睛我却用它来挖洞
字数 1146 2025-08-18 11:37:49
F12开发者工具在手工安全审计中的高级应用
前言
本文基于evil7在FreeBuf上分享的技术文章,详细讲解如何利用浏览器F12开发者工具进行手工安全审计,发现Web应用漏洞。文章包含两个实际案例(已修复),重点介绍审计思路和技术细节。
核心思路
- 源码审计:通过公开资源获取目标相关源码,了解开发习惯
- 流量分析:观察网络请求特征,寻找突破口
- 异常构造:像开发者一样思考,寻找处理异常的点
- 知识储备:熟悉各种技术的基础特性
案例一:FreeBuf主站DOM型XSS漏洞
发现过程
-
流量特征分析:
- 发现按钮包含关键词"wpfpaction"
- 推测与"wpfp"(WordPress Favorite Posts)插件相关
-
源码获取:
- 在GitHub搜索该插件源码
- 发现
wpfp_list_favorite_posts()函数处理用户输入
-
漏洞点定位:
- 发现
$_REQUEST['user']参数未经处理直接输出 - 在FreeBuf测试
/user/myfavorites?user=1接口确认存在
- 发现
-
漏洞利用:
- 构造恶意输入测试XSS
- 确认漏洞存在
修复建议
- 转义用户输入
- 或删除此API接口
案例二:FreeBuf招聘站点的XSS漏洞
发现过程
-
功能测试:
- 访问https://job.freebuf.com
- 点击"更多机会"发现7个可控输入点
-
初步测试:
- 发现2个参数直接返回到页面
- 测试XSS可能性
-
错误分析:
- 使用F12查看错误信息
- 发现jQuery选择器语句错误
- 确认
city参数前端直接处理并拼接到输出
-
绕过技巧:
- 了解jQuery选择器扩展语法
- 构造
$(dom[value])形式payload - 补充缺失的引号完成XSS
技术细节
- 危险实现方式:
$(dom).html(contents) - 选择器带值过滤参考:W3C Selectors Level 3
高级技巧
-
DOM型XSS进阶:
- 使用
#payload方式使攻击仅针对特定用户 - 示例:
eval(atob(location.hash.substr(1))) - 避免payload出现在服务器日志中
- 使用
-
调试技巧:
- 设置断点跟踪JS执行流程
- 通过响应时间判断处理位置(前端/后端)
- 长响应时间可能指示SQL查询参与
总结
-
F12工具的价值:
- 不仅仅是"挂黑页"
- 强大的手工审计工具
- 帮助理解应用内部逻辑
-
白帽思维:
- 不要依赖扫描器
- 培养手工审计能力
- 积累基础知识(如jQuery选择器特性)
-
审计方法论:
- 从流量特征入手
- 寻找源码辅助分析
- 构造异常测试边界条件
- 系统化跟踪数据流
通过本文的技术细节和案例学习,安全研究人员可以提升手工审计能力,发现更多自动化工具无法检测的漏洞。