5.9 KiB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
-
Descubra A Família PEASS, nossa coleção exclusiva de NFTs
-
Adquira o swag oficial do PEASS & HackTricks
-
Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
-
Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.
Uploads de arquivos PHP
O motor PHP, ao receber um pacote POST com arquivos codificados em RFC 1867, cria um ou mais arquivos temporários que são usados para armazenar os dados dos arquivos enviados. Um script PHP que manipula uploads de arquivos deve usar a função move_uploaded_file para mover o arquivo temporário enviado para um local desejado (se o script exigir que o arquivo exista após o término, é claro). Quando o script termina, o motor PHP remove todos os arquivos temporários para os arquivos que foram enviados (se houver algum arquivo temporário restante após o término do script).
{% hint style="info" %} Como o invasor geralmente sabe onde esses arquivos temporários estão localizados, caso ele encontre uma Inclusão Local de Arquivo, ele pode carregar o arquivo sendo enviado e obter RCE. {% endhint %}
O principal problema para acessar o arquivo é basicamente adivinhar seu nome (que será "aleatório").
Exploração no Windows
Para gerar o nome aleatório no Windows, o PHP usa a função GetTempFileName
. Ao procurar na documentação, podemos encontrar a seguinte explicação: A função GetTempFileName cria um nome de arquivo temporário com a seguinte forma:
<path>\<pre><uuuu>.TMP
- O caminho é
upload_tmp_dir
, que normalmente éC:\Windows\Temp
- O prefixo é geralmente: "php"
- O <uuuu> é um valor hexadecimal exclusivo. No entanto:
- Apenas os 16 bits inferiores do parâmetro uUnique são usados. Isso limita o GetTempFileName a um máximo de 65.535 nomes de arquivo exclusivos se os parâmetros lpPathName e lpPrefixString permanecerem os mesmos. É possível forçar a entrada.
Como vimos, é bastante fácil encontrar o arquivo temporário em sistemas Windows. E vai ficar mais fácil porque a força bruta não é necessária aqui, graças a uma peculiaridade do FindFirstFile que permite usar máscaras (<< como * e > como ?) em caminhos LFI no Windows. Graças a isso, pode-se formar um caminho de inclusão como este:
http://site/vuln.php?inc=c:\windows\temp\php<<
(Em alguns casos, uma máscara mais específica pode ser necessária, como php1<<
ou phpA<<
). Você pode fazer Brute-Force de máscaras mais específicas até encontrar o arquivo temporário enviado.
Exploração GNU/Linux
O valor aleatório do nome do arquivo é bom o suficiente para não ser previsível nem passível de Brute-Force. Para mais informações, verifique as referências.
Referências
- https://gynvael.coldwind.pl/?id=376
- https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
-
Descubra A Família PEASS, nossa coleção exclusiva de NFTs
-
Adquira o swag oficial do PEASS & HackTricks
-
Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
-
Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.