1 問題復現
(1)登入DVMA後,設定DVWA Security為Low。
(2)進入File Inclusion,訪問dvwa/vulnerabilities/fi目錄下的的test.txt檔案(自己建立的測試檔案)。
(3)報錯ERROR: File not found! 找不到檔案。
2 抓包分析
(1)使用BurpSuit抓包。
訪問test.txt檔案的請求中,Cookie有兩個security鍵;導致設定DVWA Security為Low沒有成功。
(2)在瀏覽器中檢視“設定DVWA Security為Low”時,服務端Set Cookie情況。
在Set SessionId時指定了使用路徑;而Set Security是沒有指定路徑。
(3)Cookie的屬性。
屬性 |
描述 |
name |
Cookie的名稱,Cookie一旦建立,名稱便不可更改 |
value |
Cookie的值。如果值為Unicode字元,需要為字元編碼。如果值為二進位制資料,則需要使用BASE64編碼 |
maxAge |
Cookie失效的時間,單位秒。如果為正數,則該Cookie在maxAge秒之後失效。如果為負數,該Cookie為臨時Cookie,關閉瀏覽器即失效,瀏覽器也不會以任何形式儲存該Cookie。如果為0,表示刪除該Cookie。預設為-1。 |
secure |
該Cookie是否僅被使用安全協議傳輸。安全協議。安全協議有HTTPS,SSL等,在網路上傳輸資料之前先將資料加密。預設為false。 |
path |
Cookie的使用路徑。如果設定為“/sessionWeb/”,則只有contextPath為“/sessionWeb”的程式可以訪問該Cookie。如果設定為“/”,則本域名下contextPath都可以訪問該Cookie。注意最後一個字元必須為“/”。 |
domain |
可以訪問該Cookie的域名。如果設定為“.google.com”,則所有以“google.com”結尾的域名都可以訪問該Cookie。注意第一個字元必須為“.”。 |
comment |
該Cookie的用處說明,瀏覽器顯示Cookie資訊的時候顯示該說明。 |
version |
Cookie使用的版本號。0表示遵循Netscape的Cookie規範,1表示遵循W3C的RFC 2109規範 |
3 修復服務端程式碼
(1)檢視服務端setcookie的php程式碼。
發現沒有給security指定使用路徑。
(2)修改setcookie()中security的路徑為“/”。
(3)PHP setcookie()函式。
語法:setcookie(name,value,expire,path,domain,secure)
引數 |
描述 |
name |
必需。規定 cookie 的名稱。 |
value |
必需。規定 cookie 的值。 |
expire |
可選。規定 cookie 的有效期。 |
path |
可選。規定 cookie 的伺服器路徑。 |
domain |
可選。規定 cookie 的域名。 |
secure |
可選。規定是否透過安全的 HTTPS 連線來傳輸 cookie。 |
4 驗證結果
(1)清除瀏覽器Cookie。
(2)重新登入DVMA,再次設定DVWA Security為Low。
Set SessionId的路徑和Set Security的路徑一致。
(3)進入File Inclusion,訪問dvwa/vulnerabilities/fi目錄下的的test.txt檔案。
成功讀取到檔案內容,並且請求Cookie中只有一個security鍵。