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

如何在radare2执行dc命令后传入特定Payload?

如何在radare2执行dc命令后传入特定Payload?

嘿,我懂你现在的困扰——想在radare2里跑完dc让程序启动后,自动把你构造的格式化字符串Payload传进去,但之前试的两种方法都没生效,程序反而接收到了奇怪的默认输入对吧?别着急,我给你几个经过验证的可行方案:

方案一:修正rarun2配置,正确指定标准输入

你之前的rarun2配置里踩了个小坑:input字段其实是用来设置目标程序的命令行参数,不是标准输入!这就是为什么你的Payload没被程序读取到。我们换成rarun2专门用来指定标准输入的stdin字段就好:

方法1:直接在配置里生成Payload

先创建正确的profile.rr2配置文件:

#!/usr/bin/rarun2
program=./formattedctf
stdin=$(python3 -c "print(b'\x4c\x40\x40\x00\x00\x00'.decode('latin-1') + '%3$n%6$n')")

然后启动radare2调试:

r2 -d formattedctf -e dbg.profile=profile.rr2

进入调试会话后执行dc,程序就会自动读取你构造的Payload作为输入了。

方法2:先存Payload到文件再引用

如果遇到转义问题导致Payload损坏,我们可以先把Payload写入临时文件,再让rarun2读取:

  1. 生成Payload到文件:
python3 -c "print(b'\x4c\x40\x40\x00\x00\x00'.decode('latin-1') + '%3$n%6$n')" > payload.txt
  1. 编写rarun2配置:
#!/usr/bin/rarun2
program=./formattedctf
stdin=@payload.txt

之后同样用r2 -d formattedctf -e dbg.profile=profile.rr2启动调试,执行dc即可。

方案二:用radare2脚本灵活发送输入

如果你的程序是分多次读取输入(比如先问名字,后续还有其他交互),一次性的标准输入可能不适用。这时候可以用r2脚本,在dc之后手动发送Payload:

  1. 写一个send_payload.r2脚本文件:
# 让程序运行到等待输入的节点
dc
# 用`?i`命令发送构造好的Payload到程序标准输入
?i `python3 -c "print(b'\x4c\x40\x40\x00\x00\x00'.decode('latin-1') + '%3$n%6$n')"`
# 继续让程序执行
dc
  1. 启动调试并自动加载脚本:
r2 -d formattedctf -i send_payload.r2

这个方法自由度很高,适合复杂的交互式程序场景。

方案三:直接用管道传递Payload

这是最直接的方法,把Payload通过管道直接传给radare2,让程序的标准输入直接读取管道内容:

python3 -c "print(b'\x4c\x40\x40\x00\x00\x00'.decode('latin-1') + '%3$n%6$n')" | r2 -d formattedctf

进入调试会话后执行dc,程序就会自动读取管道里的Payload了。

备注:内容来源于stack exchange,提问作者allexj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:34:51