一、研究背景
-
背景介绍
SQL注入是一种常见且高危的Web安全漏洞。攻击者可以通过构造恶意SQL查询语句来绕过验证机制,执行未授权操作,如获取敏感信息、篡改数据库内容甚至控制服务器。 -
研究内容
本笔记探讨以下数据库的手工注入技术:- MySQL
- Access
- MSSQL
- Oracle
覆盖了联合查询注入、报错注入、盲注注入、UA注入、Referer注入、DNSLOG外带、Cookie注入、宽字节注入、堆叠注入等方法。
-
相关研究
目前的主要研究集中在SQL注入的检测和防御技术:- 参数化查询:避免动态拼接用户输入。
- 输入验证:严格过滤SQL关键字符。
- 输出编码:对输出数据进行编码以防止攻击扩散。
二、SQL注入技术详解
1. MySQL注入
-
联合查询注入
- 利用
UNION
操作符,将多条SELECT
语句的结果合并。 - 步骤:
- 判断列数:利用
ORDER BY
语句逐步增加字段数,观察是否报错。 - 构造查询:如:
UNION SELECT 1,2,3--
,逐步替换为敏感数据字段。 - 获取数据:在显示字段中插入
database()
、version()
等函数查看信息。
- 判断列数:利用
- 利用
-
报错注入
- 方法:利用MySQL特性,构造错误表达式来暴露数据。
- 示例:
EXTRACTVALUE(1, 'XPath语法错误')
或UPDATEXML(1, 'XPath错误', 1)
。
- 示例:
- 方法:利用MySQL特性,构造错误表达式来暴露数据。
-
盲注注入
- 布尔盲注:通过页面返回的不同响应判断数据。
- 示例:
AND (SELECT 'a'='a')--
页面正常;AND (SELECT 'a'='b')--
页面异常。
- 示例:
- 时间盲注:利用
SLEEP()
函数延迟判断。- 示例:
IF(条件, SLEEP(5), 0)--
。
- 示例:
- 布尔盲注:通过页面返回的不同响应判断数据。
-
其他技术
- UA/Referer注入:通过修改HTTP请求头进行注入。
- DNSLOG外带:将数据通过DNS请求传出。
- Cookie注入:在
Cookie
参数中嵌入注入语句。 - 宽字节注入:利用GBK编码将字符解码为SQL语句。
- 堆叠注入:通过分号
;
执行多条SQL语句。
-
Getshell
- 目标:利用文件读写权限获取Webshell。
- 方法:
LOAD_FILE()
读取敏感文件,或INTO OUTFILE
写入后门文件。