SQL Injection學習心得(1)
1,與SQL相關的知識點
-
schemata( ##庫名##意為:提要,綱要,為schema的負數-)庫儲存使用者建立的所有資料庫的苦命,需要記住,該表中記錄資料庫庫名的欄位名為schemata_name(sql對大小寫不敏感)
-
tables(##表名##意為:表)表中儲存著該使用者建立的所有資料庫的庫名和表名,需要記住,該表中,記錄資料庫庫名和表名的欄位名分別為:table_schema(table表來自於schemata庫的表名)和table_name(在tables庫中,這一行的資料庫的名稱)。
-
columns(##欄位名##,意為柱)表儲存的是該使用者建立的所有資料庫的庫名,表名和欄位名,為:table_schema(來自schema表中的資料庫名稱),table_name(來自table庫中的名稱),column_name(來自columns庫中的名稱)。
我理解為:類似於資料夾,大資料夾(schemata),中資料夾(tables),小資料夾(columns),檔案分類越小越深,則可以看檔案是從哪裡來的,類table_name。
(可以參考:https://blog.csdn.net/zy15667076526/article/details/108941193)
2,mysql查詢語句
1. select
2. limit:limit m,n(m是指記錄開始的地方,從0開始表示從第一條記錄開始;n是指-》取n條記錄。如:limit 0,1;
3. where
4. 幾個函式要記住
- database()當前網站使用的資料庫
- version()當前的MYSQL版本
- user()當前MYSQL的使用者
- 關鍵:group_concat()函式
5. 註釋符:#或--空格(可以用+)或 /**/
6. 內聯註釋符
/*! code*/
3, union注入攻擊(web安全原理剖析第97頁)
1. id=-1 union select 1,2,3;
意為: 從表中選取資料,結果放在一個結果集中,進行合併。(因為庫中沒有-1的資料,所以會返回union select的結果)
2. union select 1,2,3;
返回2,3;意為:2,3的位置可以輸入MySQL語句如:union select 1,database(),3;
但命令過長時,兩端加括號
如可以將2改成:
(select table_name from information_schema.tables where table_schema='users' limit0,1;)
意為:select 資料庫表名 from 資料庫庫名,(從根目錄開始查詢-目錄形式)where 資料庫庫名=users。
3.group_concat('---',table_name),3 from information_schema.tables where table_schema='security' --+
4,sqlmap應用解題:
以sqlilabs第一關為例:
(https://www.cnblogs.com/ApricityJ/p/12804436.html)