dvwa-command injection 代码审计(超详细逐行审计)
dvwa-command injection 代码审计
low
<?phpif( isset( $_POST[ 'Submit' ] ) ) {// Get input$target = $_REQUEST[ 'ip' ];// Determine OS and execute the ping command.if( stristr( php_uname( 's' ), 'Windows NT' ) ) {// Windows$cmd = shell_exec( 'ping ' . $target );}else {// *nix$cmd = shell_exec( 'ping -c 4 ' . $target );}// Feedback for the end userecho "<pre>{$cmd}</pre>";
}?>
isset( $_POST[ 'Submit' ]此代码判断接受的post参数是否为空
$target = $_REQUEST[ 'ip' ];request方式接受ip参数
stristr( php_uname( 's' ), 'Windows NT' 此参数为真时,执行ping命令(意为在windows系统中执行ping命令)
否则执行ping命令4次(意为在unix或linux中执行ping4次)
其中的stristr函数如下
stristr()函数在PHP中用于在字符串中查找子字符串,并返回第一个匹配的子字符串及其后面的部分,而且不区分大小写
示例
$str = "Hello, World!"; $substring = "world"; $result = stristr($str, $substring); echo $result; // 输出 "World!"
php_uname()函数如下,此代码中即为查看系统信息是否为Windows NT
在PHP中,php_uname()函数用于获取操作系统的信息。该函数返回一个包含系统信息的字符串,包括操作系统名称、主机名、内核版本、发布版本等
- “a”:默认值,返回所有系统信息
- “s”:返回操作系统名称
- “n”:返回主机名
- “r”:返回内核版本
- “v”:返回发布版本
- “m”:返回机器类型
最后则返回执行结果
medium
<?phpif( isset( $_POST[ 'Submit' ] ) ) {// Get input$target = $_REQUEST[ 'ip' ];// Set blacklist$substitutions = array('&&' => '',';' => '',);// Remove any of the charactars in the array (blacklist).$target = str_replace( array_keys( $substitutions ), $substitutions, $target );// Determine OS and execute the ping command.if( stristr( php_uname( 's' ), 'Windows NT' ) ) {// Windows$cmd = shell_exec( 'ping ' . $target );}else {// *nix$cmd = shell_exec( 'ping -c 4 ' . $target );}// Feedback for the end userecho "<pre>{$cmd}</pre>";
}?>
该级别代码几乎和low一致,仅添加两个过滤
关键代码部分
$substitutions = array( '&&' => '', ';' => '', );
此代码为使用array函数快速定义一个数组,并将其值赋给substitutions
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
array_keys( $substitutions )该函数为获取变量中的 键 即key
<?php$substitutions = array('&&' => '',';' => '',);var_dump($substitutions);print("<br/>");$a=array_keys($substitutions);var_dump($a); ?>输出结果
然后使用srt_replace()函数进行字符串替换
该函数如下
str_replace()函数用于在字符串中替换指定的子字符串。它可以用于执行简单的字符串替换操作,例如将一个子字符串替换为另一个子字符串
str_replace (mixed $search , mixed $replace , mixed $subject [, int &$count ]) : mixedsearch是要搜索的字符串或字符串数组,replace是要替换为的字符串或字符串数组,subject是被搜索的原始字符串,count是一个可选参数,用于存储替换操作的次数
示例
$string = "Hello, World!"; $new_string = str_replace("World", "PHP", $string); echo $new_string;输出结果即为 Hello, PHP!
此处即,搜索输入的target的值,将其中substitutions数组中的键替换成substitutions变量中该键所对应的值,从而达成将输入的&&或者;进行置空过滤
high
<?phpif( isset( $_POST[ 'Submit' ] ) ) {// Get input$target = trim($_REQUEST[ 'ip' ]);// Set blacklist$substitutions = array('&' => '',';' => '','| ' => '','-' => '','$' => '','(' => '',')' => '','`' => '','||' => '',);// Remove any of the charactars in the array (blacklist).$target = str_replace( array_keys( $substitutions ), $substitutions, $target );// Determine OS and execute the ping command.if( stristr( php_uname( 's' ), 'Windows NT' ) ) {// Windows$cmd = shell_exec( 'ping ' . $target );}else {// *nix$cmd = shell_exec( 'ping -c 4 ' . $target );}// Feedback for the end userecho "<pre>{$cmd}</pre>";
}?>
相较上一关,该难度差别在如下代码
$target = trim($_REQUEST[ 'ip' ]);// Set blacklist$substitutions = array('&' => '',';' => '','| ' => '','-' => '','$' => '','(' => '',')' => '','`' => '','||' => '',);
增加了过滤项,但是原理不变
除此之外添加了trim()处理输入的内容
trim()函数用于删除字符串开头和结尾处的空白字符(空格、制表符、换行符等)或者其它指定字符
string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )str是要处理的字符串,character_mask是一个可选参数,用于指定要删除的字符。如果不指定$character_mask参数,默认会删除空格、制表符、换行符、回车符、空字符和垂直制表符
示例
$str = " Hello, World! "; $new_str = trim($str); echo $new_str;输出结果为 Hello, World!
impossible
<?phpif( isset( $_POST[ 'Submit' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$target = $_REQUEST[ 'ip' ];$target = stripslashes( $target );// Split the IP into 4 octects$octet = explode( ".", $target );// Check IF each octet is an integerif( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {// If all 4 octets are int's put the IP back together.$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];// Determine OS and execute the ping command.if( stristr( php_uname( 's' ), 'Windows NT' ) ) {// Windows$cmd = shell_exec( 'ping ' . $target );}else {// *nix$cmd = shell_exec( 'ping -c 4 ' . $target );}// Feedback for the end userecho "<pre>{$cmd}</pre>";}else {// Ops. Let the user name theres a mistakeecho '<pre>ERROR: You have entered an invalid IP.</pre>';}
}// Generate Anti-CSRF token
generateSessionToken();?>
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
将三个参数传递给checktoken函数,checktoken函数一般用于验证匹配用户token和用户session是否匹配,如不匹配则跳转到index.php
$_REQUEST[ 'user_token' ]:这是一个 PHP 超全局数组,用于获取 HTTP 请求中的参数。在这里,$_REQUEST['user_token']用于获取名为user_token的参数的值。
$_SESSION['session_token']:这是 PHP 的会话(Session)变量,用于在用户会话之间存储数据。在这里,$_SESSION['session_token']用于获取名为session_token的会话变量的值
index.php:这是一个字符串,表示一个重定向页面的 URL。如果checkToken函数判断验证失败,用户将被重定向到这个页面
$target = stripslashes( $target );该行代码为过滤输出内容
stripslashes()函数用于去除由addslashes()函数添加的反斜杠。在 PHP 中,addslashes()用于在特定字符前添加反斜杠,以防止 SQL 注入和其他安全漏洞。而stripslashes()则用于将这些反斜杠去除,恢复原始的字符串
$octet = explode( ".", $target );该行explode函数通过 点 将输入的内容分段,被分割的部分会以数组的形式存储在变量中
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {该行代码使用is_numeric函数判断该分割后的数组中的每个元素是否为数字,当全部都为数字时判断为真,才会向下执行,is_numric函数会将十六进制也视为数字,可以考虑将代码编程16进制,但是由于有分段组合成ip的这一步,所以该方法也不能实现
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];重新将该数组拼接,然后剩下的代码就与之前一样了
可以说是限制了所有字符和字母
numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {`该行代码使用is_numeric函数判断该分割后的数组中的每个元素是否为数字,当全部都为数字时判断为真,才会向下执行,is_numric函数会将十六进制也视为数字,可以考虑将代码编程16进制,但是由于有分段组合成ip的这一步,所以该方法也不能实现
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];重新将该数组拼接,然后剩下的代码就与之前一样了
可以说是限制了所有字符和字母
相关文章:
dvwa-command injection 代码审计(超详细逐行审计)
dvwa-command injection 代码审计 low <?phpif( isset( $_POST[ Submit ] ) ) {// Get input$target $_REQUEST[ ip ];// Determine OS and execute the ping command.if( stristr( php_uname( s ), Windows NT ) ) {// Windows$cmd shell_exec( ping . $target );}…...
hadoop 配置历史服务器 开启历史服务器查看 hadoop (十)
1. 配置了三台服务器,hadoop22, hadoop23, hadoop24 2. hadoop文件路径: /opt/module/hadoop-3.3.4 3. hadoop22机器配置历史服务器的配置文件: 文件路径:/opt/module/hadoop-3.3.4/etc/hadoop 文件名称:mapred-size.xml 新增历…...
Java注解(Annotation)的基本知识
Java注解(Annotation)的基本知识 此文的目的只在于了解的注解的基本知识,知道注解的一些概念,使能够看懂注解的使用。 注解概述 Java 注解(Annotation)又称 Java 标注,使 JDK5.0 引入的一种注释机制。Java 语言中的…...
ssh远程连接不了虚拟机ubuntu
直奔主题 1. 确保linux安装了ssh2.查看网络适配器是否启用3.连接成功 1. 确保linux安装了ssh sudo apt-get install openssh-server2.查看网络适配器是否启用 3.连接成功...
文心一言 VS 讯飞星火 VS chatgpt (140)-- 算法导论11.4 5题
五、用go语言,考虑一个装载因子为a的开放寻址散列表。找出一个非零的a值,使得一次不成功查找的探查期望数是一次成功查找的探查期望数的 2 倍。这两个探查期望数可以使用定理11.6 和定理 11.8 中给定的上界。 文心一言,代码正常运行…...
代码随想录Day51 完结篇 LeetCode T84 柱状图的最大矩形
前言 今天代码随想录一刷也告一段落了,没想到我居然坚持下来了,一节都没有落下,学习到了很多种不同的解题思路,也和大家一块交流了很多,哈哈也许不久以后我还得再次二刷代码随想录,希望这一系列的题解能给大家带来帮助,如想要系统学习,请参照代码随想录网站的题解以及b站的配套…...
对接苹果支付退款退单接口
前言 一般而言,我们其实很少对接退款接口,因为退款基本都是商家自己决定后进行操作的,但是苹果比较特殊,用户可以直接向苹果发起退款请求,苹果觉得合理会退给用户,但是目前公司业务还是需要对接这个接口&am…...
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
基于ARM语音识别的智能家居系统 我们上一篇,我们实现在Linux系统下编译程序,我们首先通过两个小练习来熟悉一下如何去编译。今天,我们来介绍一下LCD屏幕基本使用。 一、LCD屏幕基本使用 如何使用LCD屏幕? 1、打开开发板LCD设…...
Web前端—移动Web第四天(vw适配方案、vw和vh的基本使用、综合案例-酷我音乐)
版本说明 当前版本号[20231122]。 版本修改说明20231122初版 目录 文章目录 版本说明目录移动 Web 第四天01-vw适配方案vw和vh基本使用vw布局vh布局混用问题 02-综合案例-酷我音乐准备工作头部布局头部内容搜索区域banner 区域标题公共样式排行榜内容推荐歌单布局推荐歌单内…...
报错注入 [极客大挑战 2019]HardSQL1
打开题目 输入1或者1",页面均回显NO,Wrong username password!!! 那我们输入1 试试万能密码 1 or 11 # 输入1 and 12 # 输入1 union select 1,2,3 # 输入1 ununionion seselectlect 1,2,3 # 输入1 # 输入1# 页面依旧回…...
【MATLAB源码-第83期】基于matlab的MIMO中V-BALST结构ZF和MMSE检测算法性能误码率对比。
操作环境: MATLAB 2022a 1、算法描述 在多输入多输出(MIMO)通信系统中,V-BLAST(垂直波束形成层间空间时间编码技术)是一种流行的技术,用于提高无线通信的数据传输速率和容量。它通过在不同的…...
Android13 新增 Stable AIDL接口
问题描述: 我需要在netd aidl 中添加新的接口: 设置网卡MAC地址: void setHardwareAddress(in utf8InCpp String iface, in utf8InCpp String hwAddr); 背景: Android 10 添加了对稳定的 Android 接口定义语言 (AIDL) 的支持&…...
Postman API Enterprise 10.18.1 Crack
适合您企业的 Postman API 平台 掌控您的 API 环境。构建更好的 API。加快产品开发。 无论您处于 API 之旅的哪个阶段,Postman 都会为您提供帮助 想让您团队的 API 更容易被发现吗?希望减少开发和质量检查之间的滞后时间?想要更快地让新开发…...
电脑内存升级
ddr代兼容 自从DDR内存时代开启之后,只要满足内存的插槽规格相同(DDR3或DDR4或DDR5即为内存规格)这一条件,不同品牌、不同频率以及不同容量的茶品都可以一起使用,除了品牌和容量的影响之外,不同频率的搭配可能会造成性能方面的影…...
ExcelBDD PHP Guideline
在PHP里面支持利用Excel的BDD,也支持利用Excel进行参数化测试 ExcelBDD Use Excel file as BDD feature file, get example data from Excel files, support automation tests. Features The main features provided by this library are: Read test data acco…...
C++静态链接库的生成以及使用
目录 一.前言二.生成静态链接库三.使用静态链接库四.其他 一.前言 这篇文章简单讨论一下VS如何生成和使用C静态链接库,示例使用VS2022环境。 二.生成静态链接库 先创建C项目-静态库 然后将默认生成的.h和.cpp文件清理干净,当然你也可以选择保留。 然…...
【2024系统架构设计】 系统架构设计师第二版-未来信息综合技术
目录 一 信息物理系统 二 人工智能 三 机器人技术 四 边缘计算 五 数字孪生体...
JavaFX修改软件图标
JavaFX默认使用jdk的程序图片显示,可以通过以下代码进行修改设置 stage.getIcons().add(new Image("static/icon.png")); static/icon.png改为自己图片路径 这里可以使用相对路径和绝对路径,看自己需求设置 例: import javafx.a…...
Linux ps -ef|grep去除 grep --color=auto信息
linux 监控 进程判断是否启动可通过该指令实现 ps -ef|grep java指令结果为 # -v 参数有过滤作用 ps -ef|grep java |grep -v grep...
jQuery的学习(一篇文章齐全)
目录 Day29 jQuery 1、jQuery介绍 2、jQuery的选择器 2.1、直接查找 2.2、导航查找 3、jQuery的绑定事件 案例1:绑定取消事件 案例2:模拟事件触发 4、jQuery的操作标签 tab切换案例jQuery版本: 案例1: 案例2ÿ…...
心理专科医院选择指南,真实案例分享
行业痛点分析当前,重庆的心理健康领域正面临着一系列技术挑战。许多心理疾病的患者因病耻感与认知偏差,隐瞒病情,导致病情得不到及时有效的治疗。另外,重庆优质心理医疗资源紧张,患者在预约专家资源、体验感方面均感到…...
CANN/hcomm pre-commit 使用指导
pre-commit 工具使用指导 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 概述 pre-commit 是一个 Git Hooks 框架࿰…...
CANN/asc-tools NPU检查工具
npu_check 【免费下载链接】asc-tools Ascend C Tools仓是CANN基于Ascend C编程语言推出的配套调试工具仓。 项目地址: https://gitcode.com/cann/asc-tools 概述 Ascend C Tools提供的孪生调试分为debug功能和npu check功能,debug功能包含诸如是否合法使用…...
Python量化投资终极指南:免费快速获取同花顺问财数据的完整解决方案
Python量化投资终极指南:免费快速获取同花顺问财数据的完整解决方案 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 在量化投资的世界里,数据获取往往是最耗时耗力的环节。想象一下&#x…...
抖音下载神器:douyin-downloader免费批量下载工具完整教程
抖音下载神器:douyin-downloader免费批量下载工具完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...
Windows PDF处理终极指南:Poppler预编译包零配置解决方案
Windows PDF处理终极指南:Poppler预编译包零配置解决方案 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows上的PDF处理工具…...
命令行技能管理工具:从自动化脚本到团队协作的工程实践
1. 项目概述:一个为开发者赋能的命令行技能管理工具如果你是一名开发者,尤其是经常在终端里摸爬滚打的后端、运维或者全栈工程师,你一定有过这样的经历:为了完成一个复杂的任务,需要在终端里敲入一长串命令,…...
AI产品实战技能包:六大思维框架赋能AI编码助手,解决产品从0到100的核心难题
1. 项目概述:一套为AI编码时代的产品人打造的实战技能包如果你正在用Claude Code、Cursor或者GitHub Copilot这样的AI编码助手来构建产品,你可能会发现一个现象:工具的能力越来越强,但产品从想法到落地、从上线到增长的路径&#…...
突破农田杂草检测难题!DINOv3×YOLO26 打造蔬菜田精准除草 AI 模型
点击蓝字关注我们关注并星标从此不迷路计算机视觉研究院公众号ID|计算机视觉研究院学习群|扫码在主页获取加入方式https://arxiv.org/pdf/2603.00160计算机视觉研究院专栏Column of Computer Vision Institute本文提出DINOv3-YOLO26混合框架,…...
ClawSwap SDK:一站式DEX聚合器集成方案与实战指南
1. 项目概述:一个为去中心化交易聚合而生的SDK最近在开发一个需要深度集成去中心化交易(DEX)功能的项目,我花了不少时间研究市面上的各种工具。在这个过程中,我发现了WarTech9/clawswap-sdk这个仓库。简单来说…...
