INE - Advanced Web Application Penetration Testing (eWPTx)

sec875發表於2024-08-21

Encoding and Filtering

URL編碼:https://perishablepress.com/stop-using-unsafe-characters-in-urls/
HTML編碼:需要知道如何編碼以及如何解碼

  • 文件字元編碼:HTTP協議或指令
    https://datatracker.ietf.org/doc/html/rfc2616 Content-Type:text/html; charset=utf-8
    如果未定義則預設傳送:https://en.wikipedia.org/wiki/ISO/IEC_8859-1
    使用HTTP協議定義字元編碼:
    PHP:header('Content-type: text/html; charset=utf-8’);
    asp.net:<%Response.charset="utf-8"%>
    JSP:<%@ page contentType="text/html; charset=UTF-8" %>
    HTML指令:<meta http-equiv="Content-Type" Content='text/html; charset=utf-8'>或 HTML5 <meta charset="utf-8"'>

  • Character References 字元引用
    HTML的特殊字元多含義:比如 <,表示標籤和比較運算子符號
    HTML4:https://www.w3.org/TR/1998/REC-html40-19980424/charset.html#h-5.3
    HTML5:https://html.spec.whatwg.org/#character-references

< 的編碼
命名實體 &lt;
十進位制 &#60;
十進位制:&#60
十進位制:&#060 或 &#00000060
十六進位制 &#x3c; 或 &#X3C;
十六進位制:&#x3c 或 &#X3C
十六進位制:&#0x3c 或 &#00000x3c

base 36進位制編碼(web應用在使用它:reddit或域名縮短服務等,https://www.reddit.com/ https://tinyurl.com/)
image
PHP:<?=base convert("OHPE",36,10);?> http://www.php.net/manual/en/function.base-convert.php
JavaScript編碼:(1142690).toString(36)1142690..toString(36)
JavaScript解碼:parselnt("ohpe",36)

base64進位制編碼
[0-9][a-zA-Z]再加上 + 和 /共計64個字元來表示。
實現時:但是不同的實現對兩個相近的或填充的地方使用 = https://en.wikipedia.org/wiki/Base64#Implementations_and_history
image

如果總位元數不是6的倍數,則需要新增空位元,直到總數既是6的倍,結果長度也是4的倍數。如果最新的組是“空”(000000),編碼值是=,如果後面的“空組”是兩個,將被編碼為==。
image

PHP編解碼:<?=base64 encode('encode this string")?><?=base64 decode(ZW5jb2RllHRoaXMgc3RyaW5n')?>
JavaScript編解碼:window.btoa('encode this string');window.atob('ZW5ib2RlHRoaXMgc3RyaW5n'); https://developer.mozilla.org/en-US/docs/Web/API/Window/btoa

字元超出範圍的異常(要處理Unicode字串,需要在使用 Base64 函式之前對Unicode字串進行編碼。):https://developer.mozilla.org/en-US/docs/Web/API/Window/btoa

Unicode編碼

因為你在某個輸入框使用了AES加解密,所以payload(惡意輸入123456)自帶繞waf,以上編碼的應用同理(說白了就是web應用或中介軟體本身存在解碼)

如果你很無聊的話,論文指導一切:http://www.joelonsoftware.com/articles/Unicode.htm

對映unicode的三個點:UTF-8,UTF-16,UTF-32,utf表示Unicode轉換格式,後面的數字表示表示程式碼點的位元數。
image

相關文章