Hetian lab Day 9 DVWA一:SQL注入

文章目录

  • 背景介绍
  • 实验环境
  • 实验目的
  • 实验步骤
    • 步骤一
    • 步骤二
    • 步骤三
  • 课后习题
  • 分析与思考
  • 参考文档

背景介绍

微软对SQL注入的介绍:

  1. 脚本注入式的攻击
  2. 恶意用户输入用来影响被执行的SQL脚本

SQL注入产生的直接原因是拼凑SQL,实质就是将恶意的SQL代码注入到特定字段用于实施拖库攻击等。
防御方式主要有三种:

  1. 字符串检测:限定内容只能由英文、数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝。但缺点是,系统中不可避免地会有些内容包含特殊字符,这时候总不能拒绝入库。
  2. 字符串替换:把危险字符替换成其他字符,缺点是危险字符可能有很多,一一枚举替换相当麻烦,也可能有漏网之鱼。
  3. 存储过程:把参数传到存储过程进行处理,但并不是所有数据库都支持存储过程。如果存储过程中执行的命令也是通过拼接字符串出来的,还是会有漏洞。

实验环境

服务器:win2003+DVWA IP地址:10.1.1.174

测试者:win7,IP地址随机

实验目的

通过该实验熟悉SQL注入的原理和基本利用方法。

实验步骤

步骤一

实验思路:

  1. 找注入并确认(经典的and 1=1 and1=2)
  2. 查询基本信息(数据库类型、数据库名、应用程序类型以及系统类型)
  3. 查表名、字段名,拿到想查询的内容

username:admin
password:password
low等级:User ID为1时正常回显
Hetian lab Day 9 DVWA一:SQL注入_第1张图片
low等级:User ID为1 and 1=1时正常回显
Hetian lab Day 9 DVWA一:SQL注入_第2张图片
low等级:User ID为1 and 1=2时报错
Hetian lab Day 9 DVWA一:SQL注入_第3张图片
这里直接返回了首页,和and 1=1返回的页面不一样,原理是把测试语句代入到了数据库查询,and就是逻辑运算,1=1为真,1=2为假,所以返回不同,要自己去理解。还有好多其他测试方法,这里不再讨论,先理解这两个就行。
根据上面的测试过程,最终要求你拿到数据库的用户名和密码。首先通过报错拿到数据库名等基本信息,然后是表名列名,再拿到数据库。第一步先得到字段数。

现在基本可以说这里存在注入点,下面就是一步一步拿到数据库。

步骤二

利用查询语句找出字段

low等级:User ID为1 order by 2#时正常回显
Hetian lab Day 9 DVWA一:SQL注入_第4张图片
low等级:User ID为1 order by 3#时报错,说明只有两个字段。
Hetian lab Day 9 DVWA一:SQL注入_第5张图片
由此, 字段数已经判断出来,下面如何进一步判断数据库名和用户名等基本信息。
利用语句查询知道有两个字段,接着查询数据库名和用户。
查询数据库等基本信息。

 UNION SELECT 1,CONCAT_WS(CHAR(32,58,32),user(),database(),version())

在这里插入图片描述

步骤三

如果是Mysql数据库,更多时候要用到它的系统函数,有时候可以达到事半功倍的效果。
查询表段:

union select 1,table_name from information_schema.tables where table_schema=0x64767761(数据库的十六进制)

Hetian lab Day 9 DVWA一:SQL注入_第6张图片

查询列名。

union select 1,column_name from information_schema.columns where table_name=0x7573657273(表的十六进制) and table_schema=0x64767761(数据库的十六进制)

在这里插入图片描述

课后习题

Hetian lab Day 9 DVWA一:SQL注入_第7张图片
Hetian lab Day 9 DVWA一:SQL注入_第8张图片
Hetian lab Day 9 DVWA一:SQL注入_第9张图片
【解析】数据存储目录

分析与思考

  1. 注入分为哪几种类型?分类依据是什么?是否唯一?
    SQL注入的类型不唯一喔。
  • 按注入位置
    1、GET请求
    2、POST请求
    3、HTTP头
    4、cookie
  • 按返回结果
    1、time-based blind SQL injection
    2、union query SQL injection
    3、error-based SQL injection
    4、boolean-based blind SQL injection
    5、stacked queries SQL injection
  • 按参数类型
    1、数字型注入
    2、字符型注入
    3、搜索型注入
  1. 普通注入和盲注的区别是什么?利用方法有什么不同?
    SQL普通注入也可以叫SQL显错式注入,因为我们可以根据报错从而达到进入注入的正轨。
    盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。

  2. 尝试自己做出以SQL注入为中心的头脑风暴图。
    SQL注入导图

参考文档

1、SQL普通注入和SQL盲注的区别

你可能感兴趣的:(合天实验室,数据库,SQL)