hacktricks/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md
2024-02-10 21:30:13 +00:00

60 lines
4.7 KiB
Markdown

<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사를 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 제출하세요.**
</details>
**이 기술의 자세한 내용은 [https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf](https://gynvael.coldwind.pl/download.php?f=PHP\_LFI\_rfc1867\_temporary\_files.pdf)에서 확인하세요.**
## **PHP 파일 업로드**
**PHP** 엔진이 RFC 1867에 따라 포맷된 파일을 포함한 **POST 요청**을 받으면, 업로드된 데이터를 저장하기 위해 임시 파일을 생성합니다. 이 파일들은 PHP 스크립트에서 파일 업로드 처리에 중요합니다. `move_uploaded_file` 함수를 사용하여 이러한 임시 파일을 원하는 위치로 이동시켜야 합니다. 스크립트 실행 이후에는 PHP가 남아 있는 임시 파일을 자동으로 삭제합니다.
{% hint style="info" %}
**보안 경고: 임시 파일의 위치를 알고 있는 공격자는 업로드 중에 파일에 액세스하여 코드를 실행하는 Local File Inclusion 취약점을 악용할 수 있습니다.**
{% endhint %}
권한이 없는 액세스의 도전은 의도적으로 무작위로 생성되는 임시 파일의 이름을 예측하는 데 있습니다.
#### Windows 시스템에서의 악용
Windows에서 PHP는 `GetTempFileName` 함수를 사용하여 임시 파일 이름을 생성하며, `<path>\<pre><uuuu>.TMP`와 같은 패턴이 생성됩니다. 특히:
- 기본 경로는 일반적으로 `C:\Windows\Temp`입니다.
- 접두사는 일반적으로 "php"입니다.
- `<uuuu>`는 고유한 16진수 값을 나타냅니다. 함수의 제한으로 인해 하위 16비트만 사용되므로, 일정한 경로와 접두사로 최대 65,535개의 고유한 이름을 사용할 수 있으며, 브루트 포스가 가능합니다.
또한, Windows 시스템에서는 악용 과정이 간소화됩니다. `FindFirstFile` 함수의 특이점으로 인해 Local File Inclusion (LFI) 경로에 와일드카드를 사용할 수 있습니다. 이를 통해 다음과 같은 include 경로를 만들어 임시 파일을 찾을 수 있습니다:
```
http://site/vuln.php?inc=c:\windows\temp\php<<
```
특정 상황에서는 더 구체적인 마스크(`php1<<` 또는 `phpA<<`와 같은)가 필요할 수 있습니다. 이러한 마스크를 시스템적으로 시도하여 업로드된 임시 파일을 발견할 수 있습니다.
#### GNU/Linux 시스템에서의 공격
GNU/Linux 시스템의 경우, 임시 파일 이름에 대한 무작위성이 강력하게 유지되어 이름이 예측 가능하거나 무차별 대입 공격에 취약하지 않습니다. 자세한 내용은 참조 문서에서 확인할 수 있습니다.
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사를 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
</details>