Web安全 | Java-SQL注入实战
字数 1301 2025-08-18 11:39:30
Java-SQL注入与XXE攻击实战教学文档
一、SQL注入基础
1. SQL语言分类
SQL(结构化查询语言)主要分为三类:
- DDL(数据定义语言):create, alter, drop, truncate
- DML(数据操作语言):select, insert, update, delete
- DCL(数据控制语言):grant, revoke
2. SQL注入原理
SQL注入攻击通过攻击者提交包含恶意代码的数据到应用程序,应用程序将提交恶意数据当作SQL交给数据库服务执行,从而导致攻击者控制数据库服务执行。
典型注入场景:
// 用户登录流程SQL
$sql = 'SELECT * FROM user WHERE name="' + $_POST['name'] + '" AND password="' + $_POST['password'] + '"';
// 用户查询流程SQL
$sql = 'SELECT * FROM user WHERE id=' + $_POST['id'];
$sql = 'SELECT * FROM user WHERE desc="' + $_POST['desc'] + '"';
二、SQL注入利用方式
1. 基本注入Payload示例
-
万能密码绕过登录:
name: " or 1=1 #生成SQL:
SELECT * FROM user WHERE name="" or 1=1 #" AND password=""实际执行:
SELECT * FROM user WHERE name="" or 1=1 -
查询所有数据:
id: 1 or 1=1生成SQL:
SELECT * FROM user WHERE id=1 or 1=1 -
字符串注入:
desc: " or "1"="1生成SQL:
SELECT * FROM user WHERE desc="" or "1"="1" -
删除表攻击:
name: ";drop table user; #生成SQL:
SELECT * FROM user WHERE name="";drop table user; #" AND password=""实际执行:
SELECT * FROM user WHERE name="";drop table user;
2. SQL注入分类
- 整数型注入:拼接在SQL中的数据为整数类型
- 字符串型注入:拼接在SQL中的数据为字符串类型
- 特殊字符注入:利用注释符、SQL分隔符(;)、运算符(+, ||)、数据库函数(char)等
- 盲注:不能直接通过错误回显和输出结果判断注入
盲注技术详解
基于内容的盲注:
- 针对数据存在的请求:
- 整数类型:拼接
AND 1=1和AND 1=2 - 字符串类型:拼接
' AND '1' = '1和' AND '1' = '2
- 整数类型:拼接
- 针对数据不存在的请求:
- 使用
OR逻辑判断
- 使用
利用方式示例:
AND substring(@@version, 1, 1) = '8'
OR substring(@@version, 1, 1) = '8'
基于时间的盲注:
sleep(n); --
Order By盲注:
order by (case when (条件) then 字段1 else 字段2 end)
三、SQL注入防御措施
- 使用静态SQL语句
- 使用参数化查询SQL(预处理方式)
- 使用安全的存储过程(禁止在存储过程中拼接SQL字符串)
- 数据参数检查:
- 数据是否为空
- 数据格式(类型格式和正则格式)
- 数据范围(大小、长度、可选值)
四、XXE(XML外部实体注入)
1. XML基础结构
- XML声明
- XML文档定义类型:
- XML约束
- XML实体(内部实体、外部实体、参数化实体)
- XML文档
2. XXE攻击原理
当XML解析器在解析引用外部实体时,可能导致:
- 数据泄露
- 拒绝服务
- SSRF(服务器端请求伪造)
- 端口扫描
- 远程代码执行
3. XXE攻击方式
- 获取服务器目录或文件
- 拒绝服务攻击
- 盲注(数据无回显时将数据发送到远程攻击服务器)
4. XXE防御措施
- 设置XML解析器禁用DTD
- 设置XML解析器禁用外部实体
- 验证HTTP头中的content-type及accept
- 过滤提交数据中的
<!DOCTYPE和<!ENTITY
五、实战题目解析
- SQL Injection 07
- SQL Injection 08
- SQL Injection(advanced) 03
- SQL Injection(advanced) 05
- SQL Injection(mitigation) 08
- XXE 03
- XXE 04
- XXE 07
六、安全注意事项
重要声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!