绕过html编码,编码绕过问题

在bwapp上尝试xss注入时,在level3层次上,后台用了htmlspecialchars函数编码转义,没有办法绕过。网上搜索后,给出的结论是,函数对&,',",进行了转义,其本身没法绕过,但是视它所处的环境来定。比方说,

hello

document.getElementById("1").innerHTML = x;

注意这个x变量,它首先是在script环境下,然后通过改变dom结构,又输出到了html环境中,所以它会先被js解码,然后又被html解码。如果我们构造一个js编码后的攻击payload,那么它不含&,',",,所以可以绕过htmlspecialchars函数,当它解析之后,加入到html中之后,就又成为有攻击性的代码得以执行。

这个问题得以理解之后,我在看道哥的《白帽子讲web安全》一书中,看到了关于DOM型xss的内容,它不按攻击代码是否存储于服务器来划分,而是指通过改变DOM结构来达到攻击的这一类的xss。就上面的例子来说,script中的内容输出到html中,就正好形成了一次xss攻击。

这样就又引来了新的思考,第一,浏览器解析过程;第二,浏览器解码顺序。

浏览器解析过程

浏览器的解析过程,关于这个问题,可以参考how browsers work,它的译文How browsers work,觉得复杂的可以参考HTML页面加载和解析流程详细介绍。总结下来,就是从头开始加载,遇见

解码顺序

文章编码与解码 -- 浏览器做了什么谈到html实体解码在DOM树构建之后,他也给出了证明,因为试图构造

这样的攻击是无效的,因为它破坏了dom树的构建,而HTML 解码,是在DOM树结构OK,对节点内容解析的时候,会进行转码。

那么html解码和js解码的顺序是怎么样的,

在遇到

在遇到类似于

#

这样既在html环境内,又会触发js解释器的情况下(onclick,onbeforeunload等),会先进行html解码,在触发onerror时又会对js进行解码。

所以,在进行防止xss攻击时,要注意数据的流向经过哪些环境,在每一个环境下都需要进行一次处理。

就以开头的例子来说,变量首先是在js环境中,再到html环境中,顺序是js解码,html解码,那么我们后台在进行处理的时候,就需要先对变量做一次html编码,再做一次js编码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值