Exploiting Tools
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Você pode opcionalmente usar este fork do GEF que contém instruções mais interessantes.
Enquanto depurando, o GDB terá endereços ligeiramente diferentes dos usados pelo binário quando executado. Você pode fazer com que o GDB tenha os mesmos endereços fazendo:
unset env LINES
unset env COLUMNS
set env _=<caminho>
Coloque o caminho absoluto para o binário
Exploit o binário usando a mesma rota absoluta
PWD
e OLDPWD
devem ser os mesmos ao usar o GDB e ao explorar o binário
Quando você tem um binário vinculado estaticamente, todas as funções pertencerão ao binário (e não a bibliotecas externas). Nesse caso, será difícil identificar o fluxo que o binário segue para, por exemplo, solicitar entrada do usuário.
Você pode identificar facilmente esse fluxo executando o binário com gdb até que seja solicitado a entrada. Em seguida, pare-o com CTRL+C e use o comando bt
(backtrace) para ver as funções chamadas:
gdbserver --multi 0.0.0.0:23947
(no IDA você deve preencher o caminho absoluto do executável na máquina Linux e na máquina Windows)
Ghidra é muito útil para encontrar o deslocamento para um buffer overflow graças às informações sobre a posição das variáveis locais.
Por exemplo, no exemplo abaixo, um fluxo de buffer em local_bc
indica que você precisa de um deslocamento de 0xbc
. Além disso, se local_10
for um canary cookie, isso indica que para sobrescrevê-lo a partir de local_bc
há um deslocamento de 0xac
.
&#xNAN;Remember que os primeiros 0x08 de onde o RIP é salvo pertencem ao RBP.
Get every opcode executed in the program.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Compile sem proteções &#xNAN;-o --> Saída &#xNAN;-g --> Salvar código (GDB poderá vê-lo) echo 0 > /proc/sys/kernel/randomize_va_space --> Para desativar o ASLR no linux
Para compilar um shellcode: nasm -f elf assembly.asm --> retorna um ".o" ld assembly.o -o shellcodeout --> Executável
-d --> Desmontar seções executáveis (ver opcodes de um shellcode compilado, encontrar ROP Gadgets, encontrar endereço de função...) &#xNAN;-Mintel --> Sintaxe Intel &#xNAN;-t --> Tabela de Símbolos &#xNAN;-D --> Desmontar tudo (endereço de variável estática) &#xNAN;-s -j .dtors --> seção dtors &#xNAN;-s -j .got --> seção got -D -s -j .plt --> seção plt decompilada &#xNAN;-TR --> Realocações ojdump -t --dynamic-relo ./exec | grep puts --> Endereço de "puts" para modificar no GOT objdump -D ./exec | grep "VAR_NAME" --> Endereço de uma variável estática (essas são armazenadas na seção DATA).
Execute ulimit -c unlimited
antes de iniciar meu programa
Execute sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sudo gdb --core=<path/core> --quiet
ldd executable | grep libc.so.6 --> Endereço (se ASLR, então isso muda toda vez) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> Loop para ver se o endereço muda muito readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> Offset de "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Offset de "/bin/sh"
strace executable --> Funções chamadas pelo executável rabin2 -i ejecutable --> Endereço de todas as funções
Dentro da pasta IDA, você pode encontrar binários que podem ser usados para depurar um binário dentro de um linux. Para fazer isso, mova o binário linux_server
ou linux_server64
para dentro do servidor linux e execute-o dentro da pasta que contém o binário:
Então, configure o depurador: Debugger (linux remote) --> Opções de processo...:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)