原理篇 sql注入2 聯合查詢注入

2022-08-17 10:39:22 字數 2079 閱讀 3668

首先要了解什麼是聯合注入,聯合查詢注入是回顯注入的一種,也可以說聯合注入的前提是,頁面上要有回顯位。那又引出了另一問題,什麼是回顯位?

在乙個**的正常頁面,服務端執行sql語句查詢資料庫中的資料,客戶端將資料展示在頁面中,這個展示資料的位置就叫回顯位。

聯合注入通常是有一定的步驟:

1. 判斷注入點

2. 判斷注入型別(數字型型or字元型)

3. 判斷字段數

4. 判斷回顯位

5. 確定資料庫名

6. 確定表名

7. 確定欄位名

8. 拿到資料

下面是結合實列演示的乙個完整的聯合注入過程:

我們通過在變數後加payload來判斷注入點:

and 1=1 /and 1=2 /' 通過輸入這些payload後的回顯頁面,我們輕鬆看出是否存在注入;

另外mysql有三種常用的注釋符:

-- 該注釋符後面有乙個空格;

/* */ 注釋符號內的內容;

# 對該行#後面的內容進行注釋。

數字型的sql語句大概是下面這這型別:

select * from 【表名】 where id = 1
測試步驟:

1. 加單引號,這時sql語句後面多了乙個單引號,會報錯;

2. 加and 1=1,語句正常執行,頁面與原始頁面相同;

3. 加and 1=2,語句也可以正常執行,但頁面會與原始網頁存在差距

如滿足以上三點,可以判斷此處存在數字型注入

字元型注入的sql語句為:    

select * from 【表名】where name = 'zhangsan』
同樣加單引號,但後面要帶上注釋符來注釋掉後面多餘的單引號,具體還是拿sql語句直**一下: 

select * from 【表名】where name = 'zhangsan』 and 1=1 #'
第二個單引號是我們自己加的,用來'閉合前乙個引號以便我們在後面繼續加**,#用來注釋掉最後面多餘的'

當回顯正常時我們可以判斷此處為字元型注入。

order by 函式是對mysql中查詢結果按照指定欄位名進行排序,除了指定欄位名還可以指定欄位的字段進行排序,第乙個查詢字

段為1,第二個為2,依次 類推。若輸入數值為n時報錯,那麼表示沒有n個字段,總的字段數為n-1。

通過上一步我們可以知道字段數,然後通過union select 1,2,3 ······n (n的數值為字段數)來判斷回顯位置

**寫的比較粗糙,四個欄位都有回顯,而一般情況下只有個別位置會有回顯,我們要利用的就是這些位置

database() 顯示當前資料庫

在有回顯的位置寫入命令

SQL注入 聯合查詢注入

注入條件 頁面有顯示位,即在乙個 的正常頁面,服務端執行sql語句查詢資料庫中的資料,客戶端將資料展示在頁面中,這個展示資料的位置就叫顯示位。找的注入點 查詢列數 找到顯示位 獲取列中的資訊 注入點 查詢列數 order by 猜測的列數 order by 11 返回正常,有11列 order by...

sql注入 union聯合查詢注入

目錄 一,sql注入必記的一庫三表 二,union聯合查詢注入 1,基本注入流程 1,判斷注入點 2,判斷多少列 3,判斷顯示位 4,顯示資料庫的基本資訊 5,顯示有哪些資料庫 6,顯示資料庫下有哪些表 7,判斷表裡有哪些字段 八,查詢資料表中有哪些資料 information schema 資料庫...

聯合查詢SQL注入

sql注入介紹 sql注入介紹 注入產生原因 web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,導致惡意payload直接帶入sql語句執行,從而執行payload中非法操作!新建php檔案,將下面 複製到php檔案中,在瀏覽器中訪問即可 host 127.0.0.1 dbuser root...