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)

DVWA之SQL注入_第1张图片

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

DVWA之SQL注入_第2张图片

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

DVWA之SQL注入_第3张图片

然后就安装成功了

DVWA之SQL注入_第4张图片

2.2DVWA的搭建

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

DVWA之SQL注入_第5张图片

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

DVWA之SQL注入_第6张图片

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

将p@ssw0rd 修改为 root

DVWA之SQL注入_第7张图片

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

DVWA之SQL注入_第8张图片

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

DVWA之SQL注入_第9张图片

三.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,看到正确返回值

DVWA之SQL注入_第10张图片

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

DVWA之SQL注入_第11张图片

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

DVWA之SQL注入_第12张图片

DVWA之SQL注入_第13张图片

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

(2)判断字段数 order by

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

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

DVWA之SQL注入_第14张图片

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

DVWA之SQL注入_第15张图片

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

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

DVWA之SQL注入_第16张图片

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

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

DVWA之SQL注入_第17张图片

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

DVWA之SQL注入_第18张图片

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

DVWA之SQL注入_第19张图片

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

DVWA之SQL注入_第20张图片

2.medium级别

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

DVWA之SQL注入_第21张图片

DVWA之SQL注入_第22张图片

DVWA之SQL注入_第23张图片

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

DVWA之SQL注入_第24张图片

DVWA之SQL注入_第25张图片所以注入类型为数字类型

(2)判断列数

DVWA之SQL注入_第26张图片

DVWA之SQL注入_第27张图片

我们知道列数为2列

(3)判断回显位置

DVWA之SQL注入_第28张图片我们可以知道回显位置是2

(4)判断数据库

DVWA之SQL注入_第29张图片

(5)判断表名

DVWA之SQL注入_第30张图片

(6)判断列名

DVWA之SQL注入_第31张图片

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

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

DVWA之SQL注入_第32张图片

DVWA之SQL注入_第33张图片

(7)获取数据

DVWA之SQL注入_第34张图片

3.high级别

(1)判断注入类型

DVWA之SQL注入_第35张图片

DVWA之SQL注入_第36张图片

DVWA之SQL注入_第37张图片

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

(2)判断列数

DVWA之SQL注入_第38张图片

DVWA之SQL注入_第39张图片

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

六.SQL Injection (Blind)

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

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

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

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

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

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

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

DVWA之SQL注入_第40张图片

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

sqlmap -r 是对文件进行注入

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

DVWA之SQL注入_第41张图片DVWA之SQL注入_第42张图片DVWA之SQL注入_第43张图片DVWA之SQL注入_第44张图片DVWA之SQL注入_第45张图片DVWA之SQL注入_第46张图片DVWA之SQL注入_第47张图片

1.low级别

(1)我们先进行抓包

DVWA之SQL注入_第48张图片

(2)然后使用sqlmap

DVWA之SQL注入_第49张图片

(3)爆破数据库 --dbs

DVWA之SQL注入_第50张图片

(3)爆破表名 -D ‘dvwa’ --tables

DVWA之SQL注入_第51张图片

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

DVWA之SQL注入_第52张图片

DVWA之SQL注入_第53张图片

(5)爆破数据

DVWA之SQL注入_第54张图片

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

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

你可能感兴趣的:(面试,学习路线,阿里巴巴,sql,安全,数据库,servlet,jvm)