2013-04-02 65 views
2

当我试图做一个缓冲区溢出的概念证明时,我遇到了一个奇怪的问题。程序中存在代码,我想在地址0x0828433c处执行。这是一个简单的溢出,所以这次袭击是为使执行:缓冲区溢出字符解析

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

然而,\x3c去>在ASCII和外壳预期其余字符是一个输出文件。 (即echo 1 > hello.txt

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

谢谢!

回答

3

两个解决方案:

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

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