CTF 代码审计之绕过过滤的空白字符
题目
<?php
header("Content-Type:text/html;charset=utf-8");
highlight_file('02kbzf.php');//引入名为 flag2.php 的文件。
include('f' . 'lag2' . '.php');//初始化变量 $info 和 $req。
$info = "";
$req = [];//读取文件 flag2.php 的内容到变量 $flag 中,使用 trim 函数去除读取结果的首尾空白字符
$flag = trim(@file_get_contents('fl' . 'a' . 'g2' . '.php'));ini_set("display_error", false);
error_reporting(0);//检查 GET 请求参数中是否存在名为 number 的字段,如果不存在,则输出一个提示信息和一个 HTTP 响应头 hint,并终止脚本的执行。
if(!isset($_GET['number'])){header("hint:" . hash("md5", "2djwioadopkwapodkpawkpdw.txt"));die("please refuel!!");
}//对键值进行过滤处理,避免sql注入
foreach([$_GET, $_POST] as $global_var) {foreach($global_var as $key => $value) {$value = trim($value);if(is_string($value)){$req[$key] = addslashes($value);}}
}//定义 is_hwhs_number 函数,用于判断一个数字是否为回文数字。
function is_hwhs_number($number) {$number = strval($number);$i = 0;$j = strlen($number) - 1;while($i < $j) {if($number[$i] !== $number[$j]) {return false;}$i++;$j--;}return true;
}//判断传入的 number 是否为数字类型/整数类型,如果是,则返回一个提示信息。
if(is_numeric($_REQUEST['number'])) {$info="抱歉您输入的是数字";
}
elseif($req['number']!=strval(intval($req['number']))) {$info = "数字必须等于其整数!!";
}
else {//将整数化后的 number 和其反转后的值进行比较,如果不相同,则返回提示信息。$value1 = intval($req["number"]);$value2 = intval(strrev($req["number"]));if($value1!=$value2=232){$info="这不是回文数字!!";}else {//判断 number 是否为回文数字,如果是,则返回一个提示信息,否则输出 flag2.php 文件的内容。if(is_hwhs_number($req["number"])){$info = "{$value1} 是一个回文数字!";}else {var_dump($flag);}}
}
?>
函数
代码中使用到的函数:
- trim:用于删除字符串两端的空白字符(包括空格、制表符、换行符等)。
- intval:【取整】
- strval:将变量转换为字符串
- strrev:用于翻转字符串,将原先的字符串首尾对调。
- addslashes:用于对字符串进行转义,将一些特殊字符转换成它们的转义形式,从而避免 SQL 注入。例如,将单引号
'转义成\',将双引号"转义成\",将反斜杠\转义成\\等。
部分代码解释
$value1 = intval($req["number"]);$value2 = intval(strrev($req["number"]));
-
这两行代码分别将字符串 $req[“number”] 转成整数,分别存储在 $value1 和 $value2 变量中。
-
其中,intval 函数将字符串转换为整数,如果 $req[“number”] 实际上不是一个数值字符串,则该函数返回 0。
-
在第二行代码中,strrev 函数将字符串反转,即将字符串中的字符顺序翻转过来,例如,strrev(‘123’) 的输出结果为 ‘321’。然后再将反转后的字符串转成整数,存储在 $value2 变量中。
-
这两个变量的作用是为了比较 $req[“number”] 和它的反转字符串是否相等。如果相等,则说明 $req[“number”] 是一个回文数,否则不是回文数。
思路
审计代码可以发现,number必须符合下面3个条件才可以输出flag:
- number不为空,且不能是一个数值型数字, 但过滤前得是数字
- number不能是一个回文数,过滤后是回文数。
$value1!=$value2=232,限制number只能为232
- number要为非数值,理所当然想到空格字符%20和空字符%00。注意
is_numeric函数对于%20空格字符只能放在数值后,空字符%00无论是放在前后都可以判断为非数值。所以这里选%00. - %0C :是 URL 编码中的一种,它代表的是一个 ASCII 控制字符,即换页(Form Feed)
\f。在 PHP 中,%0C 会被解析成一个字符,会被 is_hwhs_number 函数判断为不是回文数字,从而进入 var_dump 的分支,输出 $flag 的内容。
POC
URL?number=%00%0C232
得到flag如下:
C:\phpstudy_pro\WWW\pass2\02kbzf.php:58:string '<?php$flag ="xyctf6d4w68a4dwwa64dw";?>' (length=44)
参考
- php代码学习(二)绕过空白过滤
- PHP代码审计分段讲解
- 绕过过滤的空白字符
相关文章:
CTF 代码审计之绕过过滤的空白字符
题目 <?php header("Content-Type:text/html;charsetutf-8"); highlight_file(02kbzf.php);//引入名为 flag2.php 的文件。 include(f . lag2 . .php);//初始化变量 $info 和 $req。 $info ""; $req [];//读取文件 flag2.php 的内容到变…...
【Vue】 Vue3 安装说明,适合小白新手
1、独立版本 我们可以在 Vue.js 的官网上直接下载最新版本, 并用 下载 Vue.js https://unpkg.com/vuenext 2、使用 CDN 方法 以下推荐国外比较稳定的两个 CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。 Staticfile CDN(国内&am…...
电脑提示“系统找不到指定的文件”怎么办?
“系统找不到指定的文件”对于Windows用户来说是一个很常见的错误,尤其是Win10用户,经常会遇到Win10提示找不到指定文件。在此错误后面有时还会出现错误代码:0x80070002,但是,故障类型或代码在不同的操作系统规范上是不…...
向openssl中添加一个最简单的算法
文章目录 一、尝试在sha.c中添加新的函数二、添加自定义算法2.1 添加对应文件2.2 相关配置2.3 编译运行 一、尝试在sha.c中添加新的函数 在尝试添加新算法前,我先尝试在原有的旧算法中添加一个新函数,看是否能被编译并生成对应的动态链接库。 关于open…...
自己公司开发的ERP系统,怎么对接京东,淘宝等这些电商平台?
得益于互联网基建的成熟及快速发展的电子商贸经济,我国线上零售市场快速增长,2022年全国线上零售额达到13.79万亿元,占社会消费品零售总额的比重为27.2%,也就是说每卖出三件零售商品,就有一件是从线上销售。中大型零售…...
联想集团财报不及华尔街预期,财务业绩恐将继续恶化
来源:猛兽财经 作者:猛兽财经 华尔街对联想集团财报的预测 在联想集团(00992)公布2024财年第一季度财务业绩之前,华尔街分析师就曾预测,联想集团的收入和利润将实现强劲增长。 具体而言,根据S&…...
计网基础面试题
浏览器输入网址之后发生什么 1,DNS解析过程 2,三次握手 3,TLS通信 4,发送数据 5,四次挥手 TCP三次握手和四次挥手 两台计算机通信的过程 局域网通信———交换机——MAC地址 广域网通信———路由器——IP地址 网…...
设置Linux CentOS7桥接模式连网
在虚拟机上安装centos7系统后,首要任务就是设置网络。 我们在文章《设置linux centos7连接网络》中讨论了如何设置NAT模式连网。本文讨论如何在设置好NAT模式后,调换为桥接模式。 仍采用图形化方式设置方法。 一、查看物理机网络 把虚拟机设置为桥接…...
Mysql底层数据结构为什么选择B+树
索引底层采用什么数据结构,为什么使用B树而不是其他数据结构: (1)如果采用二叉树:使用递增字段作为索引时,二叉树会退化成链表,查找效率太低 (2)如果采用红黑树…...
R语言列操作函数
目录 一.dplyr包 1.新增变量和变量重新赋值 2.筛选行 3.筛选列 4.分组计算 5.管道操作符 6.连接数据框 二.tidyr 1.列的分裂 2.列的合并 3.宽数据转长数据 4.长数据转宽数据 一.dplyr包 1.新增变量和变量重新赋值 > head(ToothGrowth)len supp dose 1 4.2 …...
【Unity】VS Code 没有自动补全 MonoBehaviour 的方法
正常来说,在VS Code 输入类似 OnTriggerEnter2D等方法名时,VS Code会根据已经输入的前缀自动提示相关方法。 在不正常的情况下,根据StackOverFlow上面的回答,依次试过了 安装 .NET SDK安装 .NET Framework Dev PackVS Code安装 …...
计算机竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv
文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…...
大厂面试 | 百度一面,顶不住
题目来源:https://www.nowcoder.com/feed/main/detail/d39aabc0debd4dba810b4b9671d54348 前文 本期是【捞捞面经】系列文章的第 2 期,持续更新中…。(更多与往期下方仓库直达) 《捞捞面经》系列正式开始连载啦,据说看…...
c++线程
pthread(部分内容来自菜鸟教程) 创建线程 创建一个 POSIX 线程: #include <pthread.h> pthread_create (thread, attr, start_routine, arg) pthread_create 创建一个新的线程,并让它可执行。 参数: thread :指向线程标…...
【Docker】02-安装mysql
参考教程: https://www.bilibili.com/video/BV1Qa4y1t7YH/?p5&spm_id_frompageDriver&vd_source4964ba5015a16eb57d0ac13401b0fe77 docker安装Mysql 1、拉取最新版本的镜像 docker pull mysq:latestl 2、运行mysql服务 docker run --name mysql -e MYSQL_…...
JAVA每日小知识(关于excel下载时插入和stream流遍历优化)
1、在windows系统下启动rocketmq操作: 在bin目录下使用cmd 分别输入 start mqnamesrv.cmd start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnabletrue 2、在stream流中需要new对象时,可能会出现new很多对象堆积在堆中,这是需要用try,…...
阿里后端开发:抽象建模经典案例
0.引言 在互联网行业,软件工程师面对的产品需求大都是以具象的现实世界事物概念来描述的,遵循的是人类世界的自然语言,而软件世界里通行的则是机器语言,两者间跨度太大,需要一座桥梁来联通,抽象建模便是打…...
【车载以太网测试从入门到精通】——DoIP BootLoader刷写测试(含CAPL源码)
系列文章目录 文章目录 系列文章目录前言一、DoIP刷写环境搭建二、DoIP刷写工程使用方法三、DoIP刷写CAPL源码四、刷写工程下载链接前言 DoIP概述: DoIP(Diagnostic communication over InternetProtocol),基于IP网络的汽车诊断协议。DoIP技术可实现本地诊断、远程诊断、空…...
RK开发板的USB连接(Ubuntu)
一、安装连接工具 sudo apt-get install putty 二、启动putty工具 sudo putty 三、连接usb,并查看相关的信息 # 查看接入的是否有usb ls /dev/tty* 显示如下:(含有usb接口: /dev/ttyUSB0) /dev/tty /dev/tty23 /d…...
Redis-Cluster集群的部署(详细步骤)
一、环境准备 本次实操为三台机器,关闭防火墙和selinux 注:规划架构两种方案,一种是单机多实例,这里我们采用多机器部署 三台机器,每台机器上面两个redis实例,一个master一个slave,第一列做主库ÿ…...
3步诊断显存故障:memtest_vulkan如何帮你精准定位显卡问题?
3步诊断显存故障:memtest_vulkan如何帮你精准定位显卡问题? 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 在显卡稳定性测试领域&#…...
02-从零开始编写操作系统 - BIOS 中断与屏幕显示
引导打印 - BIOS 中断与屏幕显示 从零开始编写操作系统 - 第二章 开始之前你可能需要 Google 了解的概念 interrupt, BIOS, ISR, IVT, int 0x10, cpu-registers 目的 使用 BIOS 中断在屏幕上打印字符和字符串 🌟 支持一下 如果这个教程对你有帮助,欢…...
【UE6.5 C++27 适配权威指南】:20年引擎老兵亲授7步零错误迁移法(含编译器链兼容性验证清单)
第一章:UE6.5 C27 适配的战略认知与前置准备Unreal Engine 6.5 对 C27 标准的初步支持标志着引擎底层工具链的重大演进。这一适配并非简单的编译器升级,而是涉及构建系统、反射机制、蓝图互操作性及内存模型兼容性的系统性重构。开发者需摒弃“仅更新编译…...
LFM2.5-1.2B-Thinking-GGUF基础教程:理解llama.cpp中n_ctx/n_batch/n_threads参数协同
LFM2.5-1.2B-Thinking-GGUF基础教程:理解llama.cpp中n_ctx/n_batch/n_threads参数协同 1. 模型与运行环境概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,特别适合在资源有限的设备上快速部署。这个模型采用GGUF格式,…...
KKManager技术指南:从基础配置到效能优化的全方位实践
KKManager技术指南:从基础配置到效能优化的全方位实践 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager 一、价值定位:重新定义模组管理…...
5步实现图表数据提取自动化:用WebPlotDigitizer提升科研效率80%
5步实现图表数据提取自动化:用WebPlotDigitizer提升科研效率80% 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 还在为手动…...
LingBot-Depth案例分享:修复SLAM生成的稀疏深度,效果实测
LingBot-Depth案例分享:修复SLAM生成的稀疏深度,效果实测 1. 引言:SLAM深度修复的挑战 在机器人导航和增强现实应用中,SLAM(同步定位与地图构建)系统生成的深度图往往存在一个显著问题:稀疏性…...
Wallpaper Engine下载器革新:突破创意工坊壁纸获取瓶颈的高效解决方案
Wallpaper Engine下载器革新:突破创意工坊壁纸获取瓶颈的高效解决方案 【免费下载链接】Wallpaper_Engine 一个便捷的创意工坊下载器 项目地址: https://gitcode.com/gh_mirrors/wa/Wallpaper_Engine 你是否曾因Steam创意工坊复杂的下载流程而放弃心仪的动态…...
intv_ai_mk11 GPU高效利用:支持FP16+CPU offload混合推理,显存不足时自动降级
intv_ai_mk11 GPU高效利用:支持FP16CPU offload混合推理,显存不足时自动降级 1. 什么是intv_ai_mk11 AI对话机器人 intv_ai_mk11是一款基于7B参数Llama架构的AI对话助手,专门设计用于在GPU服务器上高效运行。这个智能对话系统不仅能回答各类…...
Qwen3.5-35B-A3B-AWQ-4bit企业降本增效案例:替代人工审核10万+商品图的自动化方案
Qwen3.5-35B-A3B-AWQ-4bit企业降本增效案例:替代人工审核10万商品图的自动化方案 1. 企业面临的商品图审核挑战 在电商行业,商品图片审核是一项繁重但至关重要的工作。以某大型电商平台为例,每天需要审核超过10万张商品图片,传统…...
