目录
1.暴力破解 brute force
low
- 使用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
- 输入以下命令都可以执行
;被过滤,以下分隔符都可以
medium
- 可以看到过滤了&&和; 所以依旧可以使用 127.0.0. || ipconfig执行命令
high
过滤了全部管道符,可以使用 127.0.0 || ipconfig ,前面命令执行失败执行后面的
方法还有很多
impossible
设置了token,检查输入是否为数字,无漏洞
3.CSRF跨站请求伪造
low
- 先输入一个不一致的密码,观察页面变化
- 可以看到url为:http://192.168.10.5/DVWA/vulnerabilities/csrf/?password_new=123&password_conf=234&Change=Change#
- 用新页面打开url,发现密码一键被修改
medium
- 按照刚才的方式修改,发现执行不了,检查了请求头
- 首先抓一个包,可以看到这里有referer
- 复制刚才构造好的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构造链接
修改成功
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+2,可以看到,并未输出3,所以可以判定是字符型注入
- 输入如下payload:'1 or 1=1' ,可以看到有报错,所以一定存在sql注入
- 使用order by判断字段数 1' order by 2 #
1' order by 3 #
由此判断,他只有两个字段
- 然后使用联合查询 1' union select 1,2 # 获取回显位置
- 在对应位置获取数据库名 1' union select database(),2 #
- 获取数据库所有表名 1' union select group_concat(table_name),2 from information_schema.tables where table_schema=database() #
- 获取users字段名
1' union select group_concat(column_name),2 from information_schema.columns where table_name='users' and table_schema=database() #
- 获取字段值
1' union select password,user from users #
- 现在已经拿到了用户和密码,但密码是加密的,可使用md5自行解密 md5在线解密破解,md5解密加密
Medium
- 先选中1,抓一个包,然后发到重放模块,用于测试,可以修改参数,数字型注入
id修改为1+1,出现报错
- 使用order by判断字段数
- 输入联合查询语句
剩余步骤同上
high
1.输入1',发现报错
2.输入联合查询语句
3.按上述步骤进行查询
impossible
限制只能为数字 不存在注入
8.SQL injection(blind)盲注
low
- 输入 1' and 1=1 # 可以看到 正常执行
- 猜解开数据库长度1' and length(database())=x #
5
- 用aascii猜解数据库名 1' and ascii(substr(database(),1,1))=100 # 由此确定,第一位ascii是100,对比ascii表(ASCII码对照表-完整ASCII码表-我就查查询)可得 为d
后面的同理
- 获取表名,先判断有多少个表 1' and (select count(table_name) from information_schema.tables where table_schema=database())=2 #
- 和普通sql注入相同,依次查询库名表名字段名
Medium
- 随意选择一个数,然后抓包
- 修改参数 1 and length(database())=4 #,根据布尔 盲注判断,,数据库名为4
- 下面依旧使用sql语句进行查询,步骤同上
high
- 1' and 1=1 # 测试,发现成功执行
- 盲注,测试数据库名长度 1' and length(database())=4 #
- 接下来的步骤同上
impossible
只能使用数字,且设置了token,无漏洞
9.Weak Session IDS会话劫持
low
使用这个session,到别的浏览器,直接修改session即可实现无密码登陆
medium
使用了时间戳
时间戳在线转换工具(Unix timestamp) - 记灵工具
同样构造id,实现登录
high
使用了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
- 查看网络,可以看到有一个信任网站
- 可以看出页面里包含<script>标签,也就有机会执行alert()等动作。但是页面include内容的来源有白名单限制,只允许来自$headerCSP中的URL。
- 此时可以上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
无