mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
33 lines
2.6 KiB
Markdown
33 lines
2.6 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
**이 기술의 전체 세부정보는 [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는 남아 있는 임시 파일을 자동으로 삭제합니다.
|
|
|
|
> [!NOTE]
|
|
> **보안 경고: 임시 파일의 위치를 알고 있는 공격자는 업로드 중 파일에 접근하여 코드 실행을 위해 로컬 파일 포함 취약점을 악용할 수 있습니다.**
|
|
|
|
무단 접근의 도전 과제는 임시 파일의 이름을 예측하는 것으로, 이는 의도적으로 무작위화됩니다.
|
|
|
|
#### Windows 시스템에서의 악용
|
|
|
|
Windows에서 PHP는 `GetTempFileName` 함수를 사용하여 임시 파일 이름을 생성하며, `<path>\<pre><uuuu>.TMP`와 같은 패턴을 생성합니다. 주목할 점은:
|
|
|
|
- 기본 경로는 일반적으로 `C:\Windows\Temp`입니다.
|
|
- 접두사는 보통 "php"입니다.
|
|
- `<uuuu>`는 고유한 16진수 값을 나타냅니다. 중요한 점은 함수의 제한으로 인해 하위 16비트만 사용되므로, 상수 경로와 접두사를 가진 최대 65,535개의 고유 이름이 가능하여 무차별 대입이 가능하다는 것입니다.
|
|
|
|
또한, Windows 시스템에서의 악용 과정은 간소화됩니다. `FindFirstFile` 함수의 특이성으로 인해 로컬 파일 포함(LFI) 경로에서 와일드카드를 사용할 수 있습니다. 이를 통해 임시 파일을 찾기 위한 포함 경로를 다음과 같이 작성할 수 있습니다:
|
|
```
|
|
http://site/vuln.php?inc=c:\windows\temp\php<<
|
|
```
|
|
특정 상황에서는 더 구체적인 마스크(예: `php1<<` 또는 `phpA<<`)가 필요할 수 있습니다. 이러한 마스크를 체계적으로 시도하여 업로드된 임시 파일을 발견할 수 있습니다.
|
|
|
|
#### GNU/Linux 시스템에서의 악용
|
|
|
|
GNU/Linux 시스템의 경우, 임시 파일 이름의 무작위성이 강력하여 이름이 예측 가능하지 않으며 무차별 대입 공격에 취약하지 않습니다. 추가 세부정보는 참조된 문서에서 확인할 수 있습니다.
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|