Shu*_*eng 0 linux bash environment-variables
我正在练习 CTF(捕获标志)并想查看环境变量的内容:
MyEnv=`python3 -c 'print(64*"A"+"\x0a\x09\x0a\x0d",end="")'`
Run Code Online (Sandbox Code Playgroud)
现在,hexdump在使用管道输入时显示以下内容echo:
$ echo -n $MyEnv | hexdump -Cv
00000000 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA|
00000010 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA|
00000020 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA|
00000030 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA|
00000040 20 0d | .|
00000042
Run Code Online (Sandbox Code Playgroud)
它与echo不愿意打印最后四个十六进制数字有关。
但是,我知道它MyEnv包含最后四位数字,因为它解决了练习。
如何显示环境变量的二进制内容?
不,它与未加引号的$MyEnv变量有关,并从变量中拆分和修剪字符 [1] 的运行,IFS默认情况下是空格 ( \x20)、制表符 ( \x09) 和换行符 ( \x0a),然后echo写入它被拆分的字段into 用空格 ( \x20) 连接。
为了能够查看这些字符,引用$MyEnv变量,并使用[2]printf代替echo -n
$ printf %s "$MyEnv" | hexdump -Cv
...
00000040 0a 09 0a 0d |....|
00000044
Run Code Online (Sandbox Code Playgroud)
请注意,通常您不能将二进制数据存储在环境变量中——二进制数据可以包含 NUL 字节 ( \0),并且环境变量的值是以零结尾的字符串。NUL 字节也不适用于bash的内部(非导出)变量。
[1] 如果来自 IFS 的字符不是“空白”,则外壳实际上可能会拆分为单个字符并创建空字段。标准的字段拆分部分中的完整说明。
[2]echo来自标准 shell 的可能会解释一些反斜杠转义(例如\n到换行符等),可能会更加混乱您的变量。
| 归档时间: |
|
| 查看次数: |
1250 次 |
| 最近记录: |