1. 程式人生 > 資料庫 >sql注入繞過防禦

sql注入繞過防禦

sql注入繞過防禦

無waf

無waf方式已經在漏洞重溫sql注入中有描述,這裡就不多做贅述,有興趣的朋友可以去看看。

有waf

內聯註釋

簡單理解

在進行演示之前,首先了解一下內聯註釋。內聯註釋通常用於繞過網站安全狗,也就是俗稱的過狗。簡單來說,如果waf攔截的特徵是兩個關鍵字連線在一起,例如我們在判斷顯示位置時使用的order by,在聯合查詢的時候使用的union select。當著些關鍵字聯合出現的時候,就會被waf發現,並且攔截。在這個時候,如果我們測試出單個不被攔截的關鍵字,然後利用內聯註釋將聯用會被攔截的關鍵字隔開,就可以完成繞過。

簡單來說,就是在本來應該加空格的地方使用內聯註釋(/特殊字元

/)來代替,就可以過狗。

靶機環境演示

這裡我選擇的環境是sqli-labs

可以看到,這裡在測試sql注入的時候,我使用了order by判斷回顯字元

根據報錯頁面,可以看出網站使用了waf,並且對我們進行注入的關鍵字進行了封堵。這個時候,我們就可以測試,waf攔截的是聯合字元,還是別的特徵。

所以這裡我們分別測試,order 、by單獨輸入是否會被攔截。

可以看到,單獨輸入order和單獨輸入by都不會被攔截,所以我們可以使用內聯註釋的方法來繞過網站的防禦。

使用命令:

?id=1/* */order/* */by/* */3

可以看到,簡單的/**/也會被網站攔截,我們需要在註釋裡面填寫一些特殊字元,來繞過安全狗。這裡,我們可以使用burp進行爆破。

首先我們先抓取對網站的請求,然後將註釋內部設定為變數。

設定特殊字符集,進行爆破。

找到可以讓網站返回正常的payload,利用payload進行sql注入攻擊。

利用burp跑出來的payload,我們就可以成功完成注入

然後就是跑資料的過程了

這裡可以發現,在我們跑資料庫名稱的時候,又被網站攔截了,因為前面我們基本上是每個字元中間都使用內聯註釋隔開的,所以問題應該出現函式database()上。所以我們可以在database和()之間再追加一個內聯註釋。

隨後,我們就可以使用正常手段進行注入了。但是要注意,在一些注入常用關鍵字的位置,一定要使用內聯註釋隔開,以防備資料庫攔截。

分塊傳輸

簡單理解

簡單來講,分塊傳輸就是講資料切分成幾部分,進行輸入,然後在資料包中的表現形式為切分成幾行。在這幾行中,每一行真實資料的前面都會帶上一個資料,標識這一行資料的長度。在這些資料的後面,我們可以加分號,然後在分號後面新增隨機字元來繞過防禦。

分塊傳輸編碼是HTTP中的一種資料傳輸機制,

允許HTTP由應用伺服器傳送給客戶端應用的資料可以分成多個部分。分塊傳輸編碼只在HTTP協議1.1版本(HTTP/1.1)中提供。利用的話,假設說我要在資料包裡輸入id=1在資料包裡就可以寫成,2換行id換行2換行=1,這裡的兩個2表示換行之後字元的個數,在2後面跟一個分號,然後在後面隨意輸入字元,就能騙過waf,現在burp也有分塊傳輸的外掛。