Damn Vulnerable Web Application(DVWA)攻略五
声明、安装、攻略视频在攻略一中有写这里不多赘述
Authorisation Bypass(授权绕过)
Low:
先看目的:

我们登录账户:gordonb 密码:abc123

可以看到如图所示,左侧列表少了一个Authorisation Bypass,我们就是要用除了admin用户以外的用户访问这个页面
最简单的方式就是直接访问这个地址:http://[IP]/DVWA/vulnerabilities/javascript/
Medium:
先看源码:

这次做了判断用户是否为admin。
这里答案已经写在源码中了,但是还是讲一下正常的解题思路。
通过源码我们得知他仅仅是对用户是否为 admin做了判断,如果不是则返回403页面,并显示Unauthorised,但是我们在admin账户下去抓包会发现用户数据是通过php数据包发送至前端的,因此我们直接访问这个数据包即可跳过身份验证。
http://[IP]/DVWA/vulnerabilities/authbypass/get_user_data.php

High:
还是刚刚的方法访问看看

好吧,我们使用admin账户访问这个页面,然后提交更新请求

我们修改用户信息看看,gordonb登录,然后打开burp工具抓包访问:
http://[IP]/DVWA/vulnerabilities/authbypass/change_user_details.php

右键选择发送给重发器,然后将Intercept is设置为 off,点击切换至 Repeater 页面
将GET请求改为POST请求,随后复制如下代码粘贴至请求末尾
{
"id":5,
"first_name":"Bob11",
"surname":"Smith22"
}
以admin身份访问此页面刷新看看

Open HTTP Redirect(打开HTTP重定向)
Low:
目的:

源代码:
<?php
# array_key_exists("redirect", $_GET):检查 $_GET 数组中是否存在键名为 redirect 的元素
# $_GET['redirect'] != "":检查 redirect 参数的值是否不为空字符串。
if (array_key_exists("redirect", $_GET) && $_GET["redirect"] != "") {
# header("location: " . $_GET['redirect']):使用 header 函数发送一个 HTTP 头,告诉浏览器将用户重定向到 $_GET['redirect'] 指定的 URL
# exit:终止脚本执行,防止后续代码继续运行
header("location: " . $_GET["redirect"]);
exit();
}
# 如果 redirect 参数不存在或为空,脚本会执行到这里,设置 HTTP 响应状态码为 500,表示服务器内部错误,并输出错误信息
http_response_code(500);
?>
<p>Missing redirect target.</p>
<?php exit();
?>如果 URL 中存redirect参数且其值不为空,脚本会将用户重定向到该参数指定的 URL。
如redirect参数不存在或为空,脚本会返回 HTTP 状态码 500,并显示一条错误信息“Missing redirect target.”,然后终止执行。
这边打开控制台抓包看看,算了用Burp抓,这样更直观:

可以看到,这里当我们点Quote 1后发送了GET请求
GET /DVWA/vulnerabilities/open_redirect/source/low.php?redirect=info.php?id=1
这里redirect=就是判断的参数,我们只要将后面的内容改为想要访问的网站即可,可以直接URL访问,也可以拦包改包访问,又或者在控制台中修Quote 1的链接地址(但是这种方式不是攻击,你要做的是让别人重定向到你想让他们访问的网站,而不是你自娱自乐)
URL访问:(这里我重定向至自己的网站)
http://[IP]/DVWA/vulnerabilities/open_redirect/source/low.php?redirect=http://vncentcassano.cn
拦包改包:

Medium:
源码:

这里使用正则表达式判断 redirect的值中是否有http:// 和 https:// 协议
大写和大小写混淆都没有用,但是我们可以使用 // 来访问URL,从而绕过检查:
http://[IP]/DVWA/vulnerabilities/open_redirect/source/medium.php?redirect=//vincentcassano.cnHigh:
<?php
if (array_key_exists ("redirect", $_GET) && $_GET['redirect'] != "") {
if (strpos($_GET['redirect'], "info.php") !== false) {
header ("location: " . $_GET['redirect']);
exit;
} else {
http_response_code (500);
?>
<p>You can only redirect to the info page.</p>
<?php
exit;
}
}
http_response_code (500);
?>
<p>Missing redirect target.</p>
<?php
exit;
?>这次是白名单了,使用了 strpos 函数来检查 redirect参数是否包含特定的字符串 info.php,但是这样我不是只要在URL后加上info.php就可以访问了吗?
怎么加这里就要引入一个小知识:
在 URL 中
?是一个特殊字符,用于分隔 URL 的路径部分和查询字符串部分
只能说没难度:
http://10.86.29.238/DVWA/vulnerabilities/open_redirect/source/high.php?redirect=http://vincentcassano.cn?info.phpCryptography Problems(密码学问题)
懒,没什么动力驱动,因为他没什么需要解密,就是让你研究他用的是什么编码加密明文的,答案在帮助中都有写,这里不做了