💉 A03 注入攻击

章节 01-04SQL注入NoSQL命令注入

📌 一句话概括

注入攻击是指攻击者将恶意数据作为代码/命令发送到解释器执行——SQL 注入是最经典的形态,但 NoSQL、OS 命令、LDAP、XML 等同样存在注入风险,核心问题是"数据"被当成了"代码"。

💡 核心原理

① 注入攻击三要素

② 银行系统常见注入面

🔍 测试实战

1. SQL 注入检测

操作:在输入框/参数中注入 ' OR 1=1 --" OR "1"="1; DROP TABLE users -- 等 payload

工具sqlmap(自动化检测)

指标:注入检测率、payload 绕过率、注入点数量

2. NoSQL 注入(MongoDB)

操作:JSON 参数中注入 {"$gt": ""} 绕过查询限制,或 {"$ne": ""} 绕过认证

工具:Burp Suite + 自定义 payload

指标:NoSQL 注入检出率

3. 二阶注入测试

操作:先提交含 payload 的数据(如用户名设为 test' OR '1'='1),在列表页/详情页查看是否触发

评估:二阶注入场景常被忽略,但银行系统中"先存储后展示"的流程很常见

⚠️ 常见坑点

  1. ORM 不是免死金牌:MyBatis/Hibernate 中如果使用 ${} 拼接(而不是 #{} 参数化),依然有注入风险
  2. 存储过程也未必安全:存储过程内部若动态拼接 SQL,同样存在注入点
  3. 只测 SQL 不测其他注入:LDAP 注入、XPath 注入、模板注入(SSTI)在银行系统中同样常见

📖 延伸阅读