2024-02-05 20:18:17 +00:00
|
|
|
|
# 通过 PHP\_SESSION\_UPLOAD\_PROGRESS 进行 LFI2RCE
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
|
|
|
|
<details>
|
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE(HackTricks AWS 红队专家)</strong></a><strong>!</strong></summary>
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
2024-02-03 16:56:23 +00:00
|
|
|
|
支持 HackTricks 的其他方式:
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
|
|
|
|
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
|
|
|
|
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** 上**关注我们。
|
|
|
|
|
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
2024-02-03 16:56:23 +00:00
|
|
|
|
</details>
|
2022-04-21 00:07:27 +00:00
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
## 基本信息
|
|
|
|
|
|
|
|
|
|
如果您发现了一个**本地文件包含**漏洞,即使您**没有会话**且 `session.auto_start` 为 `Off`。如果 **`session.upload_progress.enabled`** 为 **`On`**,并且您在**多部分 POST** 数据中提供了 **`PHP_SESSION_UPLOAD_PROGRESS`**,PHP 将**为您启用会话**。
|
2022-04-21 00:07:27 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ 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
|
|
|
|
|
```
|
2024-02-05 20:18:17 +00:00
|
|
|
|
请注意,使用 **`PHP_SESSION_UPLOAD_PROGRESS`** 您可以**控制会话内的数据**,因此,如果包含您的会话文件,您可以包含您控制的部分(例如一个 PHP shellcode)。
|
2022-04-21 00:07:27 +00:00
|
|
|
|
|
|
|
|
|
{% hint style="info" %}
|
2024-02-05 20:18:17 +00:00
|
|
|
|
尽管互联网上的大多数教程建议您将 `session.upload_progress.cleanup` 设置为 `Off` 以进行调试。但 PHP 中默认的 `session.upload_progress.cleanup` 仍然是 `On`。这意味着您的会话中的上传进度将尽快清除。因此,这将是**竞争条件**。
|
2022-04-21 00:07:27 +00:00
|
|
|
|
{% endhint %}
|
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
### 夺旗赛
|
2022-04-21 00:07:27 +00:00
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
在[**原始夺旗赛**](https://blog.orange.tw/2018/10/)中,评论了这种技术,利用竞争条件是不够的,加载的内容还需要以字符串 `@<?php` 开头。
|
2022-04-21 00:07:27 +00:00
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
由于 `session.upload_progress.prefix` 的默认设置,我们的**会话文件将以烦人的前缀** `upload_progress_` 开头,例如:`upload_progress_controlledcontentbyattacker`
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
**去除初始前缀**的技巧是**将有效载荷进行三次 base64 编码**,然后通过 `convert.base64-decode` 过滤器解码,这是因为**在 base64 解码时 PHP 会删除奇怪的字符**,所以经过 3 次后,只有**攻击者发送的有效载荷**会**保留**(然后攻击者可以控制初始部分)。
|
2024-02-03 16:56:23 +00:00
|
|
|
|
|
2024-02-05 20:18:17 +00:00
|
|
|
|
更多信息请查看原始写作 [https://blog.orange.tw/2018/10/](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://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/](https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/)
|