【问题标题】:return-to-libc exploit : where to provide arguments for system() call?return-to-libc 漏洞利用:在哪里为 system() 调用提供参数?
【发布时间】:2011-10-14 19:52:08
【问题描述】:

我正在尝试编写对 libc 漏洞利用的返回,但无法弄清楚我应该将 system() 调用的参数放在堆栈中的哪个位置。

易受攻击的功能是

void func(char *str)
{
     char buffer[12];
     strcpy(buffer,str);
}

此函数的堆栈将如下所示:

 -----------
 str
 -----------
 return address
 -----------
 previous frame pointer
 -----------
 buffer
 -----------

我知道我必须用system() 调用的地址覆盖返回地址,但是我应该将其参数的地址放在哪里以及为什么?

谢谢。

【问题讨论】:

    标签: security unix calling-convention shellcode


    【解决方案1】:

    应该在返回地址的正上方找到指向参数的指针。也就是说,在覆盖之后,您的堆栈应该如下所示:

    -----------
    shellcode: /bin/whatever ...
    ...
    ...
    ...
    \0
    -----------
    &shellcode    <-- str is here
    -----------
    &system       <-- return address is here
    -----------
    previous frame pointer <--- don't corrupt this
    -----------
    padding       <-- buffer
    

    请注意,这意味着当您到达strcpy 时,您必须知道%esp 是什么(以避免破坏前一帧指针)。此外,没有一个指针可以包含零字节。

    【讨论】:

      猜你喜欢
      • 2020-09-16
      • 2015-04-18
      • 2014-03-15
      • 2020-01-19
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2017-11-23
      相关资源
      最近更新 更多