SESSION_UPLOAD_PROGRESS 的利用

刚刚做了一道题里面用到了文件包含的SESSION_UPLOAD_PROGRESS 的利用

是这道题捏

[NPUCTF2020]ezinclude

具体解题我就不贴了,主要是做个笔记

Session Upload Progress 最初是PHP为上传进度条设计的一个功能,在上传文件较大的情况下,PHP将进行流式上传,并将进度信息放在Session中,此时即使用户没有初始化Session,PHP也会自动初始化Session。而且,默认情况下session.upload_progress.enabled是为On的,也就是说这个特性默认开启。所以,我们可以通过这个特性来在目标主机上初始化Session。

从上面官方的案例和结果中可以看到,session中一部分数据(session.upload_progress.name)是用户自己可以控制的。那么我们只要在上传文件的时候,同时POST一个恶意的字段 PHP_SESSION_UPLOAD_PROGRESS,目标服务器的PHP就会自动启用Session,Session文件将会自动创建。

PHP SESSION 的存储

Session会话储存方式

PHP将session以文件的形式存储在服务器某个文件中,可以在php.ini里面设置session的存储位置

默认路径

复制代码
/var/lib/php/sess_PHPSESSID
/var/lib/php/sessions/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID

虽然说正常情况下这个SESSID是随机的,但是我们可以通过在http包里修改cookie值来让SESSID变成固定的

这样我们知道了临时文件的名字后,如果此时目标网站还存在文件包含漏洞的话,我们便可以配合文件包含漏洞来Getshell。其原理大致就是通过 PHP_SESSION_UPLOAD_PROGRESS 在目标主机上创建一个含有恶意代码的Session文件,之后利用文件包含漏洞去包含这个我们已经传入恶意代码的这个Session文件就可以达到攻击效果。

那我们怎么传入恶意文件呢

因为 PHP的 session.upload_progress.cleanup = on 这个默认选项会有限制。即文件上传结束后,PHP 将会立即清空对应Session文件中的内容,这就导致我们在包含该Session的时候相当于在包含了一个空文件,没有包含我们传入的恶意代码。所以我们需要条件竞争,赶在文件被清除前利用包含即可。

python 复制代码
import io
import requests
import threading

sessid = 'whoami'

def POST(session):
    f = io.BytesIO(b'a' * 1024 * 50)
    session.post(
        'http://192.168.43.82/index.php',
        data={"PHP_SESSION_UPLOAD_PROGRESS":"123"},
        files={"file":('q.txt', f)},
        cookies={'PHPSESSID':sessid}
    )

with requests.session() as session:
    while True:
        POST(session)
        print("[+] 成功写入sess_whoami")

这是一个自动化利用的脚本

当这个脚本运行结束后,恶意文件就保留在了服务器中,我们只要用文件包含解析这个恶意文件就能getshell

ps:这个功能在php5.4后才加入

相关推荐
高峰君主42 分钟前
构建智能投资视野:用Python打造个性化股票分析系统
开发语言·python·股票
知攻善防实验室1 小时前
Notepad++ 本地提权漏洞|复现|分析
测试工具·安全·网络安全·notepad++
Python极客之家1 小时前
基于机器学习的智能贫血分析预测系统
人工智能·python·机器学习·数据挖掘·毕业设计·数据可视化分析
Q_Q19632884751 小时前
python+uniapp基于微信小程序的医院陪诊预约系统
开发语言·spring boot·python·微信小程序·django·flask·uni-app
2501_915909062 小时前
Python 爬虫 HTTPS 实战,requests httpx aiohttp 抓取技巧、证书问题与抓包调试全流程
爬虫·python·ios·小程序·https·uni-app·iphone
测试老哥2 小时前
软件测试之单元测试详解
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
beijingliushao2 小时前
86-python电网可视化项目-6
开发语言·python·信息可视化·数据可视化
寒山李白3 小时前
VSCode中Python库识别的设置(关于解决VSCode中Python库引入未下载的库不显示黄色虚线的问题)
ide·vscode·python
豌豆花下猫3 小时前
Python 潮流周刊#121:工程师如何做出高效决策?
后端·python·ai