[LAB] 攻击模拟 / SQL 注入攻击
注入攻击模拟
SQL注入通过在输入框中注入 SQL 代码片段,操纵原始查询逻辑,绕过验证或窃取数据。 下面模拟一个存在漏洞的登录表单。
漏洞登录表单(攻击视角)
SQL 语句实时解析
实际执行的 SQL:
SELECT * FROM users WHERE username='admin' AND password='anything'
[TIP] 试试这些注入:
用户名输入:
密码随便填,提交后观察 SQL 语句变化!
用户名输入:
admin' OR '1'='1密码随便填,提交后观察 SQL 语句变化!
常见注入技术一览
| 类型 | Payload 示例 | 说明 | 防御方法 |
|---|---|---|---|
| 注释绕过 | admin'-- |
用注释截断后面的密码校验 | 预处理语句 |
| 永真条件 | ' OR '1'='1 |
使 WHERE 条件永远为真 | 预处理语句 |
| UNION 注入 | ' UNION SELECT ... |
联合查询获取其他表数据 | 最小权限 + 预处理 |
| 堆叠查询 | '; DROP TABLE users-- |
执行多条 SQL 语句 | 禁用 multi_query() |
| 宽字节注入 | %df' OR 1=1-- |
绕过 addslashes() 过滤 | 使用字符集过滤 |
[DEFENSE] 安全代码示例(PHP + PDO)
$pdo = new PDO('sqlite:db.sqlite');
$stmt = $pdo->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->execute([$inputUser, $inputPass]);
$user = $stmt->fetch();
// ✅ 输入作为参数绑定,绝不会被当作 SQL 代码执行