hacktricks/pentesting-web/file-inclusion/via-php_session_upload_progress.md

63 lines
4.9 KiB
Markdown
Raw Normal View History

2024-02-10 21:30:13 +00:00
# LFI2RCE를 통한 PHP_SESSION_UPLOAD_PROGRESS
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2024-02-03 16:02:14 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](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**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
2022-04-28 16:01:33 +00:00
</details>
2024-02-05 20:00:40 +00:00
2024-02-10 21:30:13 +00:00
## 기본 정보
2022-04-21 00:07:27 +00:00
2024-02-10 21:30:13 +00:00
**로컬 파일 인클루전**을 발견했지만 **세션이 없는 경우**이며 `session.auto_start`가 `Off`인 경우에도 **`session.upload_progress.enabled`**가 **`On`**이고 **`PHP_SESSION_UPLOAD_PROGRESS`**를 **multipart POST** 데이터에서 제공하면 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-10 21:30:13 +00:00
**`PHP_SESSION_UPLOAD_PROGRESS`**를 사용하면 세션 내의 데이터를 제어할 수 있으므로 세션 파일을 포함시키면 제어 가능한 부분(예: PHP 쉘 코드)을 포함시킬 수 있습니다.
2022-04-21 00:07:27 +00:00
{% hint style="info" %}
2024-02-10 21:30:13 +00:00
인터넷의 대부분의 튜토리얼에서는 디버깅 목적으로 `session.upload_progress.cleanup``Off`로 설정하도록 권장하지만, PHP의 기본 `session.upload_progress.cleanup`은 여전히 `On`입니다. 즉, 세션의 업로드 진행 상황은 가능한 한 빨리 정리됩니다. 따라서 이는 **경쟁 조건**이 될 수 있습니다.
2022-04-21 00:07:27 +00:00
{% endhint %}
2024-02-10 21:30:13 +00:00
### CTF
2022-04-21 00:07:27 +00:00
2024-02-10 21:30:13 +00:00
이 기법이 설명된 [**원래의 CTF**](https://blog.orange.tw/2018/10/)에서는 경쟁 조건을 악용하는 것만으로는 충분하지 않았으며, 로드된 콘텐츠는 `@<?php` 문자열로 시작해야 했습니다.
2022-04-21 00:07:27 +00:00
2024-02-10 21:30:13 +00:00
`session.upload_progress.prefix`의 기본 설정으로 인해 **세션 파일은 `upload_progress_`라는 귀찮은 접두사로 시작**됩니다. 예를 들어 `upload_progress_controlledcontentbyattacker`와 같습니다.
2022-04-21 00:07:27 +00:00
2024-02-10 21:30:13 +00:00
초기 접두사를 **제거하는 트릭**은 페이로드를 **3번 base64로 인코딩**한 다음 `convert.base64-decode` 필터를 통해 디코딩하는 것입니다. 이는 **base64 디코딩 시 PHP가 이상한 문자를 제거**하기 때문에, 3번만 수행하면 공격자가 **보낸 페이로드만 남게**됩니다(그리고 공격자는 초기 부분을 제어할 수 있습니다).
2022-04-21 00:07:27 +00:00
2024-02-10 21:30:13 +00:00
원래의 writeup에서 자세한 정보를 확인하세요. [https://blog.orange.tw/2018/10/](https://blog.orange.tw/2018/10/) 및 최종 exploit [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)\
다른 writeup은 [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/)에서 확인할 수 있습니다.
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2024-02-03 16:02:14 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](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**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
</details>