网络安全 DVWA通关指南 DVWA Command Injection(命令注入)

news2024/11/18 7:52:40

DVWA Command Injection(命令注入)

文章目录

  • DVWA Command Injection(命令注入)
    • Low
    • Medium
    • High
    • Impossible

Low

1、分析网页源代码

<?php

// 当表单提交按钮(Submit)被触发时执行以下代码
if (isset($_POST['Submit'])) {

    // 获取用户通过POST方式提交的IP地址数据
    // 注意:此处使用$_REQUEST可能会受到GET和POST两种方式的影响,为了安全性建议明确指定来源(如$_POST)
    $target = $_REQUEST['ip'];

    // 检查当前服务器的操作系统类型
    if (stristr(php_uname('s'), 'Windows NT')) {
        // 如果是Windows操作系统,则构建用于执行ping命令的字符串
        // 使用单引号包围命令并在末尾添加从用户输入获取的IP地址
        // 注意:这段代码存在命令注入风险,因为未对$user变量进行任何过滤或转义
        $cmd = shell_exec('ping ' . $target);
    } else {
        // 否则,认为是类*nix系统(Unix/Linux/Mac OS等)
        // 构建用于执行ping命令的字符串,'-c 4' 参数表示发送4个ICMP请求包
        // 同样,这段代码也存在命令注入风险
        $cmd = shell_exec('ping -c 4 ' . $target);
    }

    // 将执行命令的结果赋值给 $cmd 变量,并将其作为HTML预格式化的文本显示给用户
    // 这里展示了命令执行结果,但也暴露了潜在的安全风险
    $html .= "<pre>{$cmd}</pre>";
}

?>

2、网页对参数没有任何过滤,可以使用"&“、”&&“、”|“、”||"逻辑连接符连接命令,直接执行命令。

连接符左右是否有空格没有影响

注意逻辑连接符的区别

逻辑运算符逻辑功能
&(并且)有false则false
|(或者)有true则true
!(非)非false则true,非true则false
^(异或)相同为false,不同为true
&&(短路与)有false则false,若&&左边表达式或者值为false则右边不进行计算
||(短路或)有true则true,若
192.168.90.127 && ipconfig
192.168.90.127 & ipconfig
0.0.0.0 || ipconfig
192.168.90.127 | ipconfig

image-20240429163848470

4、为了消除命令注入风险,需要对用户输入进行严格的过滤或转义。例如,可以使用escapeshellarg()函数对目标IP地址进行转义,如下所示:

// 对于Windows和*nix系统,都应先对用户输入进行转义
$target_sanitized = escapeshellarg($target);

// 然后构建命令
if (stristr(php_uname('s'), 'Windows NT')) {
    $cmd = shell_exec('ping ' . $target_sanitized);
} else {
    $cmd = shell_exec('ping -c 4 ' . $target_sanitized);
}

Medium

1、分析网页源代码

<?php

// 当检测到表单已提交(即点击了Submit按钮)时执行以下代码
if (isset($_POST['Submit'])) {

    // 获取用户通过POST方法提交的IP地址数据
    // 注意:这里使用$_REQUEST会同时接收GET和POST数据,若只期望POST数据,应使用$_POST['ip']
    $target = $_REQUEST['ip'];

    // 创建黑名单字符数组,其中包含了可能导致命令注入的特殊字符(在这里是逻辑运算符)
    $substitutions = array(
        '&&' => '', // 去除逻辑与符号,防止连续命令执行
        ';'  => '', // 去除分号,防止多条命令执行
    );

    // 使用str_replace函数替换掉用户输入中黑名单内的字符
    // 这是一个初级防护措施,但并不能完全阻止所有类型的命令注入攻击
    $target = str_replace(array_keys($substitutions), $substitutions, $target);

    // 检测当前服务器的操作系统类型
    if (stristr(php_uname('s'), 'Windows NT')) {
        // 如果是Windows操作系统,则执行ping命令
        $cmd = shell_exec('ping ' . $target);
    } else {
        // 否则,认为是类*nix系统(Unix/Linux/Mac OS等)
        // 执行带有-c参数的ping命令,表示向目标主机发送4个数据包
        $cmd = shell_exec('ping -c 4 ' . $target);
    }

    // 将ping命令的输出结果以HTML预格式化的文本形式呈现给用户
    // 虽然进行了部分字符过滤,但仍然需要注意此代码仍可能存在命令注入风险
    $html .= "<pre>{$cmd}</pre>";
}

?>

2、网页将"&&"连接符过滤了,可以使用其他的逻辑连接符,命令注入成功。

192.168.90.127 & ipconfig
0.0.0.0 || ipconfig
192.168.90.127 | ipconfig

image-20240429171008470

High

1、分析网页源代码

<?php

// 当检测到表单已提交(Submit按钮已被点击)时执行以下代码
if (isset($_POST['Submit'])) {

    // 获取用户提交的IP地址输入,并使用trim函数去除首尾空白字符
    $target = trim($_REQUEST['ip']);

    // 定义一个黑名单字符数组,包含一些可能用于命令注入的特殊字符
    $substitutions = array(
        '&'   => '',     // 空字符替换"&"(逻辑与符号,用于连接多个命令)
        ';'   => '',     // 空字符替换";"(命令分隔符,用于执行多条命令)
        '| '  => '',     // 空字符替换"| "(管道符号,用于命令间通信)!!!我真的没看到这里居然有一个空格!!!
        '-'   => '',     // 空字符替换"-"(某些命令中的选项标志或组合命令)
        '$'   => '',     // 空字符替换"$"(环境变量引用或bash命令执行)
        '('   => '',     // 空字符替换"("(子shell执行或命令组)
        ')'   => '',     // 空字符替换")"(与"("配套使用)
        '`'   => '',     // 空字符替换"`"(命令替换)
        '||'  => '',     // 空字符替换"||"(逻辑或符号,用于命令执行失败时执行下一条命令)
    );

    // 使用str_replace函数,将用户输入中黑名单内所有字符替换为空字符
    // 这是一种针对命令注入的基本防御措施,但无法保证完全抵御所有攻击手法
    $target = str_replace(array_keys($substitutions), $substitutions, $target);

    // 判断当前操作系统类型
    if (stristr(php_uname('s'), 'Windows NT')) {
        // 若是Windows操作系统,则执行ping命令
        $cmd = shell_exec('ping ' . $target);
    } else {
        // 否则,认为是类*nix系统(Unix/Linux/Mac OS等)
        // 执行带有-c参数的ping命令,表示向目标主机发送4个数据包
        $cmd = shell_exec('ping -c 4 ' . $target);
    }

    // 将ping命令执行的原始输出反馈给用户,以HTML预格式化的文本形式展示
    // 尽管进行了字符过滤,但此代码依然存在命令注入的风险
    $html .= "<pre>{$cmd}</pre>";
}

?>

2、真没想到黑名单字符数组中,'| ''的后面多了一个空格,所以还是可以使用"|"连接符进行连接。

192.168.90.127 |ipconfig

image-20240429174030718

Impossible

<?php

// 当表单提交按钮(Submit)被触发时执行以下代码
if (isset($_POST['Submit'])) {

    // 验证Anti-CSRF令牌,防止跨站请求伪造攻击
    checkToken($_REQUEST['user_token'], $_SESSION['session_token'], 'index.php');

    // 获取用户输入的IP地址,并使用stripslashes函数去除反斜杠(\)以防止魔术引号攻击
    $target = $_REQUEST['ip'];
    $target = stripslashes($target);

    // 将IP地址拆分为四个八位字节(点分十进制形式)
    $octet = explode(".", $target);

    // 检查每个八位字节是否都是整数
    if (
        (is_numeric($octet[0])) &&
        (is_numeric($octet[1])) &&
        (is_numeric($octet[2])) &&
        (is_numeric($octet[3])) &&
        (sizeof($octet) == 4)
    ) {
        // 如果所有四个八位字节均为整数,则重新组合IP地址
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // 根据操作系统类型执行ping命令
        if (stristr(php_uname('s'), 'Windows NT')) {
            // 如果是Windows操作系统
            $cmd = shell_exec('ping ' . $target);
        } else {
            // 如果是*nix系统(如Unix/Linux/Mac OS)
            $cmd = shell_exec('ping -c 4 ' . $target);
        }

        // 将ping命令执行结果以HTML预格式化文本的形式返回给用户
        $html .= "<pre>{$cmd}</pre>";
    } else {
        // 用户输入的不是有效的IP地址,显示错误消息
        $html .= '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// 生成新的Anti-CSRF令牌并存储到session中
generateSessionToken();

?>

**注释说明:**

-PHP脚本主要处理用户提交的IP地址,并执行ping命令检查其连通性。
- 使用`checkToken`函数验证用户提交的Anti-CSRF令牌,确保请求来自合法用户而非第三方恶意伪造。
- 获取用户输入的IP地址,并通过`stripslashes`函数移除可能存在的反斜杠,以防止SQL注入或其他基于字符串逃逸的攻击。
-IP地址拆分成四个八位字节,然后逐一检查它们是否为数字,确保IP地址格式正确。
- 根据服务器操作系统类型执行相应的ping命令,并将结果显示给用户。
- 在脚本末尾调用`generateSessionToken`函数生成新的Anti-CSRF令牌,为后续请求提供保护。

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

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

相关文章

用Python编写用于IAR内存上传和下载的motorola格式转换工具

需求背景 IAR导出和载入内存支持 motorola 格式和 intel-extended 格式&#xff1a; 其中 motorola 格式以16进制表示&#xff0c;在输出文件中可以直接看到内存地址信息&#xff0c;并且文本长度比 intel-extended 格式更短。 所以我这里以 motorola 格式为基础&#xff0c;…

【b站-湖科大教书匠】6 应用层 - 计算机网络微课堂

课程地址&#xff1a;【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 6 应用层 6.1 应用层概述 6.2 客户-服务器方式和对等方…

【iOS】暑期第一周——ZARA app仿写

目录 前言无限轮播图分栏控件和滚动视图自定义cell遇到的问题调整图标大小单元格附件视图设置 总结 前言 暑假学习的第一周任务是对ZARA app进行仿写&#xff0c;充分运用之前学习的Objective-C语言和UI控件。我在编写demo的过程中遇到了一些问题&#xff0c;特写该博客作为学习…

微信小程序配置访问服务器失败所发现的问题及解决方案

目录 事前现象问题1&#xff1a;问题现象&#xff1a;问题分析&#xff1a; 问题2&#xff1a;问题现象&#xff1a;问题分析&#xff1a;解决方案&#xff1a; 事后现象 事前现象 问题1&#xff1a; 问题现象&#xff1a; 在本地调试时&#xff0c;一切顺利&#xff0c;但一…

2.10.批量归一化

批量归一化 ​ 损失出现在最后&#xff0c;所以后面的层训练比较快&#xff0c;而数据在最底部&#xff0c;则&#xff1a; 底部的层训练较慢底部层一变化&#xff0c;所有都会跟着变化最后的层需要重新学习多次 ​ 最后导致收敛变慢。 ​ 或许我们可以通过固定输出和梯度的…

古文:李密《陈情表》

原文 臣密言&#xff1a;臣以险衅&#xff0c;夙遭闵凶。生孩六月&#xff0c;慈父见背&#xff1b;行年四岁&#xff0c;舅夺母志。祖母刘愍臣孤弱&#xff0c;躬亲抚养。臣少多疾病&#xff0c;九岁不行&#xff0c;零丁孤苦&#xff0c;至于成立。既无伯叔&#xff0c;终鲜…

说说你对redis的理解

数据结构 String&#xff1a;缓存对象、常规计数、分布式锁、共享session信息 hash&#xff1a;&#xff08;包含键值对的无序散列表&#xff09; list&#xff1a;消息队列 set&#xff1a;聚合计算、点赞、公共关注、抽奖活动 zset&#xff1a;&#xff08;格式key、val…

【Streamlit学习笔记】Streamlit-ECharts热力图tooltip提示信息拓展

Streamlit-ECharts Streamlit-ECharts是一个Streamlit组件&#xff0c;用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts 安装模块库 pip install streamlitpip install streamlit-echarts绘制热力图展示 在基础热力…

【强化学习的数学原理】课程笔记--5(值函数近似,策略梯度方法)

目录 值函数近似一个例子TD 算法的值函数近似形式Sarsa, Q-learning 的值函数近似形式Deep Q-learningexperience replay 策略梯度方法&#xff08;Policy Gradient&#xff09;Policy Gradient 的目标函数目标函数 1目标函数 2两种目标函数的同一性 Policy Gradient 目标函数的…

18967 六一儿童节

这个问题可以使用贪心算法来解决。我们可以先将孩子们的需求和巧&#xfffd;&#xfffd;&#xfffd;力的重量都进行排序&#xff0c;然后从最大的需求开始&#xff0c;找到能满足这个需求的最大的巧克力&#xff0c;将其分给这个孩子。然后继续处理下一个需求&#xff0c;直…

基于微信小程序+SpringBoot+Vue的自助点餐系统(带1w+文档)

基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序的自助点餐系统前后台分离&#xff0c;让商品订单&#xff0c;用户反馈信息&#xff0c;商品信息等相关信息集中在后台让管理员管理&#xff0c;让用…

【进程间通信机制】管道和 FIFO、信号、消息队列、信号量、共享内存、套接字(Socket)

进程详细剖析&#xff0c;移步&#xff1a;https://blog.csdn.net/Thmos_vader/article/details/140750535 进程间通信 前文介绍&#xff1a;如何通过 fork()或 vfork()创建子进程&#xff0c;以及在子进程中通过 exec()函数执行一个新的程序&#xff1b; 谓进程间通信指的是…

考题相似度 AI 分析 API 数据接口

考题相似度 AI 分析 API 数据接口 基于 AI 的相似度评估&#xff0c;专有 AI 模型&#xff0c;包含评估详情 。 1. 产品功能 基于自有专业模型进行 AI 智能分析&#xff1b;提供详细的相似度评分和结果描述&#xff1b;高效的模型分析性能&#xff1b;全接口支持 HTTPS&#…

乐鑫ESP32-H2设备联网芯片,集成多种安全功能方案,启明云端乐鑫代理商

在数字化浪潮的推动下&#xff0c;物联网正以前所未有的速度融入我们的日常生活。然而&#xff0c;随着设备的激增&#xff0c;安全问题也日益成为公众关注的焦点。 乐鑫ESP32-H2致力于为所有开发者提供高性价比的安全解决方案&#xff0c;这款芯片经过专门设计以集成多种安全…

【时时三省】unity test 测试框架 下载

目录 1&#xff0c;unity test 测试框架介绍 2&#xff0c;源码下载 3&#xff0c;目录架构 4&#xff0c;git for window 下载安装方法&#xff1a; 1&#xff0c;unity test 测试框架介绍 Unity是一个用于C语言的轻量级单元测试框架。它由Throw The Switch团队开发&#…

工作很难受,还要不要继续留在职场上?

先说结论&#xff1a;我非常赞同大家离开职场 虽然小编现实的工作是有关于人力资源的&#xff0c;高级点叫做猎头&#xff0c;低俗点讲就叫“人贩子” 原因可能和其他人不太一样&#xff0c;大家自行理解 1.现在的社会资源太少&#xff0c;“蛋糕”太小 大家要明白最重要的…

TVL 破 3 亿美元的 Pencils Protocol,缘何具备持续盈利的能力?

Pencils Protocol 是行业内首个 DeFi Auction 的一站式聚合收益平台&#xff0c;其不仅支持 LaucnhPad、Staking、杠杆挖矿等系列功能&#xff0c;并有望成为 Scroll 生态重要的流动性枢纽&#xff0c;其目前正在基于该体系为 LRT 赛道赋能&#xff0c;目前在质押端不仅支持 ST…

【公式】因果卷积神经网络公式与应用解析

因果卷积神经网络公式与应用解析 因果卷积神经网络的核心作用 因果卷积神经网络&#xff08;Temporal Convolutional Network, TCN&#xff09;是一种专为时间序列预测而设计的网络结构。它通过因果卷积层&#xff0c;能够有效地处理时间序列数据&#xff0c;捕捉时间序列中的…

mediasoup simulcast实现说明

一. 前言 二. 空间可伸缩与时间可伸缩 三. mediasoup simulcast实现代码分析 1. 推流客户端开启 simulcast 2. mediasoup服务端接收simulcast流 3. mediasoup服务端转发流数据给消费者 a. SimulcastConsumer类声明 b. 获取预估码率&#xff0c;切换SimulcastConsumer的目…