网络安全(DVWA命令执行漏洞)—代码审计思路

发布时间:2026/10/27 0:45:32

网络安全(DVWA命令执行漏洞)—代码审计思路 ?php if( isset( $_POST[ Submit ] ) ) { //查看前端传入的post值submit是否为空 // Get input $target trim($_REQUEST[ ip ]); //获取get、post、cookie的ip值传参赋值给$target // Set blacklist $substitutions array( //定义数组变量名为$substitutions , ; , | , - , $ , ( , ) , , || , ); // Remove any of the charactars in the array (blacklist). //str_replace子字符串替换 $target str_replace( array_keys( $substitutions ), $substitutions, $target ); //返回数组中部分的或所有的键名 //将传入的$target的‘ip’值里的$substitutions的keys值都替换成$substitutions里的意思空值。 // Determine OS and execute the ping command. if( stristr( php_uname( s ), Windows NT ) ) { // Windows //查询字符串首次出现的位置并且忽略大小写 //如果是windows的话 $cmd shell_exec( ping . $target ); } // 执行ping命令到$target else { // *nix $cmd shell_exec( ping -c 4 . $target ); //否则就ping -c 4次 $target } // Feedback for the end user echo pre{$cmd}/pre; } ?以上代码是DVWA靶场的高级等级的命令执行漏洞上的页面代码下面先说一下整体思路这篇代码是由php语言编写的所以在这段代码里碰到不熟悉的函数我们需要查找函数对应的意思。可以在网页上查询php语言里的函数语义有工具的也可以使用工具比如php手册等。首先要明白最基础的if如果if里的值为真就执行if下花括号{}里面循环体也就是代码反之如果为假就执行else里的循环体代码。等我们查询完函数之后再结合语义带入到if里大致思路就是这个意思哈咱们接着往下看。正文开始已经提前对一些函数进行了注释帮助代码审计时进行更好的理解让我们从第一行代码开始理解第一行我们先看到了 if( isset( $_POST[ Submit ] ) ) 上来就看到了if表示if里面的值为条件条件如果为真就执行下面的代码。那么if里面的意思是什么呢我们先从里面看$_POST[]的意思学过php语言的都了解大致就是从前端通过[]内定义的值传参到后面。通过$_POST的变量可以把你在页面上输入的字符串传到我后端上来。$_POST外面的isset函数的意思是检查变量是否为空isset()里面有值的话就为真。下面直接用isset做实验$_ERQUEST[]表示post和get传参都可以赋值到一个变量$cnd。再前端url里随便写入一个命令值输出isset结果表示为1说明条件为真。再看第二行$target trim($_REQUEST[ ip ])trim函数的意思是取出字符串首尾的空白字符也就是括号里面的字符串输出之后是没有空格的下面是trim使用过程可以看到我填写了一个都是空格的变量用trim函数输出之后空格没了。而$_REQUEST的意思和$_GET、$_POST一个意思从前端传参到我们后端。我们再来看第三行$substitutions array( ,; ,| ,- ,$ ,( ,) , ,|| ,); 很明显这就是一个关联数组前面为键后面为值。再看第四部分$target str_replace( array_keys( $substitutions ), $substitutions, $target );这一行是重点虽然看着字母多但是我们拆开来逐个分析先看函数里面的array_keys函数这个函数的意思是返回数组中部分的或所有的键名。我们来做个实验我们定义一个关联类型的数组然后查看array_keys的数据类型再定义数组的时候分为键和值然后我们再数组外面加了一个array_keys的函数进行查看可以看到输出出来的是索引、类型和它的键也就是这个数组的‘name’、‘age’、‘id’这三个。那么就说明array_keys的作用就是挑选这个数组的 前面的键的值组成一个数组。右面的图是解析当前的这个数组。可以直观看到keys函数返回的是里面数组的键值。然后再回来看这行的str_replace函数他的意思是子字符串替换。结合上面几行如下图所示第一个参数是keys的一个数组第二个参数是一个完整数组第三个参数是前端传参过来的值下图为直观改为后端输入的值。一共有三个参数可以看到输出之后得知已经没有乱七八槽的特殊符号了。我们的参数1是要换掉的部分参数2可以理解为换掉成为什么数字本函数里是替换成为 ‘ ’ 空值。参数3是写入的整体1和2是要作用再参数3的身上。这样我们总结一下上部分的代码含义为你输入的内容如果是真的那么需要由代码先来过滤把你输入的含有 | -$ () || 的数值转换成空值。然后我们看下部分的内容if( stristr( php_uname( s ), Windows NT ) )先解析php_uname(s),的含义php_uname官方解读是返回运行 PHP 的系统的有关信息其中‘s’属性是返回操作系统名称stristr()的含义是查找字符串的首次出现。如果目前系统是“windows NT”的话就执行下面循环体的内容如果不是就执行else里的内容。我们再来看循环体内的内容第一个IF内的内容是执行ping命令后面的变量跟的是你输入的已经替换过的值。第二个else的内容为如果不是就执行4次ping命令跟你输入的已经替换过的值。所以下部分总结为先查看你当前操作的系统是否为“windows NT”。如果是的话就直接ping你输入的IPwindow系统自动oing4次如果不是的话就手动命令ping4次你输入的IP最后输出你输入的IP
延伸阅读

更多相关文章

2026/10/27 9:54:16

超级详细的 FinalShell 安装 及使用教程

一、引言FinalShell 是一款免费的国产的集 SSH 工具、服务器管理、远程桌面加速的良心软件,同时支持 Windows,macOS,Linux,它不单单是一个 SSH 工具,完整的说法应该叫一体化的的服务器,网络管理软件,在很大程度上可以免…

2026/10/26 1:26:25

ENVI5.6 安装教程,新手入门(超详细)附安装包和常见问题

ENVI是一个完整的遥感图像处理平台,广泛应用于科研、环境保护、气象、农业、林业、地球科学、遥感工程、水利、海洋等领域。目前ENVI已成为遥感影像处理的必备软件,包含辐射定标、大气校正、镶嵌裁剪、分类识别、阈值分割等多种功能。ENVI针对绝大部分的…

2026/10/24 18:25:35

X96 X10 Pro_晶晨S928X-J芯片机顶盒_安卓11.0_刷机固件包

X96 X10 Pro_晶晨S928X-J芯片机顶盒_安卓11.0_刷机固件包刷机固件下载:链接: https://pan.baidu.com/s/1EyYgLNZlxv-UvHpmTRxA_g?pwd5v8w 提取码: 5v8w链接:https://www.123865.com/s/Jbe8Vv-DwGN 提取码:6688备用链接: 链接&…

2026/10/27 9:50:07

小波神经网络时频建模与可解释预测实战

简介:本资源是一套面向本科生毕业设计与机器学习初学者的小波神经网络(WNN)预测实践代码,聚焦非平稳信号建模与交通流量预测等典型应用场景。压缩包共6个文件,含5个MATLAB源码(.m)与1个实测交通…

2026/10/27 9:50:07

MIMO-OFDM MATLAB源码调试:从跑通到能改的实用指南

简介:《MIMO-OFDM无线通信技术及MATLAB实现》一书的配套MATLAB源代码,面向无线通信方向的学生、研究者和工程师,用于理解MIMO与OFDM核心机制并辅助算法验证。压缩包共151个文件,118个m脚本覆盖信道建模、IFFT符号生成、同步均衡与…

2026/10/27 9:50:07

2007-2024年 上市公司-媒体关注日、年数据(xlsx)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 9:50:07

2012-2024年 上市公司-企业家精神 数据(+文献)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 9:50:07

Phaser 4.2.1 API 参考指南:7 个高频接口与源码定位

Phaser 4.2.1 API 参考指南:7 个高频接口与源码定位 【免费下载链接】phaser Phaser is a fun, free and fast 2D game framework for making HTML5 games for desktop and mobile web browsers, supporting Canvas and WebGL rendering. 项目地址: https://gitco…

2026/10/27 9:45:04

基于Springboot船舶维保管理系统【附源码+文档】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑