perl - 缓冲区溢出字符解析

标签 perl buffer overflow

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

$ perl -e 'system("./program 很多字符填充空格然后\x3c\x43\x28\x08")'

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

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

谢谢!

最佳答案

两种解决方案:

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

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

关于perl - 缓冲区溢出字符解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15776068/

相关文章:

更改存储在 C 变量中的内存地址

css - 如何让动态大小的灯箱正确溢出/滚动?

css - 除非添加溢出属性,否则无法更改导航栏颜色

xml - Perl - XML/HoH 中的循环依赖检查

html - 当输入允许时,如何防止对 html 实体进行双重编码

javascript - 如何在javascript中制作声音文件?

c - 为什么缓冲区位于 main() 本地,然后无法显式关闭流是一个错误?

css - 切换溢出属性时,谷歌浏览器不会调整内容大小

perl - 重置默认的 perldoc 查看器

python - 删除匹配项倒数第二个和倒数第二个之间的所有内容