LFI2RCE via phpinfo()
Para explorar essa vulnerabilidade você precisa: Uma vulnerabilidade LFI, uma página onde phpinfo() é exibido, "file_uploads = on" e o servidor deve ser capaz de escrever no diretório "/tmp".
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
Tutorial HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Você precisa corrigir o exploit (mudar => para =>). Para fazer isso, você pode fazer:
Você também precisa alterar o payload no início do exploit (por exemplo, para um php-rev-shell), o REQ1 (isso deve apontar para a página phpinfo e deve ter o padding incluído, ou seja: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), e LFIREQ (isso deve apontar para a vulnerabilidade LFI, ou seja: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Verifique o duplo "%" ao explorar o caractere nulo)
Teoria
Se uploads são permitidos em PHP e você tenta fazer o upload de um arquivo, esse arquivo é armazenado em um diretório temporário até que o servidor termine de processar a solicitação, então esse arquivo temporário é excluído.
Então, se você encontrou uma vulnerabilidade LFI no servidor web, pode tentar adivinhar o nome do arquivo temporário criado e explorar um RCE acessando o arquivo temporário antes que ele seja excluído.
No Windows, os arquivos geralmente são armazenados em C:\Windows\temp\php
No linux, o nome do arquivo costuma ser aleatório e localizado em /tmp. Como o nome é aleatório, é necessário extrair de algum lugar o nome do arquivo temporário e acessá-lo antes que ele seja excluído. Isso pode ser feito lendo o valor da variável $_FILES dentro do conteúdo da função "phpconfig()".
phpinfo()
PHP usa um buffer de 4096B e quando está cheio, é enviado ao cliente. Então, o cliente pode enviar muitas requisições grandes (usando cabeçalhos grandes) fazendo upload de um php reverse shell, esperar que a primeira parte do phpinfo() seja retornada (onde o nome do arquivo temporário está) e tentar acessar o arquivo temporário antes que o servidor php exclua o arquivo explorando uma vulnerabilidade LFI.
Script Python para tentar forçar o nome (se o comprimento = 6)
Last updated