发布时间:2026/8/26 20:30:57
网络安全(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/8/26 20:30:57

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

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

2026/8/26 20:30:57

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

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

2026/8/26 20:30:57

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/8/26 21:26:01

基于STM32 HAL库驱动AD9220实现10MSPS高速数据采集方案详解

1. 项目概述:当HAL库遇上高速AD9220最近在做一个需要高速数据采集的项目,核心需求是能稳定抓取10MHz带宽左右的模拟信号。市面上常见的STM32片内ADC,虽然用起来方便,但采样率和精度在面对这种需求时往往捉襟见肘。于是&#xff0c…

2026/8/26 21:26:01

Logback日志脱敏实战:非侵入式实现敏感信息自动隐藏

1. 项目概述:为什么日志脱敏是开发者的必修课?干了这么多年开发,最怕的就是线上出问题查日志,结果发现日志里全是明文密码、身份证号、手机号。这场景,估计不少兄弟都遇到过,轻则被安全团队通报&#xff0c…

2026/8/26 21:26:01

嵌入式SPI Flash存储:从W25Q16驱动到文件系统集成与可靠性设计

1. 项目概述:为什么W25Q16是嵌入式开发的“老朋友”?如果你在玩单片机、做物联网设备,或者捣鼓任何需要“记住”点东西的小玩意儿,那你大概率绕不开一个叫W25Q16的芯片。这玩意儿不是什么新潮的AI处理器,而是一颗看起来…

2026/8/26 21:26:01

蓝桥杯答疑题本质:单服务台排队优化与SPT调度

1. 这道题不是考编程,是考“排队经济学” 蓝桥杯2020国赛ABC组的P8732题——《答疑》,表面看是一道模拟题,实则藏着一套被绝大多数参赛者忽略的底层逻辑: 时间成本最优分配模型 。我带过七届蓝桥杯单片机与嵌入式方向的集训队&a…

2026/8/26 21:26:01

AI辅助编程边界:从异步并发到业务建模,编程远未解决

编程这件事,这几年被讨论得越来越像“科幻议题”。随着 AI 编程助手、大模型写代码、低代码平台的出现,经常能看到两种极端的声音:一种说“程序员要失业了”,另一种说“AI 根本写不了复杂业务”。但现实往往比这两种判断都更微妙。…

2026/8/26 21:21:01

中国企业HR数字化转型:AI招聘与人才管理实践

1. 2026年中国人力资源管理的数字化转型趋势过去三年间,我深度参与了超过20家企业的人力资源数字化转型项目,亲眼见证了AI技术如何重塑人才管理全流程。这份白皮书汇集了170家头部企业的实践案例,其中最令人印象深刻的是百胜中国的AI端到端人…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…