网络安全 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

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

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

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(命令注入) 文章目录 DVWA Command Injection(命令注入)LowMediumHighImpossible Low 1、分析网页源代码 <?php// 当表单提交按钮(Submit)被触发时执行以下代码 if (isset($_P…...
 
VUE3学习第三篇:报错记录
1、在我整理好前端代码框架后,而且也启动好了对应的后台服务,访问页面,正常。 2、报错ReferenceError: defineModel is not defined 学到这里报错了 在vue网站的演练场,使用没问题 但是在我自己的代码里就出问题了 3、watchEffec…...
 
CentOS怎么关闭自动锁屏?
禁止自动锁屏 有时候几分钟不用Centos,系统就自动锁屏了,这是一种安全措施,防止别人趁你不在时使用你的系统。但对于大部分人而言,这是没有必要的,尤其是Centos虚拟机,里面没啥重要的东西,每次…...
 
vscode 环境
这张截图显示的是在VS Code(Visual Studio Code)中选择Python解释器的界面。不同的Python解释器及其虚拟环境列出了可选项,用户可以根据需要选择合适的解释器来运行Python代码。以下是对截图中信息的详细解释: 解释器选择界面 当…...
浏览器自动化测试工具selenium——爬虫操作记录
selenium——是一款web自动化测试框架,其能模拟正常的用户操作,比如点击。但selenium并不是浏览器,没有执行js和解析html/css的能力,因此selenium需要和浏览器配合使用。 因为selenium可以模仿用户行为,因此selenium也…...
 
微信小程序配置访问服务器失败所发现的问题及解决方案
目录 事前现象问题1:问题现象:问题分析: 问题2:问题现象:问题分析:解决方案: 事后现象 事前现象 问题1: 问题现象: 在本地调试时,一切顺利,但一…...
 
javaEE(1)
一. Web开发概述 Web开发:指的是从网页中向后端程序发送请求,与后端程序进行交互 Web服务器:是一种软件,向浏览器等Web客户端提供文档等数据,实现数据共享,它是一个容器,是一个连接用户和程序之间的中间键 二. Web开发环境搭建 我们要实现前后端交互,首先需要中间键Web服务…...
 
极简Springboot+Mybatis-Plus+Vue零基础萌新都看得懂的分页查询(富含前后端项目案例)
目录 springboot配置相关 依赖配置 yaml配置 MySQL创建与使用 (可拿软件包项目系统) 创建数据库 创建数据表 mybatis-plus相关 Mapper配置 编辑 启动类放MapperScan 启动类中配置 添加config配置文件 Springboot编码 实体类 mapperc(Dao…...
IPython的Bash之舞:%%bash命令全解析
IPython的Bash之舞:%%bash命令全解析 IPython的%%bash魔术命令为Jupyter Notebook用户提供了一种在单元格中直接执行Bash脚本的能力。这个特性特别适用于需要在Notebook中运行系统命令或Bash特定功能的场景。本文将详细介绍如何在IPython中使用%%bash命令ÿ…...
 
ST Stellar-E SR5E1 22KW OBC combo 3KW DC-DC汽车充电器解决方案
对于全球的环境保护意识抬头,全球的汽车产业慢慢步入电动化的时代,以减少碳排放。整车系统主要是由电池、电驱、电控的三电所构成,其中电池系统是整车的动力来源,而对电池充电的OBC系统更甚重要。一具高度安全性且高效的OBC系统&a…...
Postman中的A/B测试实践:优化API性能的科学方法
Postman中的A/B测试实践:优化API性能的科学方法 在API开发和测试过程中,A/B测试是一种验证新功能或变更效果的有效方法。通过比较两个或多个版本(例如A版本和B版本)的性能,可以科学地评估变更的影响。Postman作为API测…...
 
微信小程序支付流程
前端需要做的事情: 生成平台订单:前端调用接口,向后端传递购买的商品信息、收货人信息,(后端生成平台订单,返回订单编号)获取预付单信息:将订单编号发送给后端后,&#x…...
 
Istio 学习笔记
Istio 学习笔记 作者:王珂 邮箱: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…...
测试面试宝典(三十三)—— 接口测试有没有测试出什么问题?
在之前的接口测试工作中,确实发现了一些问题。比如,在对某关键业务接口进行测试时,发现当输入的参数值超出正常范围时,接口没有按照预期返回错误提示,而是出现了系统崩溃的情况。 还有一次,在测试一个数据…...
YOLOV8模型转TFJS 在Mac下遇到的版本的坑
1.目的:将训练好的yolov8模型转化成TFJS格式,用于在浏览器中通过tensorflow调用; 遇到问题: A KerasTensor cannot be used as input to a TensorFlow function. 本地环境: python :3.11 自动安装的版本为…...
 
vue、react前端框架实现TodoList页面案例
原始TodoList网页(主要就是链接里网页应用ndex.html、styles.css、script.js ): https://blog.csdn.net/weixin_42357472/article/details/140657576 node、npn安装参考: https://blog.csdn.net/weixin_42357472/article/details/…...
el-date-picker 时间控件校验选择时间必须早于当前时间(带时分秒)
el-date-picker 时间控件校验选择时间必须遭早于当前时间(带时分秒),然后监控时间控件,当时间改变的时候,如果不是当天,那时间可以选择全天也就是00-24时,如果是当天,就是当前时间之…...
 
godot新建项目及设置外部编辑器为vscode
一、新建项目 初次打开界面如下所示,点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径,点击箭头所指浏览按钮,会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…...
vue中无法调试
vue.config.js中增加 devtool configureWebpack: {name: name,resolve: {alias: {: resolve(src)}},devtool: "cheap-module-source-map" // add},然后重启即可。 顺便招聘:1.需要会日语。2.Java,JS,Vue,DB任一会者皆…...
 
python机器学习8--自然语言处理(2)
1.移除用词 在很多情况下,有一些文章内的英文字符、标点符号分词的结果不符合自己的预期,会出现一些不想要的分词,此时就能通过以下的函数自己设定用词,并且删除。 jieba.analyse.set_stop_words("stop_words.tx…...
 
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
 
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
 
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
 
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
 
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
 
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
 
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
