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>