Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Basic Information
Por padrão, quando um arquivo é enviado para o PHP (mesmo que não esteja esperando por isso), ele gerará um arquivo temporário em `/tmp` com um nome como **`php[a-zA-Z0-9]{6}`**, embora eu tenha visto algumas imagens do docker onde os arquivos gerados não contêm dígitos.
Em uma inclusão de arquivo local, **se você conseguir incluir esse arquivo enviado, você obterá RCE**.
Note que, por padrão, **o PHP só permite o upload de 20 arquivos em uma única solicitação** (configurado em `/etc/php/<version>/apache2/php.ini`):
```
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
```
Also, o **número de nomes de arquivos potenciais é 62\*62\*62\*62\*62\*62 = 56800235584**
Outras técnicas dependem de atacar protocolos PHP (você não conseguirá se controlar apenas a última parte do caminho), divulgar o caminho do arquivo, abusar de arquivos esperados, ou **fazer o PHP sofrer uma falha de segmentação para que arquivos temporários carregados não sejam excluídos**.\
Nesta técnica **só precisamos controlar um caminho relativo**. Se conseguirmos carregar arquivos e fazer o **LFI nunca acabar**, teremos "tempo suficiente" para **forçar a força bruta de arquivos carregados** e **encontrar** qualquer um dos que foram carregados.
* **Timeout para uma solicitação PHP**. Idealmente, isso deveria ser eterno ou deveria matar o processo PHP sem excluir os arquivos temporários carregados, caso contrário, isso também será um problema
Então, como você pode **fazer um include PHP nunca acabar**? Basta incluir o arquivo **`/sys/kernel/security/apparmor/revision`** (**não disponível em contêineres Docker** infelizmente...).
Por padrão, o Apache suporta **150 conexões simultâneas**, seguindo [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) é possível aumentar esse número para até 8000. Siga isso para usar PHP com esse módulo: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04).
Por padrão, (como posso ver em meus testes), um **processo PHP pode durar eternamente**.
Vamos fazer algumas contas:
* Podemos usar **149 conexões** para gerar **149 \* 20 = 2980 arquivos temporários** com nosso webshell.
* Em seguida, use a **última conexão** para **forçar** arquivos potenciais.
* A uma velocidade de **10 requisições/s**, os tempos são:
* 56800235584 / 2980 / 10 / 3600 \~= **530 horas** (50% de chance em 265h)
* (sem dígitos) 19770609664 / 2980 / 10 / 3600 \~= 185h (50% de chance em 93h)
{% hint style="warning" %}
Note que no exemplo anterior estamos **completamente DoSing outros clientes**!
{% endhint %}
Se o servidor Apache for melhorado e pudermos abusar de **4000 conexões** (metade do número máximo). Poderíamos criar `3999*20 = 79980`**arquivos** e o **número** seria **reduzido** para cerca de **19.7h** ou **6.9h** (10h, 3.5h 50% de chance).
Se em vez de usar o módulo php regular para apache para executar scripts PHP, a **página da web está usando****PHP-FMP** (isso melhora a eficiência da página da web, então é comum encontrá-lo), há algo mais que pode ser feito para melhorar a técnica.
Esse parâmetro indica a quantidade máxima de segundos **quando****a requisição ao PHP deve terminar** (infinito por padrão, mas **30s se o parâmetro estiver descomentado**). Quando uma requisição está sendo processada pelo PHP, o número indicado de segundos é **finalizado**. Isso significa que, se a requisição estava fazendo upload de arquivos temporários, porque o **processamento PHP foi interrompido**, esses **arquivos não serão deletados**. Portanto, se você conseguir fazer uma requisição durar esse tempo, pode **gerar milhares de arquivos temporários** que não serão deletados, o que **acelerará o processo de encontrá-los** e reduz a probabilidade de um DoS na plataforma consumindo todas as conexões.
Então, para **evitar DoS**, vamos supor que um **atacante estará usando apenas 100 conexões** ao mesmo tempo e o tempo máximo de processamento PHP por **php-fmp** (`request_terminate_timeout`**)** é **30s**. Portanto, o número de **arquivos temporários** que podem ser gerados **por segundo** é `100*20/30 = 66.67`.
Então, o atacante poderia usar essas **100 conexões** para realizar uma **busca forçada**. \*\*\*\* Supondo uma velocidade de 300 req/s, o tempo necessário para explorar isso é o seguinte:
Aprenda e pratique Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Aprenda e pratique Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos no****Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.