其实Linux自带一套简易的编码与解码方案,可以快速帮我们解决题目

Linux常见的编码解码命令

Base64 编码与解码

Base64 是数据传输和隐藏中最常见的方式。

  • 编码: 将字符串或文件转换为 Base64 格式。
echo -n "Hello World" | base64
# 或者对文件进行编码
base64 filename.txt
_(注意:`echo -n` 用于消除自动添加的换行符,这在精确解题时非常关键)_
  • 解码: 使用 -d (decode) 参数。
echo "SGVsbG8gV29ybGQ=" | base64 -d

Hex (十六进制) 与 ASCII 转换

在分析二进制文件或处理底层数据时,十六进制转换必不可少。xxd 是最得力的工具。

  • 字符串转 Hex (编码): 使用 -p (plain) 输出纯十六进制字符串。
echo -n "flag{test}" | xxd -p
  • Hex 转字符串 (解码): 使用 -r (revert) 参数还原。
echo "666c61677b746573747d" | xxd -p -r
  • 查看文件十六进制转储: 常用于静态分析。
hexdump -C suspicious_file.bin
# 或者
xxd suspicious_file.bin

URL 编码与解码 (URL Encoding)

在处理 Web 漏洞(如 SQL 注入或 XSS)时经常需要对 Payload 进行 URL 编码。虽然 Linux 没有原生单一命令,但通常借助自带的解释器(如 Python 或 jq)来完成。

URL 编码 (使用 Python 3)

直接输入参数

python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "http://example.com/?id=1"

管道符传参

| python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))"

URL 解码 (使用 Python 3)

直接输入参数

python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.argv[1]))" "http%3A%2F%2Fexample.com%2F%3Fid%3D1"

管道符传参

| python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.stdin.read()))"

ROT13 / 凯撒密码位移

这是古典密码学中非常经典的替换加密。在 Linux 中,利用 tr (translate) 命令可以完美实现字符替换。

  • ROT13 编码与解码: (因为是平移13位,编码和解码是同一个命令)

    echo "Hello World" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
    # 输出: Uryyb Jbeyq
    

ASCII 字符与十进制互转

有时会遇到直接以逗号分隔的十进制 ASCII 码。

  • 利用 awkprintf 将 ASCII 值转为字符:
    printf "\x41\x42\x43\n"  # 输出 ABC (十六进制表示的 ASCII)
    printf "\\$(printf '%03o' 65)\n" # 输出 A (十进制转八进制后再输出字符)

HTML编码与解码

将特殊字符转换为 HTML 实体。

直接输入参数

Bash

python3 -c "import html, sys; print(html.escape(sys.argv[1]))" "<script>alert(1)</script>"

管道符传参

echo -n "<script>alert(1)</script>" | python3 -c "import html, sys; print(html.escape(sys.stdin.read()))"

HTML 解码 (使用 Python 3)

将 HTML 实体还原为原始字符,支持命名实体(如 &lt;)和数字实体(如 &#60;&#x66;)。

直接输入参数

python3 -c "import html, sys; print(html.unescape(sys.argv[1]))" "&lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;"

管道符传参 (最适合多重编码组合解析)

# 例如:先进行 Base64 解码,然后再将结果送入 Python 进行 HTML 解码
echo "JiN4NjY7JiN4NmM7" | base64 -d | python3 -c "import html, sys; print(html.unescape(sys.stdin.read()))"