其实Linux自带一套简易的编码与解码方案,可以快速帮我们解决题目
Linux常见的编码解码命令
Base64 编码与解码
Base64 是数据传输和隐藏中最常见的方式。
- 编码: 将字符串或文件转换为 Base64 格式。
1 2 3
| echo -n "Hello World" | base64 # 或者对文件进行编码 base64 filename.txt
|
_(注意:`echo -n` 用于消除自动添加的换行符,这在精确解题时非常关键)_
1
| echo "SGVsbG8gV29ybGQ=" | base64 -d
|
Hex (十六进制) 与 ASCII 转换
在分析二进制文件或处理底层数据时,十六进制转换必不可少。xxd 是最得力的工具。
- 字符串转 Hex (编码): 使用
-p (plain) 输出纯十六进制字符串。
1
| echo -n "flag{test}" | xxd -p
|
- Hex 转字符串 (解码): 使用
-r (revert) 参数还原。
1
| echo "666c61677b746573747d" | xxd -p -r
|
1 2 3
| hexdump -C suspicious_file.bin # 或者 xxd suspicious_file.bin
|
URL 编码与解码 (URL Encoding)
在处理 Web 漏洞(如 SQL 注入或 XSS)时经常需要对 Payload 进行 URL 编码。虽然 Linux 没有原生单一命令,但通常借助自带的解释器(如 Python 或 jq)来完成。
URL 编码 (使用 Python 3)
直接输入参数
1
| python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "http://example.com/?id=1"
|
管道符传参
1
| | python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))"
|
URL 解码 (使用 Python 3)
直接输入参数
1
| python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.argv[1]))" "http%3A%2F%2Fexample.com%2F%3Fid%3D1"
|
管道符传参
1
| | python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.stdin.read()))"
|
ROT13 / 凯撒密码位移
这是古典密码学中非常经典的替换加密。在 Linux 中,利用 tr (translate) 命令可以完美实现字符替换。
ASCII 字符与十进制互转
有时会遇到直接以逗号分隔的十进制 ASCII 码。
- 利用
awk 或 printf 将 ASCII 值转为字符:
1 2
| printf "\x41\x42\x43\n" # 输出 ABC (十六进制表示的 ASCII) printf "\\$(printf '%03o' 65)\n" # 输出 A (十进制转八进制后再输出字符)
|
HTML编码与解码
将特殊字符转换为 HTML 实体。
直接输入参数
Bash
1
| python3 -c "import html, sys; print(html.escape(sys.argv[1]))" "<script>alert(1)</script>"
|
管道符传参
1
| echo -n "<script>alert(1)</script>" | python3 -c "import html, sys; print(html.escape(sys.stdin.read()))"
|
HTML 解码 (使用 Python 3)
将 HTML 实体还原为原始字符,支持命名实体(如 <)和数字实体(如 < 或 f)。
直接输入参数
1
| python3 -c "import html, sys; print(html.unescape(sys.argv[1]))" "<script>alert('XSS')</script>"
|
管道符传参 (最适合多重编码组合解析)
1 2
| # 例如:先进行 Base64 解码,然后再将结果送入 Python 进行 HTML 解码 echo "JiN4NjY7JiN4NmM7" | base64 -d | python3 -c "import html, sys; print(html.unescape(sys.stdin.read()))"
|