关于利用printf格式漏洞

时间:2014-02-24 08:47:02

标签: c printf

我正在尝试利用printf中的漏洞

#include <stdio.h>
int main()
{
  int a = 1, b = 2, c = 3, d = 4;
  printf("%d %d %d %d");
}
  1. a,b,c,d被推到堆叠上。
  2. printf参数被压入堆栈然后返回地址
  3. 现在,printf会将SP从"%d%d%d%d"增加到达参数。
  4. 但是,由于没有参数,它应该达到主要的局部变量a b ...
  5. 但是,上面的输出是随机大值

      

    -1000081144 - 10000081128 4197428 4197568 -842270912

    Q1:输出中的这些值是多少?我的理解有什么问题?

    Q2:如何更正上面的代码,从printf打印main函数中局部变量的值? (通过利用printf的漏洞)

1 个答案:

答案 0 :(得分:4)

无法保证变量位于堆栈的正确位置。您可以检查堆栈(gdb)并查看其正确的地址,但这几乎不是通用解决方案。