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}}
|
|
|
|
**Verifique os detalhes completos desta técnica em [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)**
|
|
|
|
## **Uploads de Arquivos PHP**
|
|
|
|
Quando um mecanismo **PHP** recebe uma **requisição POST** contendo arquivos formatados de acordo com o RFC 1867, ele gera arquivos temporários para armazenar os dados enviados. Esses arquivos são cruciais para o manuseio de uploads de arquivos em scripts PHP. A função `move_uploaded_file` deve ser usada para realocar esses arquivos temporários para um local desejado se o armazenamento persistente além da execução do script for necessário. Após a execução, o PHP exclui automaticamente quaisquer arquivos temporários restantes.
|
|
|
|
> [!NOTE]
|
|
> **Alerta de Segurança: Atacantes, cientes da localização dos arquivos temporários, podem explorar uma vulnerabilidade de Inclusão de Arquivo Local para executar código acessando o arquivo durante o upload.**
|
|
|
|
O desafio para o acesso não autorizado reside em prever o nome do arquivo temporário, que é intencionalmente randomizado.
|
|
|
|
#### Exploração em Sistemas Windows
|
|
|
|
No Windows, o PHP gera nomes de arquivos temporários usando a função `GetTempFileName`, resultando em um padrão como `<path>\<pre><uuuu>.TMP`. Notavelmente:
|
|
|
|
- O caminho padrão é tipicamente `C:\Windows\Temp`.
|
|
- O prefixo é geralmente "php".
|
|
- O `<uuuu>` representa um valor hexadecimal único. Crucialmente, devido à limitação da função, apenas os 16 bits inferiores são usados, permitindo um máximo de 65.535 nomes únicos com caminho e prefixo constantes, tornando o ataque de força bruta viável.
|
|
|
|
Além disso, o processo de exploração é simplificado em sistemas Windows. Uma peculiaridade na função `FindFirstFile` permite o uso de curingas em caminhos de Inclusão de Arquivo Local (LFI). Isso possibilita a criação de um caminho de inclusão como o seguinte para localizar o arquivo temporário:
|
|
```
|
|
http://site/vuln.php?inc=c:\windows\temp\php<<
|
|
```
|
|
Em certas situações, uma máscara mais específica (como `php1<<` ou `phpA<<`) pode ser necessária. Pode-se tentar sistematicamente essas máscaras para descobrir o arquivo temporário enviado.
|
|
|
|
#### Exploração em Sistemas GNU/Linux
|
|
|
|
Para sistemas GNU/Linux, a aleatoriedade na nomeação de arquivos temporários é robusta, tornando os nomes nem previsíveis nem suscetíveis a ataques de força bruta. Mais detalhes podem ser encontrados na documentação referenciada.
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|