当前位置: 首页 > news >正文

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

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令牌,为后续请求提供保护。

相关文章:

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

DVWA Command Injection&#xff08;命令注入&#xff09; 文章目录 DVWA Command Injection&#xff08;命令注入&#xff09;LowMediumHighImpossible Low 1、分析网页源代码 <?php// 当表单提交按钮&#xff08;Submit&#xff09;被触发时执行以下代码 if (isset($_P…...

VUE3学习第三篇:报错记录

1、在我整理好前端代码框架后&#xff0c;而且也启动好了对应的后台服务&#xff0c;访问页面&#xff0c;正常。 2、报错ReferenceError: defineModel is not defined 学到这里报错了 在vue网站的演练场&#xff0c;使用没问题 但是在我自己的代码里就出问题了 3、watchEffec…...

CentOS怎么关闭自动锁屏?

禁止自动锁屏 有时候几分钟不用Centos&#xff0c;系统就自动锁屏了&#xff0c;这是一种安全措施&#xff0c;防止别人趁你不在时使用你的系统。但对于大部分人而言&#xff0c;这是没有必要的&#xff0c;尤其是Centos虚拟机&#xff0c;里面没啥重要的东西&#xff0c;每次…...

vscode 环境

这张截图显示的是在VS Code&#xff08;Visual Studio Code&#xff09;中选择Python解释器的界面。不同的Python解释器及其虚拟环境列出了可选项&#xff0c;用户可以根据需要选择合适的解释器来运行Python代码。以下是对截图中信息的详细解释&#xff1a; 解释器选择界面 当…...

浏览器自动化测试工具selenium——爬虫操作记录

selenium——是一款web自动化测试框架&#xff0c;其能模拟正常的用户操作&#xff0c;比如点击。但selenium并不是浏览器&#xff0c;没有执行js和解析html/css的能力&#xff0c;因此selenium需要和浏览器配合使用。 因为selenium可以模仿用户行为&#xff0c;因此selenium也…...

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

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

javaEE(1)

一. Web开发概述 Web开发:指的是从网页中向后端程序发送请求,与后端程序进行交互 Web服务器:是一种软件,向浏览器等Web客户端提供文档等数据,实现数据共享,它是一个容器,是一个连接用户和程序之间的中间键 二. Web开发环境搭建 我们要实现前后端交互,首先需要中间键Web服务…...

极简Springboot+Mybatis-Plus+Vue零基础萌新都看得懂的分页查询(富含前后端项目案例)

目录 springboot配置相关 依赖配置 yaml配置 MySQL创建与使用 &#xff08;可拿软件包项目系统&#xff09; 创建数据库 创建数据表 mybatis-plus相关 Mapper配置 ​编辑 启动类放MapperScan 启动类中配置 添加config配置文件 Springboot编码 实体类 mapperc(Dao…...

IPython的Bash之舞:%%bash命令全解析

IPython的Bash之舞&#xff1a;%%bash命令全解析 IPython的%%bash魔术命令为Jupyter Notebook用户提供了一种在单元格中直接执行Bash脚本的能力。这个特性特别适用于需要在Notebook中运行系统命令或Bash特定功能的场景。本文将详细介绍如何在IPython中使用%%bash命令&#xff…...

ST Stellar-E SR5E1 22KW OBC combo 3KW DC-DC汽车充电器解决方案

对于全球的环境保护意识抬头&#xff0c;全球的汽车产业慢慢步入电动化的时代&#xff0c;以减少碳排放。整车系统主要是由电池、电驱、电控的三电所构成&#xff0c;其中电池系统是整车的动力来源&#xff0c;而对电池充电的OBC系统更甚重要。一具高度安全性且高效的OBC系统&a…...

Postman中的A/B测试实践:优化API性能的科学方法

Postman中的A/B测试实践&#xff1a;优化API性能的科学方法 在API开发和测试过程中&#xff0c;A/B测试是一种验证新功能或变更效果的有效方法。通过比较两个或多个版本&#xff08;例如A版本和B版本&#xff09;的性能&#xff0c;可以科学地评估变更的影响。Postman作为API测…...

微信小程序支付流程

前端需要做的事情&#xff1a; 生成平台订单&#xff1a;前端调用接口&#xff0c;向后端传递购买的商品信息、收货人信息&#xff0c;&#xff08;后端生成平台订单&#xff0c;返回订单编号&#xff09;获取预付单信息&#xff1a;将订单编号发送给后端后&#xff0c;&#x…...

Istio 学习笔记

Istio 学习笔记 作者&#xff1a;王珂 邮箱&#xff1a;49186456qq.com 文章目录 Istio 学习笔记[TOC] 前言一、基本概念1.1 Istio定义 二、Istio的安装2.1 通过Istioctl安装2.2 通过Helm安装 三、Istio组件3.1 Gateway3.2 VirtulService3.2.1 route详解3.2.2 match详解3.2.3…...

测试面试宝典(三十三)—— 接口测试有没有测试出什么问题?

在之前的接口测试工作中&#xff0c;确实发现了一些问题。比如&#xff0c;在对某关键业务接口进行测试时&#xff0c;发现当输入的参数值超出正常范围时&#xff0c;接口没有按照预期返回错误提示&#xff0c;而是出现了系统崩溃的情况。 还有一次&#xff0c;在测试一个数据…...

YOLOV8模型转TFJS 在Mac下遇到的版本的坑

1.目的&#xff1a;将训练好的yolov8模型转化成TFJS格式&#xff0c;用于在浏览器中通过tensorflow调用&#xff1b; 遇到问题&#xff1a; A KerasTensor cannot be used as input to a TensorFlow function. 本地环境&#xff1a; python :3.11 自动安装的版本为&#xf…...

vue、react前端框架实现TodoList页面案例

原始TodoList网页&#xff08;主要就是链接里网页应用ndex.html、styles.css、script.js &#xff09;&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/140657576 node、npn安装参考&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/…...

el-date-picker 时间控件校验选择时间必须早于当前时间(带时分秒)

el-date-picker 时间控件校验选择时间必须遭早于当前时间&#xff08;带时分秒&#xff09;&#xff0c;然后监控时间控件&#xff0c;当时间改变的时候&#xff0c;如果不是当天&#xff0c;那时间可以选择全天也就是00-24时&#xff0c;如果是当天&#xff0c;就是当前时间之…...

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示&#xff0c;点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径&#xff0c;点击箭头所指浏览按钮&#xff0c;会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…...

vue中无法调试

vue.config.js中增加 devtool configureWebpack: {name: name,resolve: {alias: {: resolve(src)}},devtool: "cheap-module-source-map" // add},然后重启即可。 顺便招聘&#xff1a;1.需要会日语。2.Java&#xff0c;JS&#xff0c;Vue&#xff0c;DB任一会者皆…...

python机器学习8--自然语言处理(2)

1&#xff0e;移除用词 在很多情况下&#xff0c;有一些文章内的英文字符、标点符号分词的结果不符合自己的预期&#xff0c;会出现一些不想要的分词&#xff0c;此时就能通过以下的函数自己设定用词&#xff0c;并且删除。 jieba.analyse.set_stop_words("stop_words.tx…...

LinkedList底层原理

节点&#xff08;Node&#xff09;结构 LinkedList 的核心是一个内部类 Node&#xff0c;每个 Node 对象代表链表中的一个元素&#xff0c;并且每个节点包含三个部分&#xff1a; 元素值 (item)&#xff1a;存储实际的数据。前驱节点引用 (prev)&#xff1a;指向当前节点前面…...

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效 本篇,推荐给你几个按钮,先看一下图片 本例图片 案例分析 这是一个系列的按钮,它们具有共同的特点: 底层按钮层,具有一个彩色的渐变边框,上层是依据hover效果需要,可以是渐变,可以时白色。 鼠标hover效果…...

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

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

04-Charles中的Map Remote和Map Local介绍

Charles提供了Map Remote和Map Local两个功能。 Map Remote是将指定的网络请求重定向到另一个网址。Map Local是将指定的网络请求重定向到本地文件。 一、Map Remote 假设代码中调用了接口A&#xff0c;但是接口A的响应结果不能满足需求&#xff1b;此时&#xff0c;有另一个…...

R语言优雅的进行广义可加模型泊松回归分析

泊松回归&#xff08;Poisson regression&#xff09;是以结局变量为计数结果时的一种回归分析。泊松回归在我们的生活中应用非常广泛&#xff0c;例如&#xff1a;1分钟内过马路人数&#xff0c;1天内火车站的旅客流动数&#xff0c;1天内的银行取钱人数&#xff0c;一周内的销…...

大模型学习笔记十四:Agent模型微调

文章目录 一、大模型需要Agent技术的原因二、Prompt Engineering可以实现Agent吗&#xff1f;&#xff08;1&#xff09;ReAct原理展示和代码&#xff08;2&#xff09;ModelScope&#xff08;3&#xff09;AutoGPT&#xff08;4&#xff09;ToolLLaMA 三、既然AutoGPT可以满足…...

大疆创新2025校招内推

大疆2025校招-内推 一、我们是谁&#xff1f; 大疆研发软件团队&#xff0c;致力于把大疆的硬件设备和大疆用户紧密连接在一起&#xff0c;我们的使命是“让机器有温度&#xff0c;让数据会说话”。 在消费和手持团队&#xff0c;我们的温度来自于激发用户灵感并助力用户创作…...

搜索引擎项目(四)

SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com) 基于Servlet完成前后端交互 WebServlet("/searcher") public class DocSearcherServlet extends HttpServlet {private static DocSearcher docSearcher new DocSearcher();private ObjectMapper obje…...

声音克隆一键本地化部署 GPT-SoVITS

文章目录 GPT-SoVITS 介绍1:GPT-SoVITS安装2:GPT-SoVITS使用2.1 人声伴奏分离,去混响去延时工具2.2 语音切分工具2.3 语音降噪工具2.4 中文批量离线ASR工具2.5 语音文本校对标注工具GPT-SoVITS 介绍 GPT-SoVITS: 是一个由RVC变声器创始人“花儿不哭”推出的免费开源项目。…...

使用【Easypoi】实现百万数据导出

本文使用easypoi实现百万级数据导出 文章目录 前言一、一般情况下导出二、解决思路三、实现步骤导入依赖重写方法调用实现 结束 前言 下文实现了通过easypoi实现将百万级数据导出 一、一般情况下导出 一般导出流程&#xff08;简单导出&#xff09;&#xff1a; 创建对应的…...