如何在启用NX的64位系统上利用printf
格式字符串漏洞?
在这个代码示例中,您可以做些什么来获取shell?
void f(char *buf) {
printf(buf);
exit(0);
}
int main() {
char buf[1024];
scanf("%1024s", buf);
f(buf);
return 0;
}
我认为因为NX并且没有明显的跳转位置(代码中没有execve(/bin/bash...
)它必须是一个返回libc的攻击,但是在哪里跳?
我相信可以覆盖exit
的GOT条目以跳转到任意位置,例如execve
或system
,但是如何在寄存器中设置正确的参数?在二进制文件中搜索ROP链并跳转到那里?
或者还有其他方法可以从中获取shell吗?
答案 0 :(得分:0)
除了你自己说过的所有内容之外,现在大多数printf
函数都不支持用于利用格式字符串的%n
标记,因此攻击技术已经死了
在今天的场景中,它很可能是不可开发的。因此,除非这是格式字符串利用的练习或捕获标志类型的东西,我建议您关注更多最新的开发技术。