# EBP2Ret - Encadeamento de EBP
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras maneiras de apoiar o HackTricks: * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial do 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-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **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.
## Informação Básica Essa técnica explora a capacidade de manipular o **Ponteiro Base (EBP)** para encadear a execução de múltiplas funções por meio do uso cuidadoso do registro EBP e da sequência de instruções `leave; ret`. Como lembrete, **`leave`** basicamente significa: ``` movl %ebp, %esp popl %ebp ret ``` E como o **EBP está na pilha** antes do EIP, é possível controlá-lo controlando a pilha. ### EBP2Ret Esta técnica é particularmente útil quando você pode **alterar o registro EBP, mas não tem uma maneira direta de alterar o registro EIP**. Ela aproveita o comportamento das funções quando terminam de executar. Se, durante a execução de `fvuln`, você conseguir injetar um **EBP falso** na pilha que aponta para uma área na memória onde está localizado o endereço do seu shellcode (mais 4 bytes para considerar a operação `pop`), você pode controlar indiretamente o EIP. Quando `fvuln` retorna, o ESP é definido para esta localização manipulada, e a subsequente operação `pop` diminui o ESP em 4, fazendo com que ele aponte efetivamente para o seu shellcode. Quando a instrução `ret` é executada, o controle é transferido para o seu shellcode. #### Construção do Exploit Primeiro, você precisa **injetar seu shellcode** em algum lugar em uma memória executável e **obter o endereço**, ou obter o endereço de um [**ONE\_GADGET**](https://github.com/david942j/one\_gadget) válido, ou fazer o ESP apontar para um local com o endereço do **`system()`** seguido por **4 bytes de lixo** e o endereço de `"/bin/sh"`. Em seguida, crie um preenchimento e **comprometa o EBP** com o `endereço do shellcode/one_gadget - 4`. Deve ser `-4` por causa do `pop`. Em seguida, o `ESP` estará apontando para o endereço desejado e o `ret` será executado. #### Exploit Off-By-One Existe uma variante específica dessa técnica conhecida como "Exploit Off-By-One". É usada quando você pode **apenas modificar o byte menos significativo do EBP**. Nesse caso, o local de memória que armazena o endereço do shellcode deve compartilhar os três primeiros bytes com o EBP, permitindo uma manipulação semelhante com condições mais restritas. ### **EBP Chaining** Portanto, colocando um endereço controlado na entrada do `EBP` da pilha e um endereço para `leave; ret` em `EIP`, é possível **mover o `ESP` para o endereço controlado do `EBP` na pilha**. Agora, o **`ESP`** é controlado apontando para um endereço desejado e a próxima instrução a ser executada é um `RET`. Para abusar disso, é possível colocar neste local controlado do ESP o seguinte: * **`&(próximo EBP falso)`** -> Carrega o novo EBP por causa do `pop ebp` da instrução `leave` * **`system()`** -> Chamado por `ret` * **`&(leave;ret)`** -> Chamado após o término do sistema, moverá o ESP para o EBP falso e começará novamente * **`&("/bin/sh")`**-> Parâmetro para `system` Basicamente, dessa forma, é possível encadear vários EBPs falsos para controlar o fluxo do programa. Para ser sincero, isso é como um [ret2lib](ret2lib/), mas mais complexo sem benefício aparente, mas poderia ser interessante em alguns casos específicos.