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

瞭解Unicode字元是如何透過不同的實現(如URL、HTML、JavaScript等)來處理的也很有用
image

除了Unicode字元在多種編碼型別中的表示外,另一個有趣的方面是標準和不同實現對某些字元的解釋在預期之外。

視覺欺騙(同形異義詞)
image

這些字元也被稱為混淆字元,受到了 Unicode 聯盟(TR39)的特別關注,以至於他們提供了一種實用程式,透過該實用程式,您可以檢視與輸入字串混淆的組合。
https://util.unicode.org/UnicodeJsps/confusables.jsp
http://www.unicode.org/reports/tr39/

image

同形異義詞 Homoglyph Attack Generator: http://www.irongeek.com/homoglyph-attack-generator.php
釣釣釣:http://www.irongeek.com/i.php?page=security/out-of-character-use-of-punycode-and-homoglyph-attacks-to-obfuscate-urls-for-phishing
多元件打架,轉中轉中轉(輸入1,過濾器檢查I,後面的元件把I轉成了1):過濾器檢查evil不成功,之後其他元件又將它解釋回去了
image

image

使用其他國家的語言s,後面的元件把它解釋成s
image
案例:https://engineering.atspotify.com/2013/06/creative-usernames/

工具
https://qaz.wtf/u/convert.cgi
http://ww1.txtn.us/
https://codepoints.net/
https://util.unicode.org/UnicodeJsps/

有時,以上編碼會出現套娃的情況(web應用需要或開發測試的遺留問題)

  • Filtering Basics

內部控制可以在 Web 應用程式的不同層實現。它們可以被表示為庫和 APIS(由初學者開發人員),或者在最好的情況下,由內部專家或外部組織(如OWASP 的 ESAPI)表示。安全控制元件也存在於大多數常見瀏覽器中。
https://owasp.org/www-project-enterprise-security-api/

有時,由於大量的複雜性和標準,內部解決方案是不可能的,或者實施內部解決方案的問題太大。這些解決方案可能以庫或API的形式存在;然而,關鍵是採用外部解決方案。
一般來說,這些解決方案屬於IDS和IPS領域,但對於Web應用程式,大多數選擇的是Web應用程式防火牆WAF)

modsecurity:http://www.modsecurity.org/

正則王者:Filter,waf,IDS/IPS說白了底層用的同一套規則邏輯

正規表示式
正規表示式引擎(是軟體,還有版本,彼此並不相容):DFA 或 NFA
https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton
https://en.wikipedia.org/wiki/Deterministic_finite_automaton

由於其確定性方法,DFA引擎比NFA更快,但它不支援懶惰量詞和反向引用等有用的功能。此外,NFA的工作方式是人們傾向於做的:正規表示式導向。NFA號擎更受歡迎也就不足為奇。

正規表示式引擎彼此並不相容
https://www.regular-expressions.info/refflavors.html
https://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines

正則語法並不多,但更簡單的是GPT一把梭
image
image

為了避免錯誤的過濾器和混淆有效載荷,通常使用非列印字元(控制字元):https://en.wikipedia.org/wiki/Control_character
Non-Printing Characters 非列印字元
image

與Unicode相容的正規表示式特性使用特定的元序列來匹配程式碼點 \ucode-point ,其中 code-point 是要匹配的字元的十六進位制數。有些正規表示式(如 PCRE)不支援前一種表示法,而是使用序列 \x{code-point} 代替。
.NET Java, JavaScript and Python中匹配:\u2603
Apache和PHP中匹配:\x{2603}

字元特性
image

白名單的假陽性讓人發瘋,所以waf經常部署於黑名單模式

需要一個正則王者
image

有的waf會在cookie中出現指紋,有的waf會根據惡意請求重寫頭或刪除響應,修改響應碼,修改響應頁,關閉連線(alert改成drop,日誌記錄直接改成丟棄)
image

image

waf檢測
https://github.com/EnableSecurity/wafw00f

waf喜歡的小聰明:

  1. Cookies
  2. Server Cloaking
  3. Response Codes
  4. Drop Action
  5. Pre-Built-In Rules

nmap的waf檢測指令碼
https://nmap.org/nsedoc/scripts/http-waf-fingerprint.html

其他工具:https://code.google.com/archive/p/imperva-detect/
image

客戶端過濾器

相關文章