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

相关新闻

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

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

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

2026/11/10 2:59:54 阅读更多 →
ENVI5.6 安装教程,新手入门(超详细)附安装包和常见问题

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

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

2026/11/10 2:59:54 阅读更多 →
X96 X10 Pro_晶晨S928X-J芯片机顶盒_安卓11.0_刷机固件包

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/11/10 2:59:54 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻