当前位置: 首页 > article >正文

CTFshow系列——PHP特性Web105-108

今天讲解的是PHP的Web105-108题目解析讲解文章目录Web105新题型分析代码构造Payload思路最终payloadWeb106Web107代码分析方法一PHP弱类型比较方法二直接使v3的md5值等于v1Web108代码要点精简利用思路最终payload总结Web105新题型好样子先看代码?php highlight_file(__FILE__);include(flag.php);error_reporting(0);$error你还想要flag嘛;$suces既然你想要那给你吧;foreach($_GETas$key$value){if($keyerror){die(what are you doing?!);}$$key$$value;}foreach($_POSTas$key$value){if($valueflag){die(what are you doing?!);}$$key$$value;}if(!($_POST[flag]$flag)){die($error);}echoyour are good.$flag.\n;die($suces);?你还想要flag嘛从代码我们可以看到与上一关的题型又不一样了分析代码初始化定义了两个字符串变量$error和$suces$_GET循环:首先它检查 GET 参数的键$key是否等于字符串 ‘error’。如果是程序会立即终止。然后它使用了一个非常关键的技巧可变变量($$key $$value)。这意味着以 $key 的值为名字的那个变量它的值将被设置为以 $value 的值为名字的那个变量的值。例如如果你传入GET 参数ab代码就会执行$$a $$b等同于 $a $b。$_POST循环:它检查 POST 参数的值$value是否等于字符串 ‘flag’。如果是程序会立即终止。和GET 循环一样它也使用了可变变量$$key $$value最终检查:代码执行if (!($_POST[flag] $flag)):这个条件是核心只有当POST参数中名为flag的值等于$flag变量的值时条件才为假程序才能继续执行最终打印出 flag。构造Payload思路假设 flag.php 内有$flagFLAG{123};$error你还想要flag嘛;// 初始值我们发送GET:?aflagPOST body:errora脚本按顺序执行2. 处理$_GET循环GET 有a flag所以执行$$key $$value就是$a$flag;// 把真实 flag 的值复制到$a现在$aFLAG{123}$flagFLAG{123}$error你还想要flag嘛$_POSTarray(errora)// 由 PHP 填充的 POST 初始数组处理$_POST循环POST 有一项keyerror,valuea。先检查if($value‘flag’)—— 值是a不是flag不会 die。然后 $$key $$value 即$error$a;也就是把$a的值flag赋给$error$errorFLAG{123}// 注意$error已经被覆盖成 flag到比较 if(!($_POST[‘flag’] f l a g ) ) d i e ( flag)) die(flag))die(error);$_POST[flag]—— 在我们的 POST 中并不存在flag 这个字段所以它是NULL / 未定义与 $flag 字符串不同。因此条件为真比较不等脚本执行die($error)但是$error 已在上一步被赋值成了 flag因此 die($error) 会把 真实 flag 输出到响应并退出。最终payloadWeb106?php highlight_file(__FILE__);include(flag.php);if(isset($_POST[v1])isset($_GET[v2])){$v1$_POST[v1];$v2$_GET[v2];if(sha1($v1)sha1($v2)$v1!$v2){echo$flag;}}?嗯看了一下代码怎么有种似曾相识的感觉这不是Web104的题型吗不过对比了一下还是有点小区别的多了对$v1!$v2的比较老样子直接用数组绕过payload甚至都是一样的# GET参数?v2[]1# POST参数v1[]2没什么好说的直接下一关Web107代码还是有点变化的?php highlight_file(__FILE__);error_reporting(0);include(flag.php);if(isset($_POST[v1])){$v1$_POST[v1];$v3$_GET[v3];parse_str($v1,$v2);if($v2[flag]md5($v3)){echo$flag;}}?代码分析这段 PHP 代码的目的是让用户通过一个特定的条件来获取 flag。它的逻辑步骤如下错误报告与文件引入: 脚本首先禁用所有错误报告 (error_reporting(0))然后通过include(flag.php)引入包含$flag变量的文件。变量赋值:$v1被赋值为POST变量v1的值。$v3被赋值为GET变量v3的值。parse_str()函数:parse_str()函数会将$v1(一个字符串) 解析成 URL 查询字符串的格式并将解析出的变量存储到一个名为$v2的新数组中。例如如果$v1的值是“nameJohnage30”那么 parse_str($v1, $v2) 会创建一个 $v2数组其内容为[‘name’ ‘John’, ‘age’ ‘30’]脚本执行if($v2[flag]md5($v3))。*$v2[flag]是从POST变量 v1提供的字符串中解析出来的flag键对应的值。* 脚本将我们提供的flag值与GET参数$v3字符串的 MD5 哈希值进行比较。方法一PHP弱类型比较要获取 flag只需要需要找到一个$v3的值使得md5($v3)的结果与v2[flag]相等。直接让md5($v3)等于字符串flag是不可能的。这里的漏洞在于 PHP 的松散比较() 和类型转换。当 PHP 使用运算符比较一个 MD5 哈希一个十六进制字符串和一个普通字符串时它会尝试将它们转换为同一类型。思路如果一个 MD5 哈希字符串以0e开头后面跟着纯数字PHP 在进行比较时会将其视为科学计数法表示的数字其值为0。利用这个漏洞我们可以构造出 payload# GET参数?v3s878926199a# POST参数v1flag0目的为了通过PHP弱类型比较使v3解析为0从而与v1相等方法二直接使v3的md5值等于v1大家看到标题应该就知道我们应该怎么做了具体操作先选v3 abcmd5(“abc”) 900150983cd24fb0d6963f7d28e17f72。POST 的 v1 写成flag900150983cd24fb0d6963f7d28e17f72嗯对的就是这么朴实无华Web108?php highlight_file(__FILE__);error_reporting(0);include(flag.php);if(ereg(^[a-zA-Z]$,$_GET[c])FALSE){die(error);}//只有36d的人才能看到flag if(intval(strrev($_GET[c]))0x36d){echo$flag;}?error话不多说直接分析代码好 — 我把这段 PHP 代码逐行分析并给出可直接尝试的 payload含 curl 示例和备选绕过方法。代码要点精简if(ereg(^[a-zA-Z]$,$_GET[c])FALSE){die(error);}if(intval(strrev($_GET[c]))0x36d){echo$flag;}ereg(^[a-zA-Z]$, $_GET[c])字符串必须从头到尾 (^ 和 $)由一个或多个()大写或小写的英文字母([a-zA-Z])组成。strrev($_GET[c])把c字符串反转。intval(...)0x36d把反转后的字符串转换为整数并与十六进制0x36d十进制是877比较。如果相等就输出 flag。利用思路0x36d的字符串表示是0x36d—— 如果strrev(c) 0x36d那么intval(0x36d)在 PHP 中会把它当作 16 进制数解析常见 PHP 行为结果就是0x36d等于 877比较成立输出 flag。因此需要让strrev(c) 0x36d即c strrev(0x36d) d63x0。于是最直接的 payload 是把c设为d63x0请求如下cd63x0解释d63x0反转后是0x36dintval(0x36d)→ 0x36d (877)等于0x36d通过判断输出 flag。最终payload尝试了一下?cd63x0失败了。。。之后我又去网上查询资料老版本的 ereg() 函数存在空字节注入漏洞。如果你在输入字符串中包含一个空字节\0ereg() 会在遇到空字节时停止处理导致它无法匹配到字符串的结尾因此返回 FALSE条件成立。也就是说ereg()在处理字符串时如果遇到 %00会提前终止匹配导致验证绕过那么我们是不是可以利用%00截断来绕过?c778%00没成功。。看了一下网上WP# 最终payload?ca%00778解释开头写个a是为了匹配正则表达式然后%00截断后面的匹配。然后经过strrev以后变成了877%00a再经过intval就变成了877。而877就是0x36d的十进制所以相等。总结无总结。

相关文章:

CTFshow系列——PHP特性Web105-108

今天讲解的是PHP的Web105-108题目解析讲解 文章目录Web105(新题型)分析代码构造Payload思路:最终payload:Web106Web107代码分析方法一:PHP弱类型比较方法二:直接使v3的md5值等于v1Web108代码要点&#xff0…...

容器镜像签名验证:多方信任与策略管理的终极指南

容器镜像签名验证:多方信任与策略管理的终极指南 【免费下载链接】skopeo Work with remote images registries - retrieving information, images, signing content 项目地址: https://gitcode.com/GitHub_Trending/sk/skopeo 在容器化应用的生命周期中&…...

如何使用Checkstyle优化Lambda表达式:从长度控制到参数命名的完整指南

如何使用Checkstyle优化Lambda表达式:从长度控制到参数命名的完整指南 【免费下载链接】checkstyle Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. By default it supports the Google Java Style Gui…...

Pixelmatch:仅150行代码实现极速像素级图像对比的终极指南

Pixelmatch:仅150行代码实现极速像素级图像对比的终极指南 【免费下载链接】pixelmatch The smallest, simplest and fastest JavaScript pixel-level image comparison library 项目地址: https://gitcode.com/gh_mirrors/pi/pixelmatch Pixelmatch是目前最…...

RAGs知识库质量自动化检查:7个关键指标确保AI问答准确性

RAGs知识库质量自动化检查:7个关键指标确保AI问答准确性 【免费下载链接】rags Build ChatGPT over your data, all with natural language 项目地址: https://gitcode.com/gh_mirrors/ra/rags 在构建基于RAG(检索增强生成)技术的AI问…...

揭秘IINA的荣耀之路:从开源新星到行业标杆的获奖历程

揭秘IINA的荣耀之路:从开源新星到行业标杆的获奖历程 【免费下载链接】iina 项目地址: https://gitcode.com/gh_mirrors/iin/iina IINA作为一款备受赞誉的开源媒体播放器,凭借其卓越的性能和用户体验,在行业内获得了广泛认可。这款基…...

技术债务量化终极指南:CTO必备的技术健康度指标解析

技术债务量化终极指南:CTO必备的技术健康度指标解析 【免费下载链接】awesome-cto A curated and opinionated list of resources for Chief Technology Officers, with the emphasis on startups 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-cto …...

QuickGUI界面详解:探索直观设计背后的用户体验哲学

QuickGUI界面详解:探索直观设计背后的用户体验哲学 【免费下载链接】quickgui An elegant virtual machine manager for the desktop 项目地址: https://gitcode.com/gh_mirrors/qu/quickgui QuickGUI作为一款优雅的桌面虚拟机管理器,以其简洁直观…...

Schej.it高级使用技巧:如何利用文件夹功能组织多个会议

Schej.it高级使用技巧:如何利用文件夹功能组织多个会议 【免费下载链接】timeful.app schej helps you quickly find the best time for your group to meet. Its like When2meet with Google Calendar integration! 项目地址: https://gitcode.com/gh_mirrors/sc…...

eslint-plugin-sonarjs核心规则解析:如何检测并修复常见代码问题

eslint-plugin-sonarjs核心规则解析:如何检测并修复常见代码问题 【免费下载链接】eslint-plugin-sonarjs SonarJS rules for ESLint 项目地址: https://gitcode.com/gh_mirrors/es/eslint-plugin-sonarjs eslint-plugin-sonarjs是一款基于SonarJS规则的ESLi…...

C/C++ 中的堆和栈分别是什么?

前言:本人是一位单片机软件工程师,在这里记录一下自己的学习笔记。文档中可能存在不足或错误的地方,欢迎大家批评指出,谢谢!一、什么是堆栈?说到堆栈,肯定跟内存分区有关系。据所周知,我们编写…...

如何利用Web Workers实现Pixelmatch图像对比性能翻倍:完整优化指南

如何利用Web Workers实现Pixelmatch图像对比性能翻倍:完整优化指南 【免费下载链接】pixelmatch The smallest, simplest and fastest JavaScript pixel-level image comparison library 项目地址: https://gitcode.com/gh_mirrors/pi/pixelmatch 在现代Web应…...

综述不会写?8个AI论文写作软件测评:本科生毕业论文+科研写作必备工具推荐

在当前学术写作日益数字化的背景下,越来越多的学生和研究人员开始依赖AI写作工具来提升论文写作效率。然而,面对市场上琳琅满目的产品,如何选择真正适合自己的工具成为一大难题。为此,我们基于2026年的实测数据与用户反馈&#xf…...

拖延症福音:AI论文平台,千笔AI VS PaperRed,专为本科生打造!

随着人工智能技术的迅猛发展,AI辅助写作工具正逐步渗透到高校学术写作场景中,成为本科生完成毕业论文的重要助手。越来越多的学生开始借助这些工具提升写作效率、优化内容结构,尤其是在开题报告、文献综述和正文撰写等环节,AI的作…...

Lullaby VR UI开发指南:Material VR组件使用技巧

Lullaby VR UI开发指南:Material VR组件使用技巧 【免费下载链接】lullaby A collection of C libraries designed to help teams develop virtual and augmented reality experiences 项目地址: https://gitcode.com/gh_mirrors/lu/lullaby Lullaby是一个C库…...

FinalBurn Neo代码架构解析:从C++03合规性看跨平台兼容性设计

FinalBurn Neo代码架构解析:从C03合规性看跨平台兼容性设计 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo(FBNeo)作为一款经典的多平台街机模拟器&am…...

S3QL实战教程:5个实用SQL查询示例帮你玩转S3存储数据

S3QL实战教程:5个实用SQL查询示例帮你玩转S3存储数据 【免费下载链接】s3ql s3ql/s3ql: 是一个用于访问 S3 存储的 SQL 查询引擎。适合对分布式存储和 SQL 查询有兴趣的人,特别是想对 S3 存储进行 SQL 查询的人。特点是支持标准的 SQL 查询语法&#xff…...

验证自己的处理器——基于riscv-tests

在使用riscv-tests之前,我们需要安装riscv-tool-chain 编译链,并将 RISCV 环境变量设置为 RISC-V 工具 install 路径。可以参考之前的文章:ubuntu20.04 riscv-gnu-toolchain编译链极简安装_ubuntu安装risv-gun-tools-CSDN博客 安装好编译链后…...

如何使用Lip Gloss自定义枚举器:为终端列表添加独特标识风格

如何使用Lip Gloss自定义枚举器:为终端列表添加独特标识风格 【免费下载链接】lipgloss Style definitions for nice terminal layouts 👄 项目地址: https://gitcode.com/gh_mirrors/li/lipgloss Lip Gloss是一款强大的终端样式定义工具&#xf…...

如何使用go-swagger防止SQL注入:保护API安全的完整指南

如何使用go-swagger防止SQL注入:保护API安全的完整指南 【免费下载链接】go-swagger Swagger 2.0 implementation for go 项目地址: https://gitcode.com/gh_mirrors/go/go-swagger 在现代Web开发中,SQL注入攻击仍然是最常见且最危险的安全威胁之…...

Rails Performance核心功能解析:从请求追踪到资源监控的完整教程

Rails Performance核心功能解析:从请求追踪到资源监控的完整教程 【免费下载链接】rails_performance Monitor performance of you Rails applications (self-hosted and free) 项目地址: https://gitcode.com/gh_mirrors/ra/rails_performance Rails Perfor…...

如何在5分钟内上手Bitsery:C++开发者必备的高效序列化工具

如何在5分钟内上手Bitsery:C开发者必备的高效序列化工具 【免费下载链接】bitsery Your binary serialization library 项目地址: https://gitcode.com/gh_mirrors/bi/bitsery Bitsery是一款专为C开发者设计的轻量级二进制序列化库,它能帮助你快速…...

终极RetDec高级功能解析:探索函数识别与类型重建的核心技术

终极RetDec高级功能解析:探索函数识别与类型重建的核心技术 【免费下载链接】retdec RetDec is a retargetable machine-code decompiler based on LLVM. 项目地址: https://gitcode.com/gh_mirrors/re/retdec RetDec作为一款基于LLVM的可重定向机器码反编译…...

终极指南:ExcelJS中ProtectionXform如何实现电子表格保护设置的XML转换

终极指南:ExcelJS中ProtectionXform如何实现电子表格保护设置的XML转换 【免费下载链接】exceljs exceljs: 一个用于读取、操作和写入电子表格数据以及样式到XLSX和JSON文件的库,支持Excel文件的逆向工程。 项目地址: https://gitcode.com/gh_mirrors/…...

终极指南:如何让Maccy实现跨屏幕剪贴板管理,提升多显示器工作效率

终极指南:如何让Maccy实现跨屏幕剪贴板管理,提升多显示器工作效率 【免费下载链接】Maccy Lightweight clipboard manager for macOS 项目地址: https://gitcode.com/gh_mirrors/ma/Maccy Maccy作为一款轻量级macOS剪贴板管理器(Light…...

终极Maccy瘦身指南:5个高效方法减小macOS剪贴板管理器体积

终极Maccy瘦身指南:5个高效方法减小macOS剪贴板管理器体积 【免费下载链接】Maccy Lightweight clipboard manager for macOS 项目地址: https://gitcode.com/gh_mirrors/ma/Maccy Maccy作为一款轻量级macOS剪贴板管理器,其小巧的体积是吸引用户的…...

uni-app x 学习系列(五)—— 视图容器 之 View 视图组件

<view> 是 UNI-APP 中布局的基本元素&#xff0c;类似于 HTML 中的 <div> 标签&#xff0c;主要用于创建块级容器。 示例&#xff1a;index.uvue <template><view class"container"><view class"header"><text>轮播图…...

【2026 最新】下载安装 Git 详细教程 (Windows)

一、下载Git 1.下载网址&#xff1a;Git - Downloads (git-scm.com)​https://git-scm.com/downloads 网盘链接&#xff1a; 通过百度网盘分享的文件&#xff1a;Git-2.50.1-64-bit.exe 链接:https://pan.baidu.com/s/1lRrAifTBtCYXAA4qr31UkA?pwddy6bhttps://pan.baidu.com…...

windows默认的环境变量及查看或设置环境变量

文章目录环境变量列表环境变量示例有两种方式。 1、界面查看&#xff0c;右键电脑 | 属性 | 环境变量。 2、cmd窗口&#xff0c;输入set就会列出全部环境变量。 资源管理器可以直接访问环境变量&#xff0c;如资源管理器地址栏输入&#xff1a;%APPDATA%&#xff0c;会直接跳转…...

embedded-graphics核心功能解析:掌握DrawTarget接口与显示驱动集成

embedded-graphics核心功能解析&#xff1a;掌握DrawTarget接口与显示驱动集成 【免费下载链接】embedded-graphics A no_std graphics library for embedded applications 项目地址: https://gitcode.com/gh_mirrors/em/embedded-graphics embedded-graphics是一个专为…...