3.7 KiB
通过 PHP_SESSION_UPLOAD_PROGRESS 进行 LFI2RCE
从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
- 如果您想看到您的公司在 HackTricks 中做广告或下载 PDF 版的 HackTricks,请查看订阅计划!
- 获取官方 PEASS & HackTricks 商品
- 探索PEASS 家族,我们的独家NFTs
- 加入 💬 Discord 群组 或 电报群组 或在 Twitter 🐦 @hacktricks_live** 上**关注我们。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。
基本信息
如果您发现了一个本地文件包含漏洞,即使您没有会话且 session.auto_start
为 Off
。如果 session.upload_progress.enabled
为 On
,并且您在多部分 POST 数据中提供了 PHP_SESSION_UPLOAD_PROGRESS
,PHP 将为您启用会话。
$ 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 %}
夺旗赛
在原始夺旗赛中,评论了这种技术,利用竞争条件是不够的,加载的内容还需要以字符串 @<?php
开头。
由于 session.upload_progress.prefix
的默认设置,我们的会话文件将以烦人的前缀 upload_progress_
开头,例如:upload_progress_controlledcontentbyattacker
去除初始前缀的技巧是将有效载荷进行三次 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/