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

二进制漏洞利用练习:如何通过标准输入传入字节形式的Shellcode?

解决方法
  • 使用printf生成字节流
    printf可以解析\x格式的转义字符并输出对应的二进制字节,直接通过管道传给目标程序:

    printf 'AAAAAAAAAAAAAAAA\x20\x3d\x00\x00\x01' | ./你的漏洞程序
    

    注意:部分shell环境中,printf处理\x00时可能出现截断,但主流环境下可正常生成包含null字节的输出。

  • 用Python脚本输出原始字节
    Python的stdout.buffer可直接输出原始二进制字节,完全避免编码问题,是可靠性最高的方式之一:

    python3 -c "import sys; sys.stdout.buffer.write(b'AAAAAAAAAAAAAAAA\x20\x3d\x00\x00\x01')" | ./你的漏洞程序
    
  • 通过xxd转换十六进制字符串
    先将目标字节转换成十六进制字符串,再用xxd转成二进制流:

    echo "41414141414141414141414141414141203d000001" | xxd -r -p | ./你的漏洞程序
    

    其中41对应ASCII字符'A',20是空格,3d是'=',00是null字节,01是目标指定字节。

失败原因解析

直接输入AAAAAAAAAAAAAAAA\x20\x3d\x00\x00\x01时,shell不会解析\x转义,只会把\和x当作普通ASCII字符处理,写入缓冲区的不是你需要的目标字节。

而AAAAAAAAAAAAAAA$'\x20\x3d\x00\x00\x01'这种bash的ANSI-C转义写法,虽能解析\x20、\x3d,但bash会自动丢弃字符串中的null字节(\x00),导致最终输入缺失关键字节,无法达成目的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:00:04