如何在程序中输入ascii控制字符?

逆向工程 linux Python
2021-07-04 09:13:50

我正在处理一个 CTF,我需要将地址作为输入传递给程序。该地址包含值 0x09(制表符)。这给我带来了问题,因为 bash 在将选项卡输入到实际程序之前似乎正在解释该选项卡。

假设我有一个简单的 bash 脚本:

#!/usr/bin/env bash

echo $1

然后我想传递例如 "1"+"\x09"+"2" 并使程序的输出为:"1\x092"。

但是,制表符将“2”移动到第二个参数,然后不回显。

目前如果我这样做

./script.sh $(python -c 'print "1"+"\x09"+"2"')

它只是回显“1”。有没有办法把三个角色绑在一起?

提前致谢

3个回答

您的解决方案没有考虑制表符。它被解释为一个空格。看这里:

ch3rn0byl@ch3rn0byl:~$ ./scripts.sh "$(python -c 'print "1" + "\x09" + "2"')" | hexdump -C
00000000  31 20 32 0a                                       |1 2.|

如果修改脚本,则可以执行以下操作:

#!/bin/bash

a=$1
a+='\x09'
a+=$2

echo -ne $a

这样你就可以修改它或其他什么。

ch3rn0byl@ch3rn0byl:~$ ./scripts.sh 1 2 | hexdump -C
00000000  31 09 32                                          |1.2|

无论如何,如果这不是您想要的,请忽略。玩得开心!

您只需要将输入括在引号中。像这样:

./script.sh "$(python -c 'print "1"+"\x09"+"2"')"

尝试:

printf '\x31\x09\x32' | xargs python script.py