第3章:Web漏洞深度追问与回答框架

本章聚焦渗透测试面试中最高频的 Web 漏洞 题目。面试官不仅考察漏洞原理,更关注你的 实战链路、绕过思路 和 修复建议。掌握结构化回答框架,能让你的表述更自信、更专业。

💡 核心原则:任何漏洞回答都应覆盖 原理 → 检测 → 利用 → 绕过 → 修复 五步闭环。
接收问题 定位漏洞类型 手工+工具验证 绕过WAF技巧 提供修复建议 五步闭环,每步控制在10~15秒,整体回答2分钟左右 面试官心理:有条理 → 有实战 → 有深度 → 有安全意识

高频漏洞知识矩阵

以下表格对比三大经典漏洞的面试核心,帮助快速建立知识肌肉记忆:

漏洞类型 原理关键词 检测方法 利用难度 修复建议
SQL注入 未过滤参数拼接SQL语句 单引号/时间盲注/报错注入 中 参数化查询 <pre><code>prepare</code></pre>
XSS 反射/存储/DOM型 <img src=x onerror=alert(1)> 低(可利用性高) 输出编码 + CSP
文件上传 后缀/Content-Type/MIME绕过 上传webshell + 访问路径 中高(取决于绕过) 白名单后缀 + 图片重编码
🧠 面试官心理:你不需要背出所有细节,但必须展示“我做过、我踩过坑、我知道怎么防”。

🎯 问答卡片 1:SQL注入如何手工检测?

面试问题:请描述如何手工检测一个可能存在SQL注入的GET参数?

面试官考察点:

  • 是否真的一步步手工测过(不仅仅是跑sqlmap)
  • 对闭合、报错、盲注的理解深度
  • 安全意识:能否在先确认注入点再考虑利用

回答框架:

  1. 输入单引号 ' 观察报错或异常
  2. 尝试注释符号 --+ 或 # 判断闭合
  3. 使用 and 1=1 / and 1=2 布尔盲注
  4. 时间盲注 sleep(5) 确认无回显场景
  5. 结合 order by 猜字段数

简短示例回答(约80字):“我首先在参数后加单引号,看是否报错或页面变化;再尝试注释符还原SQL;然后用and 1=1、and 1=2对比页面差异,确认存在布尔注入;若没有回显,我会用sleep(5)做时间盲注确认;最后通过order by确定字段数,为后面union查询打基础。”

可能追问:

  • 如果页面完全无变化(包括时间)怎么办?
  • 遇到WAF拦截单引号,你用什么绕过?
  • 如何区分是注入点还是正常业务参数?
⚠️ 避坑提醒:不要一上来就说“用sqlmap”,手工检测是面试必考点。另外注意不要修改数据库数据(慎用into outfile),展示伦理意识。

🎯 问答卡片 2:存储型XSS与反射型XSS的区别及防御

面试问题:请说明存储型XSS和反射型XSS的本质区别,以及各自的防御要点。

面试官考察点:

  • 是否理解“存储≠反射”的核心是数据持久化
  • 能否结合业务场景说明危害
  • 防御策略是否分层(输入+输出)

回答框架:

  1. 定义:存储型存到数据库/文件,每次访问触发;反射型仅一次请求
  2. 危害:存储型影响所有用户(如论坛),反射型需诱导点击
  3. 输入侧:富文本过滤白名单标签,普通文本HTML实体编码
  4. 输出侧:根据上下文做编码(HTML/JS/URL)
  5. 额外:CSP头部限制脚本来源

简短示例回答(约90字):“存储型XSS把恶意脚本持久化在服务端,比如评论区,每个访问者都会执行;反射型则通过URL参数反射,一次有效。防御上,我对所有用户输入做白名单过滤或实体编码,输出时根据上下文编码,同时配置Content-Security-Policy限制内联脚本。不能只依赖一种方式。”

可能追问:

  • 如果业务需要允许用户输入HTML标签怎么办?
  • CSP如何配置?哪些指令最有效?
  • DOM型XSS和存储/反射有什么关系?
⚠️ 避坑提醒:千万不要说“过滤