select * from users where user_id in(1,2,3,[4]) and [first_name] like '%[t]%' and second_name=[’b’] group by [first_name] order by [1] [desc] limit [1]
,可以做一个通用性较高的payload。
常见的注入点:
Select型:
insert型:
delete型:
update型:
常见的注入点大致有这些。
使用的payload是:
这里先了解一下sqlmap配置中的<where>字段:
其中1和3是我们要使用的字段,1表示直接在原始值后面添加payload,例如原始值为1,使用之后可能就变成了1 xor sleep(5)了,3表示直接替换原始值,如原始值为1,使用之后就变成了xor sleep(5)。
使用xor的好处就在于不管前面的判断是否为真,都会执行的sleep,sleep一旦执行一般就会存在sql注入。
之前sqlmap中大部分均为and 和or类型的注入,但是两者会有个问题,例如
此处如果user_id=1不存在,就不会执行sleep(5)
此处由于3>2恒真,后面的sleep(5)没有执行
使用sleep在insert,update和delete会效果好点。毕竟很多没有回显的。
举例来看:
1:select中的order by 类型注入[desc位置的]
结果检测:
使用了where的3,replace
2:select 中的search类型注入
结果:
3:insert型注入
结果:
4:update型注入
运行语句:
执行结果:
5:delete型注入
执行结果:
运行结果:
常见的注入点:
Select型:
insert into users values (‘1’,[2]’,’3’)
delete from users where id = [‘0’]
update users set first_name = ['admin1'] where user_id=[1]
使用的payload是:
Xor sleep(5)
xor (select(0)from(select sleep(5))v) //select sleep(5)在xor之前执行了, 实际xor执行的时候 只执行了select 0 from v
其中1和3是我们要使用的字段,1表示直接在原始值后面添加payload,例如原始值为1,使用之后可能就变成了1 xor sleep(5)了,3表示直接替换原始值,如原始值为1,使用之后就变成了xor sleep(5)。
使用xor的好处就在于不管前面的判断是否为真,都会执行的sleep,sleep一旦执行一般就会存在sql注入。
之前sqlmap中大部分均为and 和or类型的注入,但是两者会有个问题,例如
Select * from users where 3<2 and sleep(5)
Select * from users where 3>2 or sleep(5)[注意这里没有写成user_id=1的形式]
使用sleep在insert,update和delete会效果好点。毕竟很多没有回显的。
举例来看:
1:select中的order by 类型注入[desc位置的]
结果检测:
使用了where的3,replace
2:select 中的search类型注入
结果:
3:insert型注入
结果:
4:update型注入
运行语句:
执行结果:
5:delete型注入
执行结果:
运行结果: