这一题和上一题其实没啥大的区别一样是32位开了nx,cannary就是没有后门函数
main函数
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [esp+Ch] [ebp-4Ch]
unsigned int v5; // [esp+4Ch] [ebp-Ch]
v5 = __readgsdword(0x14u);
setvbuf(stdout, 0, 2, 0);
setvbuf(stdin, 0, 1, 0);
fgets(&s, 64, stdin);
printf(&s);
fgets(&s, 64, stdin);
printf(&s);
return 0;
}
但是有系统调用的函数
int system(const char *command)
{
return system(command);
}
格式化字符串漏洞算出偏移为7然后我们还少了’/bin/sh’正常的思路有发一个binsh到栈上,还有一种我的想法是通过泄露libc来找到’/bin/sh’emem好像绕弯了算了还是直接输入’/bin/sh’的值到栈上然后将printf改成system就满足,正好符合将参数入栈,调用函数的函数调用约定,因为程序调用了printf函数所以我们就可以改写它成system函数
是不是说多了
emem