2

当我试图对缓冲区溢出进行概念验证时,我遇到了一个奇怪的问题。程序中存在我想在地址0x0828433c执行的代码。这是一个简单的溢出,所以攻击是这样执行的:

$ perl -e 'system("./program lotsofcharacterstofillinspacethen\x3c\x43\x28\x08")'

但是,\x3c在 ascii 中转到 >,并且 shell 期望其余的字符是一个输出文件。(即。echo 1 > hello.txt

幸运的是它上面有 2 个 nop,所以我不需要使用那个特定的地址,但是如果我需要呢?

谢谢!

4

1 回答 1

3

两种解决方案:

  1. 使用system的多参数版本,它不调用 shell:

    system "./program", "lotsofcharacterstofillinspacethen\x3c\x43\x28\x08";
    
  2. 转义参数中的任何 shell 元字符,例如使用String::ShellQuote

于 2013-04-02T23:55:37.913 回答