目录
1. 前言
什么是 HttpOnly:
如果您在 cookie 中设置了 HttpOnly 属性,那么通过 js 脚本将无法读取到 cookie 信息,这样能有效的防止 XSS攻击,具体一点的介绍请 google 进行搜索
可以防止XSS攻击(手法),不意味着防止跨站攻击的漏洞,跨站语句仍旧可以执行
代码类过滤:Xsslabs
HttpOnly 属性过滤防读取
2. 示例
2.1. HttpOnly 安全过滤测试
网站代码添加配置:PHP设置COOKIE的HttpOnly属性
设置参数 session.cookie_httponly
值为 1 (true)。在php.ini 配置中修改或者添加在网页源码中。
添加后js语句正常执行,但获取的 cookie 参数值为空
2.2. HttpOnly 安全过滤绕过思路
获取后台权限两种方式:cookie获取(HttpOnly)、直接账密登录
跨站攻击上绕过 httponly获取账密:
- 浏览器未保存帐号密码:需要 xss 产生登录地址,利用表单劫持。(将数据包中的提交数据再另发一份至己方服务器(仅限于登录框页面功能))
- 浏览器保存帐号密码:产生在后台的XSS,存储型XSS如留言等,浏览器读取帐号密码
读取浏览器保存的明文账密:使用跨站平台
读取浏览器记住的明文密码
配置账密的input标签属性:type、name、id,生成项目代码配套的跨站注入语句
2.3. Xsslabs 关卡代码过滤绕过测试
以靶场为例:xss-labs
XSS-labs通关
// 弹窗触发即可通关,弹窗语句:
<script>alert(1)</script>
javascript:alert(1)
level 1 反射型
level 2
网页上 p 标签中的参数显示被 htmlspecialchars 转化成实体,查看源码发现输入框会暂存提交值显示,则input标签中 value 属性会有相关数据
"><script>alert(1)</script> // 闭合前导符号
level 3
添加 HTML事件属性到输入框 HTML 事件参考手册
// value 属性也被 htmlspecialchars 转换成实体
<input name=keyword value='".htmlspecialchars($str)."'> // 网页源码
// HTML 添加鼠标点击属性到按钮标签页。 事件属性很多应该不局限于鼠标点击
' οnclick='alert(1)
<input name=keyword value='' onclick='alert(1)'> // 拼接后
鼠标被点击时触发。鼠标属性很多,点击、一定、松开等
level 4
level 5
过滤关键字,将onclick过滤成o_nclik,同时也有大小写过滤
直接添加新标签卧槽:
// 闭合前导符号
" ><a href='javascript:alert(1)'>嗨嗨嗨</a>
level 6
- 甚多关键词替换,
- 但是没进行大小写替换
level 7
关键词被 str_replace 替换成空字符串,同文件上传时躲避关键字检测,只过滤一次可以双写
level 8
本关要求提交 url 链接 javascript:alert(1)
。但存在大小写转换以及关键词替换,
借用编码工具转换成绕过PHP函数检测的格式,但HTML或者url可以识别转义的编码。
迪师傅推荐的工具有问题:在线Unicode编码解码
level 9
查看源码,有检测是否存在关键词:http://
http://javascript:alert(1) 直接这样写会影响js执行,需要添加关键词任其检测,但不能影响js的执行
javascript:alert(1) <!-- http:// -->
level 10
- 查看网页源码并测试三个输入框的关键词:
- 修改与添加输入框的属性
level 11
- 从level10跳转过来可以看到value的参数,是上关的url内容,判断是读取来源,即数据包中属性
Referer
- 明了读取参数的位置则修改参数
" type="text" onclick="alert(1)" >//
XSS : 跨站攻击
CSRF :跨站请求伪造
网页检测所执行脚本的来源,以判断执行脚本时从自身执行还是其他域名,防止跨站攻击。所以需要对请求来源进行伪造
level 12
- 这里明显了 :接收浏览器类型
- 添加同上一关语句到该在的地方
others
数据提交和注入相似,get、post、cookie、数据包参数等方式接收,找寻可以上传js语句的地方
完言
- 跨站漏洞是需要他人触发的漏洞,由于此条件限制,视情况,可以好用可以无用
- 手工判定跨站漏洞:通过访问网站的数据包(不一定存在网站的url参数中),通过测试数据包中是否有信息修改而触发页面代码中是否有相关变动; 有代码则通过源码和前端分析