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 do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do 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.
**Se você está enfrentando um binário protegido por um canário e PIE (Executable Independente de Posição), você provavelmente precisa encontrar uma maneira de contorná-los.**
![](<../../../../.gitbook/assets/image(144).png>)
{% hint style="info" %}
Note que **`checksec`** pode não encontrar que um binário está protegido por um canário se este foi compilado estaticamente e não é capaz de identificar a função.\
No entanto, você pode notar isso manualmente se descobrir que um valor é salvo na pilha no início de uma chamada de função e esse valor é verificado antes de sair.
Para contornar o PIE, você precisa **vazar algum endereço**. E se o binário não estiver vazando nenhum endereço, o melhor a fazer é **forçar o RBP e o RIP salvos na pilha** na função vulnerável.\
Por exemplo, se um binário estiver protegido usando tanto um **canário** quanto **PIE**, você pode começar a forçar o canário, então os **próximos** 8 Bytes (x64) serão o **RBP** salvo e os **próximos** 8 Bytes serão o **RIP** salvo.
Supõe-se que o endereço de retorno dentro da pilha pertença ao código binário principal, que, se a vulnerabilidade estiver localizada no código binário, geralmente será o caso.
Para forçar o RBP e o RIP do binário, você pode descobrir que um byte adivinhado válido está correto se o programa produzir alguma saída ou simplesmente não travar. A **mesma função** fornecida para forçar o canário pode ser usada para forçar o RBP e o RIP:
A partir do **RBP** você pode calcular **onde você está escrevendo seu shell na pilha**. Isso pode ser muito útil para saber onde você vai escrever a string _"/bin/sh\x00"_ dentro da pilha. Para calcular a distância entre o RBP vazado e seu shellcode, você pode simplesmente colocar um **breakpoint após vazar o RBP** e verificar **onde seu shellcode está localizado**, então, você pode calcular a distância entre o shellcode e o RBP:
A partir do **RIP**, você pode calcular o **endereço base do binário PIE**, que é o que você vai precisar para criar uma **cadeia ROP válida**.\
Para calcular o endereço base, basta fazer `objdump -d vunbinary` e verificar os últimos endereços desassemblados:
![](<../../../../.gitbook/assets/image(145).png>)
Nesse exemplo, você pode ver que apenas **1 Byte e meio é necessário** para localizar todo o código, então, o endereço base nesta situação será o **RIP vazado, mas terminando em "000"**. Por exemplo, se você vazou `0x562002970ecf`, o endereço base é `0x562002970000`
```python
elf.address = RIP - (RIP & 0xfff)
```
{% hint style="success" %}
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)
<details>
<summary>Supporte o HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do 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.