hacktricks/pentesting-web/file-inclusion/via-php_session_upload_progress.md
2023-08-03 19:12:22 +00:00

5.6 KiB
Raw Blame History

通过PHP_SESSION_UPLOAD_PROGRESS进行LFI2RCE

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

基本信息

如果你发现了一个本地文件包含漏洞,即使你没有会话并且session.auto_startOff。如果**session.upload_progress.enabledOn,并且你在多部分POST数据中提供了PHP_SESSION_UPLOAD_PROGRESSPHP将会为你启用会话**。

$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'  -F 'file=@/etc/passwd'
$ ls -a /var/lib/php/sessions/
. .. sess_iamorange

In the last example the session will contain the string blahblahblah

请注意,通过**PHP_SESSION_UPLOAD_PROGRESS,您可以控制会话中的数据**因此如果您包含会话文件您可以包含您控制的部分例如一个php shellcode

{% hint style="info" %} 尽管互联网上的大多数教程都建议您将session.upload_progress.cleanup设置为Off以进行调试。但是PHP的默认session.upload_progress.cleanup仍然是On。这意味着您的会话中的上传进度将尽快被清除。因此,这将是竞争条件。 {% endhint %}

CTF

在评论此技术的原始CTF中,仅利用竞争条件是不够的,加载的内容还需要以字符串@<?php开头。

由于session.upload_progress.prefix的默认设置,我们的SESSION文件将以一个烦人的前缀upload_progress_开头,例如:upload_progress_controlledcontentbyattacker

去除初始前缀的技巧是将有效载荷进行3次base64编码,然后通过convert.base64-decode过滤器进行解码,这是因为当base64解码时PHP会删除奇怪的字符所以经过3次后只有攻击者发送的有效载荷保留(然后攻击者可以控制初始部分)。

更多信息请参阅原始写作https://blog.orange.tw/2018/10/和最终利用https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
另一个写作在https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥