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键。