[SUCTF 2018]annonymous1

知识点:

        匿名函数创建其实有自己的名字(%00lambda_%d)

进入页面开始代码审计.

<?php  // 使用 create_function 创建一个匿名函数,该函数调用 die() 函数并执行 `cat flag.php` 命令(在服务器上执行,如果PHP环境配置不当的话)。  
// 注意:`cat flag.php` 尝试读取名为 flag.php 的文件内容,这通常用于CTF(Capture The Flag)竞赛中,文件包含“flag”(即比赛的解决标志)。  
// 但直接在PHP中执行系统命令(如 `cat`)是危险的,特别是当命令来源不可控时。  
$MY = create_function("","die(`cat flag.php`);");  // 生成一个随机的32字节字符串,并使用bin2hex函数将其转换为十六进制表示,用作函数名的前缀。  
$hash = bin2hex(openssl_random_pseudo_bytes(32));  // 使用 eval() 函数动态地创建一个新函数,函数名为 "SUCTF_" 加上之前生成的随机哈希值。  
// 这个新函数全局调用之前创建的 $MY 匿名函数,即执行 `die(`cat flag.php`);`。  
// 使用 eval() 是非常危险的,因为它会执行任何传递给它的PHP代码。  
eval("function SUCTF_$hash(){"  ."global \$MY;" // 声明使用全局变量 $MY  ."\$MY();" // 调用 $MY 匿名函数  ."}");  // 检查 $_GET['func_name'] 是否被设置。  
// 如果设置了,则尝试调用对应的函数。这里存在一个严重的安全问题,因为它允许远程用户通过URL参数调用任意函数。  
if(isset($_GET['func_name'])){  $_GET["func_name"](); // 直接调用通过URL参数指定的函数  die(); // 调用后终止脚本  
}  // 如果没有通过URL传递func_name参数,则显示当前文件的源代码。  
show_source(__FILE__);

知识点: 当在调用执行 create_function() 创建匿名函数的时候,其实创建的函数是有名字的

格式为:%00lambda_%d ,而%d则是一个计数器会递增,用来记录create_function()这个函数执行了多少次.

所以我们可以通过调用那个匿名函数(%d=1)来实现cat flag.php的操作.

开始构造payload:

http://1168ccea-8b4f-4672-8b5d-81ce3115b007.node5.buuoj.cn:81/?func_name=%00lambda_1

开始注入.

获得flag.

当然还没有结束 ,尝试了几次%d=1后这个payload才失效,然后就尝试%d=2又成功了,之后经过我多次的尝试当%d递增到9后他又回到了%d=1,而且每次%d的变动都是经过了几次的重复才会递增,

这说明这个服务器可能是一个多进程模式,每次请求都会有一个新的php环境(有限),所以%d会递增(存在规律).

 

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

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

相关文章

如何在 DigitalOcean Droplet 云服务器上部署 Next.js 应用

Next.js 是一个流行的 React 框架&#xff0c;可轻松构建服务器渲染的 React 应用程序。在本教程中&#xff0c;我们将介绍如何使用 Nginx 作为反向代理&#xff0c;在 DigitalOcean 的 droplet 云主机上部署 Next.js 应用程序。以下是逐步指南&#xff0c;假设你已经准备好部署…

基于SpringBoot+Vue+MySQL的牙科医就诊管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的…

HTML/CSS/JS学习笔记 Day2(HTML--网页标签 上)

跟着该视频学习&#xff0c;记录笔记&#xff1a;【黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day2 内容梳理&#xff1a;…

儿童孤独症康复学校:打破孤岛,关爱与成长

在世界的某个角落&#xff0c;有一群孩子&#xff0c;他们如同夜空中最亮的星&#xff0c;却往往因孤独症的屏障&#xff0c;而难以与周围的世界建立连接。这些孩子&#xff0c;如同被无形的岛屿环绕&#xff0c;渴望着被理解、被接纳。而正是在这样的背景下&#xff0c;星贝育…

[C++11#48][智能指针] RAII原则 | 智能指针的类型 | 模拟实现 | shared_ptr | 解决循环引用

目录 一.引入 1. 为什么需要智能指针&#xff1f; 2. 什么是内存泄漏&#xff1f; 内存泄漏分类 3.回忆 this 二. 原理 1. RAII 资源获取即初始化 2.像指针一样 三. 使用 1. 问题&#xff1a; string 的浅拷贝 2.解决 auto_ptr 自定义 auto_ptr unique_ptr - 独占…

原生 iOS 引入 Flutter 报错 kernel_blob.bin 找不到

情况 在一次原生 iOS 项目中引入 Flutter 的过程中&#xff0c;在模拟器中运行出现报错&#xff1a; 未能打开文件“kernel_blob.bin”&#xff0c;因为它不存在。 如下图&#xff1a; 模拟器中一片黑 原因&解决方案 这个是因为 Flutter 的打包 iOS framework 命令中…

ES之三:springboot集成ES

一.选择版本很重要&#xff0c;不然会找不到好多方法 明明有Timeout方法&#xff0c;不报红&#xff0c;运行时&#xff0c;报错&#xff0c;找不到该类 ClassNotFoundException 为了避免使用的Elasticsearch版本和SpringBoot采用的版本不一致导致的问题&#xff0c;尽量使用…

高校大模型实验室大模型应用平台

大模型应用平台是一款专为高校大模型应用场景教学和科研打造的知识库问答系统。该平台易于使用&#xff0c;知识库支持常见的txt、doc、pdf、md等数据文件上传&#xff0c;同时提供了简洁易懂的操作配置界面&#xff0c;使用户可以轻松地搭建和训练AI应用&#xff0c;并快速进行…

arm64高速缓存基础知识

高速缓存的替换策略 随机法&#xff1a;随机地确定替换的高速缓存行&#xff0c;由一个随机数产生器产生随机数来确认替换行 FIFO法&#xff1a;选择最先调入的高速缓存行进行替换 LRU法&#xff1a;最少使用的行优先替换。 高速缓存的共享属性 内部共享的高速缓存通常指的…

Flutter基本组件Text使用

Text是一个文本显示控件&#xff0c;用于在应用程序界面中显示单行或多行文本内容。 Text简单Demo import package:flutter/material.dart;class MyTextDemo extends StatelessWidget {const MyTextDemo({super.key});overrideWidget build(BuildContext context) {return Sca…

飞速了解Conda的作用和安装使用教程

当我们想要在github上克隆不同的项目下来运行时&#xff0c;会发现项目的语言环境或包的版本不同&#xff0c;出现版本冲突问题会导致程序无法运行、兼容性问题频出。我们常常需要管理多个项目&#xff0c;每个项目可能依赖于不同的包版本或编程语言环境。如果不加以管理&#…

agentuniverse快速开始和踩坑

https://github.com/alipay/agentUniverse/tree/mastergithub地址:https://github.com/alipay/agentUniverse/tree/master 老大看了演示demo也想跟着做个agent工具,但踩坑太多,含泪写下博客 前置环节 git clone https://github.com/alipay/agentUniverse.git conda create -n…

AndroidStudio清除重置Http Proxy代理的方式

问题背景 在国内做代码开发的都知道&#xff0c;在国际互联网我们存在看不见的墙&#xff0c;导致无法访问一些代码库和资源&#xff0c;所以在使用开发工具拉取第三方库的时候总会遇到无法连接或者连接超时的情况&#xff0c;所以就会使用一些安全的网络代理工具&#xff0c;辅…

【JavaSE】Java基本数据类型缓存池

new Integer(18) 、 Integer.valueOf(18) 、Integer.valueOf(300) 的区别 new Integer(18) &#xff1a;每次都会创建一个新对象Integer.valueOf(x)&#xff1a; x in [-128, 127]&#xff1a;使用缓存池中的对象x not in [-128, 127]&#xff1a;创建新对象 Integer缓存池大…

【Qt】事件分发器

事件分发器 概述 在 Qt 中&#xff0c;事件分发器(Event Dispatcher) 是⼀个核⼼概念&#xff0c;⽤于处理 GUI 应⽤程序中的事件。事件分发器负责将事件从⼀个对象传递到另⼀个对象&#xff0c;直到事件被处理或被取消。每个继承⾃ QObject类 或 QObject类 本⾝都可以在本类中…

《纳瓦尔宝典》的核心思想在于阐述如何通过智慧和策略实现财富自由和生活幸福

《纳瓦尔宝典》概况 图书概况 《纳瓦尔宝典》是2022年5月10日由中信出版社出版的一本书籍&#xff0c;作者是美国作家埃里克乔根森。该书通过收集和整理硅谷知名天使投资人纳瓦尔拉维坎特在推特、博客和播客等平台上的智慧箴言&#xff0c;形成了一本关于财富积累和幸福人生的…

如何在红米手机中恢复已删除的照片?(6 种方式可供选择)

凭借出色的相机和实惠的价格&#xff0c;小米红米系列已成为全球知名品牌。但是&#xff0c;最近有些人抱怨他们在 红米设备上丢失了许多珍贵的图片或视频&#xff0c;并希望弄清楚如何从小米手机恢复已删除的照片。好吧&#xff0c;在小米设备上恢复已删除的视频/照片并不难。…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月8日新模型预测第81弹

经过80期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;70多期一共只错了8次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大…

牛客周赛 Round 59(下)

逆序数 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行代码 #include<bits/stdc.h> using namespace std; typedef long long ll; int main() {ll n,k;cin>>n>>k;ll sum(n*(n-1))/2;cout<<sum-k<<endl;return 0; } 代码思路 组合数的计…

手机到了外地ip地址就变了吗

手机到了外地IP地址就变了吗&#xff1f;随着智能手机的普及&#xff0c;人们越来越频繁地使用手机进行各种网络活动。然而&#xff0c;关于手机IP地址是否会随着地理位置的变化而改变&#xff0c;许多用户仍心存疑惑。本文将深入探讨这一问题&#xff0c;揭示IP地址变化的奥秘…