今天继续给大家介绍渗透测试相关知识,本文主要内容是HTTP Only限制XSS盗取cookie。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、HTTP Only原理
在上文XSS平台与cookie获取中我们提到过,XSS攻击的主要手段之一就是盗取目标用户cookie。针对这一情况,我们可以设置HTTP Only来防止Cookie被盗取。
在设置了HTTP Only后,我们就无法通过document对象直接获取到cookie值,这样就避免了使用XSS的手段拿到cookie值,进而使用cookie登录系统了。
二、HTTP Only设置
HTTP Only的设置可以采用三种方式:
1、php.ini文件设置
在PHP配置文件中,将session模块的:session.cookie_httponly属性设置为True或者1。
PHP配置文件设置如下所示:
2、页面设置
除此之外,我们还可以在页面中进行设置,在页面中添加如下代码:
<?php
ini_set("session.cookie_httponly", 1);
?>
或者是
<?php
session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
?>
也可以设置HTTP Only
3、函数设置
最后,我们在发送cookie时,也可以使用setcookie函数,常用的cookie设置函数有两种,该函数的第7个参数如果设置为TRUE,则表示开启HTTP Only,如下所示:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
注意:这三种设置方法,作用域逐级递减,但是优先级不断升高。有的同学在做HTTP Only实验的时候,无法得到预期的结果,就是因为只更改了PHP配置文件设置或者页面设置,但是由于函数设置要优先于PHP配置文件设置,因此实际上并没有设置HTTP Only。
在这里特别说一下使用DVWA做实验的同学,你必须将安全级别修改为impossible,你的HTTP Only设置才会生效。但是一旦你更改为impossible之后,你很难将XSS代码插入到留言板中(当然,鉴于你肯定能够操作网站源码,因此你可以直接在源码层次上插入)。
在开启HTTP Only后,服务器在向客户端发送cookie时,就会添加HttpOnly字段,如下所示:
此外,我们也可以在浏览器自带的开发者工具中,查看到该cookie的HTTPOnly字段被打上了勾,如下所示:
三、HTTP Only效果展示
最后,我们来展示一下HTTP Only的效果。
(一)控制台展示
我们当前的Cookie状态如下所示:
可以看出,当前有2个cookie是设置了HTTP Only,还有一个cookie是没有设置HTTP Only。我们在浏览器控制台中,尝试使用JavaScript代码查看当前的cookie,结果如下所示:
可以看出,一个cookie被设置为HTTP Only后,就无法通过JavaScript代码获取到。
(二)XSS平台展示
此外,我们还可以来尝试看设置了HTTP Only属性后,使用XSS平台能否获得Cookie。
我们使用熊海CMS来进行实验。熊海CMS原始代码如下所示:
如果我们想将cookie设置为HTTP Only属性,就需要把setcookie()函数修改为如下所示:
这两种不同的设置,决定了cookie是否含有HTTP Only属性,XSS平台获取的信息如下所示:
从上图中可以看出,在设置了HTTP Only后,XSS平台无法获得用户的Cookie信息了。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200