格式化字符串攻击 - 在x64上跳转到shell

时间:2017-04-02 15:31:54

标签: c linux security exploit shellcode

如何在启用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条目以跳转到任意位置,例如execvesystem,但是如何在寄存器中设置正确的参数?在二进制文件中搜索ROP链并跳转到那里?

或者还有其他方法可以从中获取shell吗?

1 个答案:

答案 0 :(得分:0)

除了你自己说过的所有内容之外,现在大多数printf函数都不支持用于利用格式字符串的%n标记,因此攻击技术已经死了

在今天的场景中,它很可能是不可开发的。因此,除非这是格式字符串利用的练习或捕获标志类型的东西,我建议您关注更多最新的开发技术。