LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
如果你发现了一个 Local File Inclusion,即使你 没有会话 且 session.auto_start
为 Off
。如果 session.upload_progress.enabled
为 On
,并且你在 multipart 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)。
note
尽管互联网上的大多数教程建议你将 session.upload_progress.cleanup
设置为 Off
以便于调试,但 PHP 中默认的 session.upload_progress.cleanup
仍然是 On
。这意味着你的上传进度将在尽可能快的时间内被清理。因此这将是 竞争条件。
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/
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。