==================
== section .bss ==
==================

blog started by symbol

Encontrando trampolines com GDB

Encontrando trampolines com GDB puro

Caso não use nenhuma extensão no GDB para desenvolvimento de exploits (PEDA, GEF, pwndbg…), ainda é possível fazer muito sem tê-las instalado. Um exemplo é quando é necessário buscar por trampolines para saltar para algum ponto específico em nosso shellcode na memória ou em outro endereço.

O PEDA oferece comandos como jmpcall para encontrar esses trampolines. Mas nós podemos encontrar com GDB puro (ou quase puro, já que necessitaremos da integração GDB/Python que já está disponível na maior parte das distribuições.

Primeiro precisamos ter certeza que as bibliotecas necessárias já foram mapeadas no espaço de memória do processo:

(gdb) break *main
(gdb) run

Depois nós podemos encontrar os endereços limites da biblioteca na qual buscamos encontrar o trampolim (neste caso, a libc):

(gdb) py ["libc" in line and ".text" in line and print(line) for line in gdb.execute("info files", to_string=True).splitlines()]
	0xf7de80e0 - 0xf7f34d76 is .text in /lib/i386-linux-gnu/libc.so.6

Por fim, buscamos pelos bytes que compõe o trampolim desejado no espaço de memória da biblioteca, neste caso um jmp esp (\xff\xfe):

(gdb) find /b 0xf7de80e0, 0xf7f34d76, 0xff, 0xfe

Para confirmar, podemos fazer um disassembly da instrução no endereço encontrado:

(gdb) x/i <endereço>