SQL-inject
在学习此部分内容之前,建议先对sql语句进行基本的掌握
1.数字型注入(post)
我们先选择查看一下id为1的用户
之后我们查看上方url,发现没有传参,这便是post型的特点
再次查询前我们抓包,并将其传输到repeater
我们可以大胆猜测此sql语句为
select 字段1,字段2 from 表名 where id = 1
可以看到,我们现在查看到的便是第一个用户的信息,如果我们在id=1后加入or 1=1,也就是永真的条件,再次send,将语句改变为
select 字段1,字段2 from 表名 where id = 1 or 1=1
这样一来网页就会将所有的用户信息全部展示出来
2.字符型注入(get)
我们随机输入一段数字
可以看到,上方的url显示了我们传的参数,所以为get型
若我们正确输入了用户名,就能够成功查询
由于此注入点为字符型,所以我们同样可以猜测一下此sql语句为:
select 字段1,字段2 from 表名 where username = 'kobe';
所以,如果我们同样想在后面加上一个永真条件,可以先用一个单引号将前面的单引号闭合,再用一个#将后面的单引号注释掉,如下所示:
select 字段1,字段2 from 表名 where username = 'kobe' or 1=1#';
所以我们要在输入框中输入的内容为:kobe' or 1=1#
查询后,同样会将所有的信息显示出来
3.搜索型注入
我们可以看到,网页返回了所有用户名中带k的,所以sql语句可能为:
select from 表名 where username like ' %k% ';
通过前面对sql语句的学习,我们可以知道%代表可能没有或者有多个字符,就可以完成对含有k的用户名的查询
所以我们要想办法通过合法的方式闭合此特殊符号,并在后面加上一个永真条件,来返回所有的用户信息
select from 表名 where username like ' %k%'or 1=1 #% ';
于是我们通过k%'来闭合前面的符号,用#注释掉后面的字符,条件成功插入
这样,我们在输入框中输入:k%'or 1=1 #,并查询
可以看到,所有的用户信息再次被网页展示出来
4.xx型注入
通过查询后端代码,我们发现,相较于前面,xx型的多了括号
所以我们在闭合时还应该将括号也闭合掉
') or 1=1#,同样前面的单引号和括号用来闭合,后面的用来注释
点击查询后,我们同样发现所有用户信息被展示出来
5.小结
由上述几种情况不难看出,我们的目的就是闭合掉我们不需要的东西,并注入我们想要看到的,来对网站进行攻击,调取用户的个人信息