DVWA之SQL注入

一.DVWA介绍

1.1 DVWA简介

DVWA是一款基于PHP和MYSQL开发的web靶场练习平台,集成了常见的web漏洞如sql注入,XSS,密码破解等常见漏洞。旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

1.2 DVWA模块

DVWA共有十个模块:

    Brute Force(暴力(破解))

    Command Injection(命令行注入)

    CSRF(跨站请求伪造)

    File Inclusion(文件包含)

    File Upload(文件上传)

    Insecure CAPTCHA (不安全的验证码)

    SQL Injection(SQL注入)

    SQL Injection(Blind)(SQL盲注)

    XSS(Reflected)(反射型跨站脚本)

XSS(Stored)(存储型跨站脚本)

1.3 DVWA 安全级别

一般情况下,DVWA一共有四种安全级别,分别为:

Low、Medium、High、Impossible

二.DVWA的搭建

2.1 phpstudy的搭建

phpstudy下载地址小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn)

下载完后双击压缩包中的应用程序

选择路径,这里我存储在D盘中

然后就安装成功了

 

2.2DVWA的搭建

DVWA的官网DVWA - 该死的易受攻击的Web应用程序

 将其解压到PHPstudy路径下的PHPTutorial下的WWW目录下

解压后进入DVWA下的config文件打开config.inc.php文件

将p@ssw0rd 修改为 root 

然后在浏览器中访问http://127.0.0.1/DVWA-master/setup.php,然后点击网站下方的Create/Reset Database按钮

 接着会跳转到DVWA的登录页面默认用户名:admin 默认密码:password 成功登录

 三.SQL注入漏洞

3.1 SQL注入原理

  就是通过把恶意的sql命令插入web表单递交给服务器,或者输入域名或页面请求的查询字符串递交到服务器,达到欺骗服务器,让服务器执行这些恶意的sql命令,从而让攻击者,可以绕过一些机制,达到直接访问数据库的一种攻击手段。

3.2 SQL注入分类

(1)数字型        (2)字符型       (3)报错注入     (4)Boollean注入                (5)时间注入

3.3 SQL注入思路

(1).判断是否存在注入,注入是字符型还是数字型

(2).猜解SQL查询语句中的字段数

(3).确定回显位置

(4).获取当前数据库

(5).获取数据库中的表

(6).获取表中的字段名

(7).得到数据

3.4 SQL注入绕过方法

(1)注释符号绕过         (2)大小写绕过         (3)内联注释绕过

(4)特殊编码绕过         (5)空格过滤绕过       (6)过滤or and xor not 绕过

四.SQL注入漏洞的分析

4.1 定义

SQL注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。

4.2 原因

SQL 注入漏洞存在的原因,就是拼接SQL参数。也就是将用于输入的查询参数,直接拼接在SQL语句中,导致了SQL注入漏洞。

web 开发人员无法保证所有的输入都已经过滤

攻击者利用发送给服务器的输入参数构造可执行的 SQL 代码(可加入到 get 请求、 post 谓求、 http 头信思、 cookie 中)

数据库未做相应的安全配置

五.SQL Injection

1.low级别

(1)判断注入类型,是数字型注入,还是字符型注入

我们输入1,看到正确返回值

 我们输入1',看到报错了

 我们可以猜出到是字符型注入,我们继续输入1' and '1' ='1和1' and '1'='2。

 我们根据id=1’报错和id=1’ and ‘1’=’1正确,我们可以知道是字符型注入,查看源代码知道就是字符型注入。

(2)判断字段数                                     order by 

我们使用order by 进行判断字段数, 至到order by 进行报错时候就是字段数

id=1' order by 1#没有报错

 id=1' order by 2# 没有报错

 id=1' order by 3#时报错了,说明字段只有2列

(3)判断回显位置                       union select 1,2#

 可以知道回显位置 在这二个地方

(4)判断数据库                                     union select 1,database()#

(5)获取表名          1'  union select 1,group_concat(table_name) from information_schema.tables where 获取字段名 tables_schema=database()#

 (6)获取字段名                  1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

(7)获取数据    1' union select user,password from users # 

 2.medium级别

(1)判断注入类型     我们可以看到无法输入数字,所以我们进行抓包在bp中进行SQL注入

 我们输入id=1' and '1'='1看见报错了,输入id=1 and 1=1没有报错。

 所以注入类型为数字类型

(2)判断列数

 我们知道列数为2列

(3)判断回显位置   

我们可以知道回显位置是2

(4)判断数据库

(5)判断表名

 (6)判断列名

 我们输入users之后,发现没有如何反应

通过源代码我们可以知道,发现它对单引号进行了转义,我们采用16进制绕过,得知users的十六进制为 0x75736572

 (7)获取数据

 3.high级别

(1)判断注入类型

 我们可以知道是字符型注入

(2)判断列数

 列数为2列,我们可以发现high级别和low级别的步骤是一样的,所以我在这里就不写了,可以参考low级别的步骤就行了

六.SQL Injection (Blind)

我们在讲SQL Injection (Blind)之前,先讲一下什么是sqlmap注入。

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等。

Sqlmap采用了以下5种独特的SQL注入技术

  • 基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入
  • 基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
  • 联合查询注入,在可以使用Union的情况下注入
  • 堆查询注入,可以同时执行多条语句时的注入

Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。

sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!

我们可以使用 -h 参数查看sqlmap的参数以及用法,sqlmap  -h

 sqlmap的使用方法:sqlmap -u  url 是对网站进行注入  

                                sqlmap -r  是对文件进行注入       

这里我们对SQL Injection的low级别进行sqlmap,具体过程我写在了图片上面

1.low级别

(1)我们先进行抓包

 (2)然后使用sqlmap

 (3)爆破数据库              --dbs

 (3)爆破表名                             -D 'dvwa' --tables

 (4)爆破字段名    -D 'dvwa'  -T ' guestbook' --columns

 (5)爆破数据

 后面的我们都可以使用sqlmap进行注入,所以后面的就在这里不讲解了。

你可能感兴趣的:(sql,web安全,数据库)