# 编码解码 _6 条工具命令_ ### Base64编码 `base64-encode` _Base64编码/解码命令集合_ **Step 0** > 各平台Base64编码方法 ``` # Linux: echo -n "payload" | base64 base64 file.txt > encoded.txt # Windows PowerShell: [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("payload")) # Python: python3 -c "import base64; print(base64.b64encode(b'payload').decode())" ``` **Step 0** > 各平台Base64解码方法 ``` # Linux: echo "cGF5bG9hZA==" | base64 -d base64 -d encoded.txt > decoded.txt # Windows PowerShell: [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("cGF5bG9hZA==")) # Python: python3 -c "import base64; print(base64.b64decode('cGF5bG9hZA==').decode())" ``` **Step 0** > URL安全的Base64编码(+/替换为-_) ``` # Python: import base64 base64.urlsafe_b64encode(b"payload").decode() base64.urlsafe_b64decode("cGF5bG9hZA==").decode() ``` --- ### URL编码 `url-encode` _URL编码/解码命令集合_ **Step 0** > URL编码方法(单次/双重) ``` # Python: python3 -c "from urllib.parse import quote; print(quote(''))" # 双重编码: python3 -c "from urllib.parse import quote; print(quote(quote('')))" # CyberChef在线: https://gchq.github.io/CyberChef/ ``` **Step 0** > URL解码方法 ``` # Python: python3 -c "from urllib.parse import unquote; print(unquote('%3Cscript%3Ealert(1)%3C%2Fscript%3E'))" # Linux: printf '%b' "\x3Cscript\x3E" ``` --- ### Hex编码 `hex-encode` _十六进制编码/解码命令集合_ **Step 0** > 十六进制编码方法 ``` # Linux: echo -n "payload" | xxd -p echo -n "payload" | od -A n -t x1 | tr -d " \n" # Python: python3 -c "print('payload'.encode().hex())" python3 -c "print('\\x'.join([hex(ord(c))[2:] for c in 'payload']))" ``` **Step 0** > 十六进制解码方法 ``` # Linux: echo "7061796c6f6164" | xxd -r -p # Python: python3 -c "print(bytes.fromhex('7061796c6f6164').decode())" ``` **Step 0** > 在SQL注入和XSS中使用十六进制编码 ``` # SQL注入中使用: SELECT 0x61646D696E -- "admin" # XSS中使用: ``` --- ### HTML编码 `html-encode` _HTML实体编码/解码命令集合_ **Step 0** > HTML实体编码(命名/十进制/十六进制) ``` # Python: python3 -c "import html; print(html.escape(''))" # 数字编码: python3 -c "print(''.join(['&#'+str(ord(c))+';' for c in '']))" # 十六进制HTML编码: python3 -c "print(''.join(['&#x'+hex(ord(c))[2:]+';' for c in 'alert']))" ``` **Step 0** > HTML实体解码 ``` # Python: python3 -c "import html; print(html.unescape('<script>alert(1)</script>'))" ``` **Step 0** > XSS绕过常用的HTML实体对照 ``` # 常用HTML实体: # < => < 或 < 或 < # > => > 或 > 或 > # " => " 或 " 或 " # ' => ' 或 ' 或 ' # & => & 或 & 或 & ``` --- ### Unicode编码 `unicode-encode` _Unicode编码/解码命令集合_ **Step 0** > Unicode各种编码形式 ``` # Python Unicode转义: python3 -c "print(''.join(['\\u'+hex(ord(c))[2:].zfill(4) for c in 'alert']))" # 输出: \u0061\u006c\u0065\u0072\u0074 # UTF-8字节: python3 -c "print('alert'.encode('utf-8'))" ``` **Step 0** > Unicode解码方法 ``` # Python: python3 -c "print('\\u0061\\u006c\\u0065\\u0072\\u0074'.encode().decode('unicode_escape'))" # JavaScript: console.log("\u0061\u006c\u0065\u0072\u0074") ``` **Step 0** > 使用Unicode编码绕过WAF/过滤 ``` # JavaScript Unicode绕过: # Overlong UTF-8编码: # / => %c0%af (可绕过路径过滤) # . => %c0%ae ``` --- ### JWT解码 `jwt-decode` _JWT(JSON Web Token)解码和分析工具_ **Step 0** > 使用在线工具解码JWT ``` # 在线工具: # https://jwt.io # https://token.dev # 粘贴JWT即可查看Header和Payload ``` **Step 0** > 使用Python命令行解码JWT ``` # Python: python3 -c " import base64, json, sys token = sys.argv[1] parts = token.split('.') for i, part in enumerate(parts[:2]): padded = part + '=' * (4 - len(part) % 4) decoded = base64.urlsafe_b64decode(padded) print(json.dumps(json.loads(decoded), indent=2)) " YOUR_JWT_HERE ``` **Step 0** > JWT结构分析和安全检查要点 ``` # JWT结构: Header.Payload.Signature # Header: {"alg":"HS256","typ":"JWT"} # Payload: {"sub":"1234","name":"user","iat":1516239022} # Signature: HMACSHA256(base64url(header)+"."+base64url(payload), secret) # 检查要点: # 1. alg是否可改为none # 2. 密钥是否为弱密码 # 3. 是否可将RS256改为HS256 # 4. exp是否已过期 ``` ---