当前位置:网站首页>文件包含&条件竞争
文件包含&条件竞争
2022-06-30 19:43:00 【哇咔哇咔哇咔哇咔】
session.upload_progress
与open_basedir、allow_url_fopen、allow_url_include等PHP配置一样,session.upload_progress也是PHP的一个功能,同样可以在php.ini中设置相关属性。其中最重要的几个设置如下:
session.upload_progress.enabled = on
session.upload_progress.cleanup =on
session.upload_progress.prefix = “upload_progress_”
session.upload_progress.name = “PHP_SESSION_UPLOAD_PROGRESS”
session.upload_progress.enabled可以控制是否开启session.upload_progress功能
session.upload_progress.cleanup可以控制是否在上传之后删除文件内容
session.upload_progress.prefix可以设置上传文件内容的前缀
session.upload_progress.name的值即为session中的键值
将session.upload_progress.enabled的值设置为on时,此时我们再往服务器中上传一个文件时,PHP会把该文件的详细信息(如上传时间、上传进度等)存储在session当中。
那么这个时候就会有一个前提条件,就是如何初始化session并且把session中的内容写到文件中去呢?
可以注意到,php.ini中session.use_strict_mode选项默认是0,在这个情况下,用户可以自己定义自己的sessionid,例如当用户在cookie中设置sessionid=Lxxx时,PHP就会生成一个文件/tmp/sess_Lxxx,此时也就初始化了session,并且会将上传的文件信息写入到文件/tmp/sess_Lxxx中去
当session.upload_progress.cleanup的值为on时,即使上传文件,但是上传完成之后文件内容会被清空,这怎么办?
这个时候可以利用Python的多线程,进行条件竞争。
利用session.upload_progress进行RCE
一:
通过session_start()才能开启session,那如果没有session_start()这个姿势岂不是就没法利用了。这里我们又要了解一个新的相关配置:session.use_strict_mode
该配置项默认是不启用的,这就代表着可以自己定义session id,比如我在请求包中设置Cookie为PHPSESSID=haha,那么就会生成一个sess_haha的session文件,此时php会自动初始化session,并产生一个键值,格式为配置文件中 session.upload_progress.prefix的值+传入的session.upload_progress.name的值,该键值会被写入session文件。按上面写的相关配置,该键值的格式应该为:upload_progress_+PHP_SESSION_UPLOAD_PROGRESS的值。
二:
因为 session.upload_progress.cleanup默认是开启的,这就导致在上传结束后,session文件中有关上传进度的信息会立马被删除,那怎么才能包含到恶意代码呢:
这里可以用条件竞争的方式来解决该问题,使用burp或python脚本不断发送上传数据包,然后再用相同方式发送文件包含的数据包,就能包含到了
边栏推荐
- CV+Deep Learning——网络架构Pytorch复现系列——basenets(BackBones)(一)
- 杭州炒股开户选择手机办理安全吗?
- 新出生的机器狗,打滚1小时后自己掌握走路,吴恩达开山大弟子最新成果
- 网易云签到可抽奖?那一年我能签到365天。不信?你看。
- 暑期实训21组第一周个人工作总结
- MySQL数据库误删回滚的解决
- Graduates
- QQmlApplicationEngine failed to load component qrc:/main.qml:-1 No such file or directory
- 【论文阅读】Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Baseline
- 企业中台规划和IT架构微服务转型
猜你喜欢

Transport layer uses sliding window to realize flow control

今早,投资人开始集体出差

qt中toLocal8Bit和toUtf8()有什么区别

VR全景拍摄为什么要加盟?巧借资源实现共赢

Enterprise middle office planning and it architecture microservice transformation
Source code analysis of redis ziplist compressed list

Growth summer challenge is coming, exclusive community welfare is coming ~ get CSDN customized T-shirt for free

如何做好测试用例设计

8 - function

CV+Deep Learning——网络架构Pytorch复现系列——basenets(BackBones)(一)
随机推荐
Filebeat自定义index和fields
盘点华为云GaussDB(for Redis)六大秒级能力
盘点华为云GaussDB(for Redis)六大秒级能力
Detailed explanation of specific methods and steps for TCP communication between s7-1500 PLCs (picture and text)
暑期实训21组第一周个人工作总结
台湾SSS鑫创SSS1700替代Cmedia CM6533 24bit 96KHZ USB音频编解码芯片
【1175. 质数排列】
CADD course learning (1) -- basic knowledge of drug design
传输层 使用滑动窗口实现流量控制
Playwright - 滚动条操作
【450. 删除二叉搜索树中的节点】
笔记软件的历史、选择策略以及深度评测
MySQL billing Statistics (Part 1): MySQL installation and client dbeaver connection
太湖 “中国健康农产品·手机直播万里行”走进太湖
Spark - 一文搞懂 Partitioner
matlab 将三角剖分结果保存为STL文件
4.3-inch touch screen 12 channel control port programmable network central control supports mutual backup of 5 central control hosts
What is the difference between tolocal8bit and toutf8() in QT
8 - function
软件工程最佳实践——项目需求分析