DVWA通关教程

brute force

首先我们看到第一关,这一关其实讲的是万能密码的使用,我们可以看到他的代码

DVWA通关教程_第1张图片

我们看到第12行,他的语句是select * from 'user' where user = '$user' AND password='$pass';

然后我们将我们刚刚输入的账号和密码放到这个语句中看看

Select * from 'user' where user = admin' and 1=1# AND password=' ';

在PHP中#相当于是注释的符号,也就是说#号后面的语句已经被注释掉了,我们现在密码那一行中不管输入什么东西都可以登录成功。这其实也是万能密码的用法。

然后我们在来讲一下关于逻辑运算符的一些知识点吧。

and和or这两个是我们在万能密码中常用的两个逻辑运算符。

and表示:如果两个表达式都为真,则返回true。

or表示:如果任意一个表达式为真,则返回ture。

我们现在将难度调到medium,然后我们在分析一下源代码。

DVWA通关教程_第2张图片

我们看到mysqli_real_escape_string这个函数,这个函数在username和password中都用来一次,他的作用是用来预防sql注入的,他将MySQL中的特殊字符都进行了转义,以此方法来达到预防sql注入的功能。

其实按正常的逻辑来讲的话,更具这一章的名字,暴力破解,我们其实可以是使用burpsuite中的爆破米快进行密码爆破。理论存在,实践开始。

bp抓包因该不用太过于的细讲了,配置一下代理,然后开始抓包

DVWA通关教程_第3张图片

然后我们发送到爆破模块,配置一下爆破字典,然后开始爆破。

DVWA通关教程_第4张图片

得到密码,然后我们就可以登录成功。

DVWA通关教程_第5张图片

command injection

这一章是关于命令注入的知识点,源代码是这样的:

DVWA通关教程_第6张图片

我们看到问题,题目要求我们输入ip

DVWA通关教程_第7张图片

发现出现了类似于cmd里面的一些东西,虽然是乱码,但是可以看出是ping通了,然后我们就可以开始构造payload的了:

127.0.0.1 | whoami 查看一下权限,发现现在是管理员权限。

我们切换到medium,查看一下源代码,发现存在过滤

DVWA通关教程_第8张图片

但是并没有过滤| 所以我们还是可以进行命令注入的。

构造payload:

127.0.0.1|whoami

我们看到high:

查看一下源代码,发现过滤了很多的一些符号。

DVWA通关教程_第9张图片

但是如果我们细看的话,|的后面有一个空格号,所以我们其实也是可以利用命令注入的,所以我们可以这样构造payload:

127.0.0.1|whoami

然后可以发现系统当前的权限:

file inclusion

这一章是讲的文件包含漏洞的,这个漏洞如果处理的不好,可能会造成隐私文件泄露。

但是这个漏洞的前提是要打开allow_url_fopen和allow_url_include。

我们看到靶场页面。

将等级切换到low,然后我们查看一下页面的源代码:

DVWA通关教程_第10张图片

发现没有进行过滤,我们只需要传入参数就可以了。

DVWA通关教程_第11张图片

我们打开这三个文件,看看里面有什么内容

DVWA通关教程_第12张图片

DVWA通关教程_第13张图片

DVWA通关教程_第14张图片

发现没有什么重要的东西,我们将url中的参数更改一下,比如我们查看一下他的/etc/passwd文件。

出现了报错,但是他也把他的路径给显示出来了,我们切换到靶机,在靶机的www目录创建一个muma.php文件,但是我们要构造的是相对路径而不是绝对路径,因为在比赛的靶场中,一般是将相对路径爆出来,不会爆绝对路径,然后我们就需要使用../来构造相对路径,“..”是退回到上一个目录

发现查看到了,因为没有进行过滤,所以我们可以查看任何的东西

我们在切换到medium

DVWA通关教程_第15张图片

我们可以看见他将../,..\,http://,https://都转换为了空字符。

我们在尝试使用../../来读取一下我们的php.ini文件

发现读取失败。然后我们尝试双写http://来进行绕过

发现可以得到,然后我们在尝试读一下我们的木马文件

读取成功

难度切换到high:

DVWA通关教程_第16张图片

我们发现也是存在过滤的,我们看到if那一条代码,意思是这样的,如果说我们查看的文件没有file或者include.php这两个字符串就会报错。

我们可以这样绕过,因为我们读取的是php.ini这个配置文件,所以我们可以在page的后面加上file://字段,他也是可以的取到文件的

所以我们就可以这样构造payload。

file upload

本章讲的是文件上传漏洞,老规矩,先看源代码:

DVWA通关教程_第17张图片

貌似没有过滤,我们也许是可以直接上传一个php文件给他,然后在通过菜刀来获得他的权限,因为他直接把他文件的位置都给爆出来了。

然后我们在看到medium,查看一下他的源代码。

DVWA通关教程_第18张图片

我们看到$uploaded_type这里,这里应该是一个过滤,只允许我们上传jpeg和png这两种类型的文件,很明显是白名单绕过。

然后我们看到这个题目,更具源代码,我们其实可以上传一个图片码,首先是写一个一句话木马,然后在随便找一张图片,在cmd中使用copy 图片/b+木马  生成的图片名字。

构造完之后我们就可以上传了

DVWA通关教程_第19张图片

因为他是没有太难的过滤的,所以我们可以直接上传一个图片码。

然后我们在将难度设置到high,其实high和上一题是一样的思路,就是上传图片码,然后用菜刀连接。

DVWA通关教程_第20张图片

他的源码也只是对后缀做了一些处理。

如果想对文件上传漏洞更加熟悉的同学,建议去学习一下upload-master这个靶场,里面全是文件上传的漏洞,基本上常见的都在这里面。

sql injection

这一章我们来到了最习惯也是最熟悉的sql注入。

危害:

1.造成用户的信息泄露。

2.可以对数据库的数据进行增加或删除操作

3.如果网站目录存在写入权限,可以写入网页木马

4.经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。

DVWA通关教程_第21张图片

没有对我们输入的sql语句做什么过滤,那如果我们按照正常的思路,看看是否可以渗透进去。

首先我们先判断一下他有没有注入,最简单的,在我们传参的后面加上一个',看看会不会报错

发现报错,说明存在注入,然后我们在看看他的字段长度,使用order by

1' and 1=1 order by 2#

通过尝试,我们发现他的字段长度是2,如果我们将2改为3的话就会引起报错。

DVWA通关教程_第22张图片

既然我们现在已经发现他存在两个字段长度,然后我们来查看他两个字段的回显。

我们使用1' and 1=1 union select 1,2#

DVWA通关教程_第23张图片

我们得到回显,然后我们将1的位置更改为database()。

DVWA通关教程_第24张图片

我们得到他的数据库为dvwa,然后我们开始进行爆表。

1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#

DVWA通关教程_第25张图片

我们发现他有guestbook,users这几个表,然后我们来爆破一下表中的字段。

然后我们在进行爆破字段:

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

现在知道了字段,我们发现有user,password这几个数据,我们查看一些内容

DVWA通关教程_第26张图片

得到账号和密码,其中这些密码需要进行md5解密,就不一一去搞了。

然后我们把难度切换到medlium,查看一下他的源代码。

DVWA通关教程_第27张图片

然后在看到题目,发现是POST传参。

我们的思路是这样的,使用BP抓包,然后进行渗透。我们首先先打开代理,然后我们使用bp抓到的数据包是

DVWA通关教程_第28张图片

发现id参数,然后我们发送到repeater中,在id=1的后面加一个单引号,看看有没有报错,发现报错。

DVWA通关教程_第29张图片

然后我们将order by 的参数改为2,发现可以

DVWA通关教程_第30张图片

然后后面就和刚刚的思路差不读,开始爆破数据库。

我们得到数据库为dvwa,随后我们就可以爆出他的表

DVWA通关教程_第31张图片

DVWA通关教程_第32张图片

发现有guestbook,users两个表,然后是开始爆破字段。

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

我们发现报错了,这个报错是因为单引号被转义了,变成了\'

所以我们要将表名字的user更改为16进制

7573657273  然后我们加上0x,因为0x是16进制的标识符

得到了他的字段,现在只需要将他的解出来就可以了

DVWA通关教程_第33张图片

DVWA通关教程_第34张图片

然后我们切换到high,查看一下他的源代码,我们发现了他在sql语句后面添加了一个limit 1,这个语句是这样的,他只会显示一行,以此来防止多条数据的显示,我的思路是将后面的limit 1 给注释掉,用一个#因该就可以了

由于前面的打法和low一样。但是这个难度也挺特殊的

首先打开靶场

这个是题目,更具要求,我们点击这个链接,我们会来到一个新的地方

DVWA通关教程_第35张图片

我们尝试输入一个1,看看有没有什么反应。

发现这个页面没有什么特殊的变化,但是刚刚那个页面出现了回显

DVWA通关教程_第36张图片

然后我们更具原来的注入方法进行注入,由于之前已经写过了,所以我们直接跳一下

DVWA通关教程_第37张图片

然后我们得到了他的表,开始爆字段

DVWA通关教程_第38张图片

可能有人会疑惑为什么我要在#号的前面加一个;  是这样的,我们看到源代码

$query  "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";

因为我们要过滤掉limit 1 ,所以我们要用注释符将limit 1 注释掉,但是我们发现在limit 1;"的后面还有一个;  但是他被注释掉了,所以如果我们不加;的话,则这个sql语句就是不完整的。

这也就是我们加;的原因。

查看字段的数据

DVWA通关教程_第39张图片

以上就是关于SQL注入的教程

DOM型XSS

dom型xss差不多是这样的:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,大部分属于反射型。

反射型呢属于是:交互的数据不存在数据库中,一般都是一次性的。

然后我们看到题目:

DVWA通关教程_第40张图片

emmmm,送分了,直接在url那里更改一下?default=English,我们将English更改为xss的脚本

然后enter,就可以看到我们的js脚本运行成功。

DVWA通关教程_第41张图片

然后我们将难度跳到medium,在看源代码,发现他这次有过滤了

DVWA通关教程_第42张图片

分析代码,如果我们的参数中存在

1.抓包,修改前端代码绕过

2.有一些过滤可能没有那么完整,我们也许可以使用大小写不一样来绕过

3.还有就是双写绕过,比如说alert("xss")这种写法来绕过他的拦截。

4.标签的使用也是可以绕过xss的,html中的a标签的href属性用于指向超链接目标的URL,包含了片段识别

符和JavaScript代码段。也就是说,如果用户用了标签中的内容,浏览器会尝试检索显示href属性指定的url所表示的文档,或者执行JavaScript表达式,方法和函数。所以我们可以这样来构造payload

test

testtest

5.还有就是src属性,