hacktricks/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md

45 lines
3.6 KiB
Markdown

<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
**Confira 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)**
## **Upload de Arquivos PHP**
Quando um mecanismo **PHP** recebe uma **solicitaçã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 tratamento de upload de arquivos em scripts PHP. A função `move_uploaded_file` deve ser usada para mover esses arquivos temporários para um local desejado, se for necessário armazenamento persistente além da execução do script. Após a execução, o PHP exclui automaticamente quaisquer arquivos temporários restantes.
{% hint style="info" %}
**Alerta de Segurança: Hackers, 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.**
{% endhint %}
O desafio para o acesso não autorizado está 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 `<caminho>\<prefixo><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 a 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, pode ser necessário um máscara mais específica (como `php1<<` ou `phpA<<`). 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 nomenclatura de arquivos temporários é robusta, tornando os nomes não previsíveis nem suscetíveis a ataques de força bruta. Mais detalhes podem ser encontrados na documentação referenciada.