Exploiting Tools
Last updated
Last updated
Aprenda e pratique Hacking AWS: HackTricks Treinamento AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Treinamento GCP Red Team Expert (GRTE)
Você poderia opcionalmente usar este fork do GEF que contém instruções mais interessantes.
Durante a depuração, o GDB terá endereços ligeiramente diferentes dos utilizados pelo binário quando executado. Você pode fazer com que o GDB tenha os mesmos endereços fazendo o seguinte:
unset env LINES
unset env COLUMNS
set env _=<caminho>
Coloque o caminho absoluto para o binário
Explorar o binário usando o mesmo caminho absoluto
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). Neste 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é ser solicitado a inserir dados. Em seguida, pare 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ê precisa preencher o caminho absoluto do executável na máquina Linux e na máquina Windows)
Ghidra é muito útil para encontrar o deslocamento para uma sobreposição de buffer 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 cookie canário, indica que para sobrescrevê-lo a partir de local_bc
há um deslocamento de 0xac
.
Lembre-se de que os primeiros 0x08 de onde o RIP é salvo pertencem ao RBP.
Obtenha cada opcode executado no programa.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Compilar sem proteções -o --> Saída -g --> Salvar código (GDB poderá vê-lo) echo 0 > /proc/sys/kernel/randomize_va_space --> 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...) -Mintel --> Sintaxe Intel -t --> Tabela de Símbolos -D --> Desmontar tudo (endereço de variável estática) -s -j .dtors --> seção dtors -s -j .got --> seção got -D -s -j .plt --> seção plt descompilada -TR --> Realocações ojdump -t --dynamic-relo ./exec | grep puts --> Endereço de "puts" para modificar em GOT objdump -D ./exec | grep "VAR_NAME" --> Endereço de uma variável estática (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=<caminho/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 --> Deslocamento de "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Deslocamento de "/bin/sh"
strace executable --> Funções chamadas pelo executável rabin2 -i ejecutable --> Endereço de todas as funções
Dentro da pasta do IDA, você pode encontrar binários que podem ser usados para depurar um binário dentro de um sistema Linux. Para fazer isso, mova o binário linux_server
ou linux_server64
para o servidor Linux e execute-o dentro da pasta que contém o binário:
Em seguida, configure o depurador: Depurador (remoto linux) --> Opções do processo...:
Aprenda e pratique Hacking na AWS:Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking no GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)