当我试图对缓冲区溢出进行概念验证时,我遇到了一个奇怪的问题。程序中存在我想在地址 0x0828433c 执行的代码。这是一个简单的溢出,所以攻击是这样执行的:
$ perl -e 'system("./program lotsofcharacterstofillinspacethen\x3c\x43\x28\x08")'
然而,\x3c
转到>在ascii中,shell期望其余字符成为输出文件。 (即echo 1 > hello.txt
)
幸运的是,它上面有2个nops,所以我不需要使用那个特定的地址,但如果我需要怎么办?
谢谢!
答案 0 :(得分:3)
两种解决方案:
使用多参数版本的system,它不会调用shell:
system "./program", "lotsofcharacterstofillinspacethen\x3c\x43\x28\x08";
Escape参数中的任何shell元字符,例如使用String::ShellQuote。