1. 程式人生 > >web安全—sql註入漏洞

web安全—sql註入漏洞

關於 style union 原理 lec 包括 視圖 16進制 如果

SQL註入-mysql註入

一.普通的mysql註入

MySQL註入不像註入access數據庫那樣,不需要猜。從mysql5.0以上的版本,出現一個虛擬的數據庫,即:information_schema數據庫,該數據庫存在放著其他數據庫的所有信息,所以mysql註入的原理就是運用information_schema數據庫進行實施,接下來我們具體說明怎麽運用。

  1. 用order by猜測字段數

在發現有註入點的mysql數據庫,首先要確定該數據庫的字段數。這時候就要運用一下order by語句了。

Payload:order by +推測的字段數(如果推測的字段數超過該數據庫的字段數會報錯)

  1. 運用mysql的內置函數和union select聯合查詢

在推測完字段數後,要對該數據庫的信息進行獲取,這時MySQL的內置函數起了很大的作用。

常用的函數:

User():查看當前用戶

Database():查看當前的數據庫

Version():查看當前數據庫的版本

例如:這個註入點是數字型的MySQL註入,並且已經爆出一個數據庫有3個字段,則可以構造這樣的payload: union select 1,2,3 註意這時要使union前面的語句報錯,這樣才能判斷哪個是可顯字段。

在可顯字段上替換成上面的內置函數,即可查看響應的信息。假設2,3是可顯字段。則可以構造這樣的payload:union select 1,user(),database() 這條payload可以查看數據庫當前的用戶是誰和當前的數據

庫名。

  1. 運用information_schema函數爆出數據庫的信息

首先先對information_schema裏的表和字段進行說明一下。我們對MySQL註入就運用了information_schema中的兩張表:tables和columns

Tables:提供了關於數據庫中的表的信息(包括視圖)。詳細表述了某個表屬於哪個schema,表類型,表引擎,創建時間等信息。

Columns:提供了表中的列信息。詳細表述了某張表的所有列以及每個列的信息。

也運用了倆個字段:table_name和column_name,table_name是屬於tables裏的字段,記錄了其他數據庫表的信息。Column_name是columns裏的字段,記錄了其他數據庫的表的字段的信息

好了到了最重要的環節了,上面已經對information_schema函數進行了簡單的介紹。現在就來實際運用一下吧!!!!!

(1) 爆出數據庫的表名

Payload:1.union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=”當前數據庫名”

2.union select 1,table_name,3 from information_schema.tables where table_schema=”當前數據庫名” limit 0,1

以上倆條payload都上爆出數據庫表名的語句,我們來逐個分析一下。Group_concat函數將查詢的數據整合到一個字段中, Limit子句可以被用於強制 SELECT 語句返回指定的記錄數。limit 0,1:返回查詢的第一條數據

第一條payload:意思是從當前的數據庫中查詢所以的表名。第二條payload:意思是從當前的數據庫中查詢第一個表名。當前數據庫名可以轉化成16進制來繞過某些限制,註意不要加雙引號了。

(2)爆出表中的字段

Payload:1.union select 1,group_concat(column_name),3 from information_schema.columns where table_name=”要查詢的表名”

2.union select 1,column_name,3 from information_schema.columns where table_name=”要查詢的表名” limit 0,1

和上面的一樣,只不過換了爆出字段的函數

(3)爆出字段內容

Payload:union select 1,字段名,字段名 from 要查詢的表名

這條payload和access數據爆出字段內容的一樣,這裏不再進行說明。

經過上面的操作,對於普通的mysql註入就完成了。當然mysql的註入類型還有很多,例如:基於報錯的註入,基於布爾的盲註,基於時間的盲註,post註入等等。將在後面的博客中更新

但是還是那句話sql註入萬變不離其中,就只有倆種類型:數字型和字符型。

web安全—sql註入漏洞