誤區(qū):WAF 為什么攔不住注入?)
SQL 注入防護(hù)誤區(qū)WAF 為什么攔不住注入摘要很多企業(yè)安全建設(shè)存在一個(gè)典型誤區(qū)部署 WAF 就可以解決 SQL 注入。在大量 SRC 漏洞挖掘?qū)崙?zhàn)中大量存在 WAF 防護(hù)下的 SQL 注入高危漏洞。WAF 只能作為外層輔助防護(hù)無(wú)法根治 SQL 注入。本文講解 WAF 檢測(cè)原理、底層短板、常見(jiàn)繞過(guò)手段梳理企業(yè)在 SQL 注入防護(hù)上的典型誤區(qū)給出縱深防御方案。本文所有技術(shù)內(nèi)容僅用于安全學(xué)習(xí)、授權(quán)滲透測(cè)試禁止用于未授權(quán)站點(diǎn)攻擊。免責(zé)聲明本文內(nèi)容僅用于網(wǎng)絡(luò)安全學(xué)習(xí)、靶場(chǎng)練習(xí)和授權(quán)安全評(píng)估。未經(jīng)目標(biāo)系統(tǒng)所有者書(shū)面許可禁止對(duì)任何網(wǎng)站進(jìn)行探測(cè)、注入等操作違規(guī)操作帶來(lái)的法律責(zé)任由操作者自行承擔(dān)。0x00 前言在和開(kāi)發(fā)、運(yùn)維溝通安全問(wèn)題的時(shí)候經(jīng)常聽(tīng)到一句話“我們上了 WAFSQL 注入不用怕。”這句話是最致命的安全錯(cuò)覺(jué)。WAF 可以攔截普通掃描器的 Payload抵擋自動(dòng)化批量探測(cè)但是面對(duì)人工構(gòu)造的變形 Payload很容易被繞過(guò)。前面幾篇實(shí)戰(zhàn)文章里我們就用注釋分割關(guān)鍵字直接繞過(guò)中小型 WAF 拿到數(shù)據(jù)庫(kù)數(shù)據(jù)。WAF 的本質(zhì)在 Web 請(qǐng)求入口做字符串檢測(cè)它看不懂后端 SQL 語(yǔ)義無(wú)法修復(fù)代碼漏洞。代碼存在 SQL 拼接漏洞就算部署頂級(jí) WAF依然存在被注入的風(fēng)險(xiǎn)。0x01 WAF 是怎么檢測(cè) SQL 注入的主流 WAF 檢測(cè) SQL 注入分三類(lèi)各有短板特征匹配規(guī)則庫(kù)最常見(jiàn)內(nèi)置大量攻擊特征字符串如union select、and 11、sleep(、load_file。請(qǐng)求參數(shù)命中規(guī)則直接攔截 403。優(yōu)點(diǎn)簡(jiǎn)單高效缺點(diǎn)只能攔截已知 Payload。語(yǔ)法語(yǔ)義檢測(cè)高級(jí) WAF嘗試解析請(qǐng)求里 SQL 語(yǔ)句結(jié)構(gòu)判斷是否存在注入行為。相比簡(jiǎn)單規(guī)則更強(qiáng)但數(shù)據(jù)庫(kù)語(yǔ)法變體極多解析存在局限性。行為檢測(cè)監(jiān)控短時(shí)間高頻 Payload 探測(cè)、異常延時(shí)請(qǐng)求基于訪問(wèn)行為攔截。缺點(diǎn)容易誤殺正常業(yè)務(wù)攻擊者可以降低發(fā)包頻率繞過(guò)。關(guān)鍵點(diǎn)WAF 看到的是 HTTP 請(qǐng)求里的原始字符串真正執(zhí)行 SQL 的是后端數(shù)據(jù)庫(kù)。WAF 和數(shù)據(jù)庫(kù)是兩套獨(dú)立解析器兩者解析邏輯不一致就是繞過(guò)的根本來(lái)源。0x02 WAF 攔不住注入的底層原因原因 1WAF 只匹配字符串不理解 SQL 語(yǔ)義WAF 在前端看文本MySQL 數(shù)據(jù)庫(kù)理解語(yǔ)法。WAF 認(rèn)為union/**/select是兩段無(wú)關(guān)單詞但 MySQL 執(zhí)行時(shí)會(huì)忽略注釋最終執(zhí)行union select。Payload 示例?id1 union/**/select 1,2,3--WAF 規(guī)則匹配連續(xù)union select但是中間插入注釋打斷字符串規(guī)則失效。數(shù)據(jù)庫(kù)執(zhí)行時(shí)自動(dòng)丟棄/**/注釋SQL 正常執(zhí)行。這就是實(shí)戰(zhàn)中最經(jīng)典、成功率最高的 WAF 繞過(guò)方式。原因 2編碼解析差異WAF 和后端應(yīng)用解碼次數(shù)不一致。簡(jiǎn)單 WAF 只解碼一次 URL 編碼后端 Web 框架會(huì)二次解碼。攻擊者傳入雙重編碼 PayloadWAF 檢測(cè)原始編碼字符沒(méi)有觸發(fā)規(guī)則后端解碼兩次之后還原出惡意 SQL。示例單引號(hào)的雙重 URL 編碼為%2527WAF 看到%2527不會(huì)識(shí)別為單引號(hào)后端解析兩次得到成功觸發(fā)注入。除此之外還有 Hex 編碼、Unicode 編碼、char () 函數(shù)編碼都可以把敏感關(guān)鍵字轉(zhuǎn)為編碼形式繞開(kāi)特征檢測(cè)。原因 3數(shù)據(jù)庫(kù)語(yǔ)法靈活存在大量等效寫(xiě)法SQL 語(yǔ)法有大量等價(jià)表達(dá)WAF 規(guī)則庫(kù)不可能收集全部變體。空白字符替換MySQL 支持%09(Tab)、%0a(換行)替代空格不用空格寫(xiě) SQL。?id1 union%09select 1,2,3--MySQL 特有版本注釋/*!50001*/包裹關(guān)鍵字WAF 識(shí)別困難MySQL 高版本會(huì)執(zhí)行注釋內(nèi)部語(yǔ)句。?id1 /*!union*/ /*!select*/ 1,2,3--雙寫(xiě)繞過(guò)部分 WAF 直接替換刪除敏感詞刪除union之后剩下字符拼接出新關(guān)鍵字。Payload 示例uniunionon過(guò)濾后變成union。原因 4二次注入存儲(chǔ)型注入完全繞過(guò)邊界 WAFWAF 只能檢測(cè)實(shí)時(shí)傳入的 HTTP 請(qǐng)求。二次注入場(chǎng)景惡意輸入先存入數(shù)據(jù)庫(kù)WAF 檢測(cè)通過(guò)后續(xù)業(yè)務(wù)邏輯取出這條數(shù)據(jù)直接拼入 SQL 語(yǔ)句執(zhí)行。攻擊請(qǐng)求到達(dá)時(shí)參數(shù)看起來(lái)完全正常WAF 放行漏洞在后續(xù)數(shù)據(jù)庫(kù)讀取時(shí)觸發(fā)。WAF 根本看不到這次 SQL 拼接過(guò)程完全無(wú)法攔截。原因 5誤報(bào)壓力規(guī)則被迫放松很多業(yè)務(wù)上線 WAF 之后大量正常業(yè)務(wù)請(qǐng)求被攔截誤報(bào)用戶(hù)投訴、業(yè)務(wù)報(bào)錯(cuò)。運(yùn)維只能不斷放寬 WAF 規(guī)則關(guān)閉嚴(yán)格 SQL 檢測(cè)。規(guī)則放寬松之后大量 Payload 直接穿透 WAF安全防線形同虛設(shè)。0x03 企業(yè)常見(jiàn) SQL 注入防護(hù)誤區(qū)盤(pán)點(diǎn)誤區(qū) 1部署 WAF 解決 SQL 注入? 錯(cuò)誤。WAF 是臨時(shí)虛擬補(bǔ)丁屬于邊界防護(hù)漏洞根源在代碼字符串拼接。代碼漏洞不修復(fù)WAF 隨時(shí)可以被繞過(guò)。? 正確認(rèn)知WAF 只能作為輔助不能替代代碼層修復(fù)。誤區(qū) 2過(guò)濾單引號(hào)、and、select 關(guān)鍵字就能防注入很多開(kāi)發(fā)直接替換、and、select這種黑名單過(guò)濾極其容易繞過(guò)。攻擊者可以使用注釋、編碼、大小寫(xiě)、雙寫(xiě)、函數(shù)拼接等方式輕松繞過(guò)黑名單。黑名單防護(hù)思路本身就不可靠。誤區(qū) 3使用 ORM 框架就一定不會(huì) SQL 注入很多人覺(jué)得使用 MyBatis、PHP ORM 就絕對(duì)安全。? 如果代碼手動(dòng)拼接字符串、使用 ${} 變量而不是 #{} 預(yù)編譯ORM 一樣會(huì)產(chǎn)生 SQL 注入。ORM 只是工具寫(xiě)法不對(duì)依舊產(chǎn)生漏洞。誤區(qū) 4數(shù)據(jù)庫(kù)權(quán)限高一點(diǎn)無(wú)所謂WAF 擋住攻擊就行就算 WAF 被繞過(guò)高權(quán)限數(shù)據(jù)庫(kù)賬號(hào)會(huì)放大危害。FILE 權(quán)限可以 load_file支持 DNSLog 帶外注入root 賬號(hào)甚至可以寫(xiě) Webshell。最小權(quán)限原則是獨(dú)立于 WAF 的縱深防護(hù)手段。誤區(qū) 5關(guān)閉錯(cuò)誤回顯漏洞就不存在關(guān)閉數(shù)據(jù)庫(kù)報(bào)錯(cuò)頁(yè)面只能讓 Union 注入難以利用但是布爾盲注、時(shí)間盲注、DNSLog 帶外注入依然可以讀取數(shù)據(jù)。沒(méi)有報(bào)錯(cuò)≠不存在注入漏洞。0x04 實(shí)戰(zhàn)案例WAF 防護(hù)下的 SQL 注入某次 SRC 挖掘目標(biāo)部署商業(yè) WAF掃描器批量 Payload 全部被 403 攔截。直接union select→ WAF 攔截嘗試大小寫(xiě)變形UnIoN SeLeCt→ WAF 新版本規(guī)則識(shí)別攔截使用注釋分割 Payloadunion/**/select→ WAF 放行成功注入。WAF 規(guī)則只匹配連續(xù)字符串注釋分割之后特征消失成功穿透 WAF讀取數(shù)據(jù)庫(kù)管理員賬號(hào)。廠商已經(jīng)部署 WAF但高危 SQL 注入漏洞依舊存在。廠商安全團(tuán)隊(duì)原本以為 WAF 足夠防護(hù)直到漏洞被提交。結(jié)論WAF 能攔掃描器攔不住人工精心構(gòu)造的 Payload。0x05 真正可靠的 SQL 注入縱深防御方案優(yōu)先級(jí)從高到低1. 最高優(yōu)先級(jí)預(yù)編譯參數(shù)化查詢(xún)根治使用 PreparedStatement用戶(hù)輸入作為參數(shù)綁定永遠(yuǎn)不參與 SQL 語(yǔ)句解析。無(wú)論怎么變形編碼都無(wú)法觸發(fā) SQL 注入這是唯一根治方案。Java MyBatis 使用#{}禁止${}PHP 使用 PDO 預(yù)編譯Python 使用參數(shù)化 cursor。2. 輸入白名單校驗(yàn)業(yè)務(wù)參數(shù)限制輸入格式。訂單號(hào)只能是數(shù)字手機(jī)號(hào)只能是數(shù)字。不符合白名單直接拒絕不進(jìn)入數(shù)據(jù)庫(kù)查詢(xún)邏輯。白名單優(yōu)于黑名單。3. 數(shù)據(jù)庫(kù)最小權(quán)限原則業(yè)務(wù)數(shù)據(jù)庫(kù)賬號(hào)僅分配業(yè)務(wù)表讀寫(xiě)權(quán)限禁止訪問(wèn) information_schema 系統(tǒng)庫(kù)取消 FILE 權(quán)限杜絕 load_file DNSLog 注入。即使注入成功也無(wú)法讀取庫(kù)表結(jié)構(gòu)限制漏洞危害。4. 關(guān)閉生產(chǎn)環(huán)境數(shù)據(jù)庫(kù)詳細(xì)報(bào)錯(cuò)統(tǒng)一自定義錯(cuò)誤頁(yè)面避免泄露數(shù)據(jù)庫(kù)版本、表路徑增加攻擊者探測(cè)難度。5. WAF 作為輔助防護(hù)WAF 用來(lái)攔截自動(dòng)化掃描器、批量 Payload 探測(cè)降低被爬蟲(chóng)挖到漏洞概率。不要依賴(lài) WAF 作為唯一防護(hù)手段。定期測(cè)試 WAF 繞過(guò)持續(xù)優(yōu)化規(guī)則。6. 代碼審計(jì) 上線安全測(cè)試上線前安全測(cè)試代碼審計(jì)查找 SQL 字符串拼接漏洞定期滲透測(cè)試測(cè)試 WAF 是否存在繞過(guò)點(diǎn)。0x06 安全總結(jié)WAF 的定位是邊界輔助防護(hù)不是漏洞修復(fù)工具。WAF 不能修復(fù)代碼中 SQL 字符串拼接問(wèn)題WAF 依靠特征匹配SQL 語(yǔ)法變體、注釋分割、編碼、二次注入等方式都可以繞過(guò) WAF 檢測(cè)防御 SQL 注入的核心永遠(yuǎn)是預(yù)編譯參數(shù)化查詢(xún)安全建設(shè)必須縱深防御代碼層防護(hù)優(yōu)先搭配輸入校驗(yàn)、最小權(quán)限、WAF、安全審計(jì)多層防護(hù)不要抱有幻想單純依靠 WAF 抵御 SQL 注入在人工攻擊者面前隨時(shí)會(huì)被突破。最后關(guān)于網(wǎng)絡(luò)安全技術(shù)儲(chǔ)備學(xué)好網(wǎng)絡(luò)安全不論是就業(yè)還是做副業(yè)賺錢(qián)都不錯(cuò)但要學(xué)會(huì)網(wǎng)絡(luò)安全還是要有一個(gè)學(xué)習(xí)規(guī)劃。最后大家分享一份全套的網(wǎng)絡(luò)安全學(xué)習(xí)資料給那些想學(xué)習(xí)網(wǎng)絡(luò)安全的小伙伴們一點(diǎn)幫助對(duì)于0基礎(chǔ)小白入門(mén)如果你是零基礎(chǔ)小白想快速入門(mén)網(wǎng)絡(luò)安全是可以考慮的。一方面是學(xué)習(xí)時(shí)間相對(duì)較短學(xué)習(xí)內(nèi)容更全面更集中。二方面是可以找到適合自己的學(xué)習(xí)方案包括網(wǎng)安成長(zhǎng)學(xué)習(xí)路線圖、SRC黑客文檔、護(hù)網(wǎng)行動(dòng)、黑客必讀書(shū)單、面試題、學(xué)習(xí)視頻等教程。帶你從零基礎(chǔ)系統(tǒng)性的學(xué)好網(wǎng)絡(luò)安全需要的可以微信掃描下方CSDN官方認(rèn)證二維碼免費(fèi)領(lǐng)取【保證100%免費(fèi)】1.成長(zhǎng)路線圖學(xué)習(xí)規(guī)劃要學(xué)習(xí)一門(mén)新的技術(shù)作為新手一定要先學(xué)習(xí)成長(zhǎng)路線圖方向不對(duì)努力白費(fèi)。對(duì)于從來(lái)沒(méi)有接觸過(guò)網(wǎng)絡(luò)安全的同學(xué)我們幫你準(zhǔn)備了詳細(xì)的學(xué)習(xí)成長(zhǎng)路線圖學(xué)習(xí)規(guī)劃??梢哉f(shuō)是最科學(xué)最系統(tǒng)的學(xué)習(xí)路線大家跟著這個(gè)大的方向?qū)W習(xí)準(zhǔn)沒(méi)問(wèn)題。2.網(wǎng)安入門(mén)到進(jìn)階視頻教程很多朋友都不喜歡晦澀的文字我也為大家準(zhǔn)備了視頻教程其中一共有21個(gè)章節(jié)每個(gè)章節(jié)都是當(dāng)前板塊的精華濃縮。全套教程文末領(lǐng)取哈3.SRC黑客文檔大家最喜歡也是最關(guān)心的SRC技術(shù)文籍黑客技術(shù)也有收錄SRC技術(shù)文籍黑客資料由于是敏感資源這里不能直接展示哦全套教程文末領(lǐng)取哈4.護(hù)網(wǎng)行動(dòng)資料其中關(guān)于HW護(hù)網(wǎng)行動(dòng)也準(zhǔn)備了對(duì)應(yīng)的資料這些內(nèi)容可相當(dāng)于比賽的金手指5.黑客必讀書(shū)單隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展網(wǎng)絡(luò)安全已經(jīng)成為了當(dāng)今科技領(lǐng)域的一大熱點(diǎn)。這些SQL注入、CCNA、Web滲透、Linux服務(wù)器等以其強(qiáng)大的語(yǔ)言理解和防御能力正在守護(hù)著我們網(wǎng)絡(luò)世界。 那以下這些PDF籍就是非常不錯(cuò)的學(xué)習(xí)資源。6.網(wǎng)絡(luò)安全崗面試題合集當(dāng)你自學(xué)到這里你就要開(kāi)始思考找工作的事情了而工作繞不開(kāi)的就是真題和面試題。這份完整版的網(wǎng)絡(luò)安全學(xué)習(xí)資料已經(jīng)上傳CSDN朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認(rèn)證二維碼免費(fèi)領(lǐng)取【保證100%免費(fèi)】