每一个工程师都要学的安全测试,老板再也不用担心服务器被黑 (5)

转化方法:

function encodeHTML (a) { return String(a) .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); };

2.5 页面编码

页面编码设置:

脚本编码设置:

注意:要想JS即可在UTF-8中正常使用又可以在GBK中正常使用,可以对JS中所有包含中文的字符串做字符转义。

例子:

alert("网络错误"); //弹出网络错误 alert("\u7f51\u7edc\u9519\u8bef"); //弹出网络错误

3. Payload的分类

现在可以认识Payload的了,我不得不说这里对Payload的分类可以很好的让你认识Payload。也帮助你更好的对应到执行点。

3.1 原子Payload

最低层级的Payload。

javascript代码片段

可在eval、setTimeout、setInterval中直接执行,也可通过HTML等构成高阶Payload

javascript:javascript伪协议

结构:javascript:+js代码。可以在a标签的href属性被点击和window.location.href赋值的时候执行。

DATA URI协议

DATA URI结构:data:, 。DATA URI数据在包含在iframe的src属性和object data属性中将会变成可执行的Payload.

字符串转义变种javascript代码片段

unicode或者Latin-1表示字符串。

eval("\u0061\u006C\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u002"); //可执行的JS

3.2 纯HTMLPayload

这种Payload特点不具有可执行的JS,但是存在传播风险,可以把别的站点注入到被攻击网站。

包含链接跳转的HTML片段

主要是传播危害

<a href="http://ha.ck">哈哈,我来钓鱼了</a>

3.3 包含原子Payload的HTML片段Payload

script标签片段

script标签片段这种Payload可以引入外部JS或者可直接执行的script。这种Payload一般不能通过直接复制给innerHTML执行,不过在IE上可以。不过通过document.write是可以执行。

例子:

// Payload原始值:data:text/html,<script>alert('xss');</script> var inputStr ="<script>alert('xss');<\/script>"; document.write(inputStr);

包含事件处理的HTML片段

例如:包含img的onerror, svg的onload,input的onfocus等的HTML片段,都可以变成可执行的Payload。

var inputStr ="<img src=http://www.likecs.com/x onerror=alert('xss');>"; var inputStr ="<svg/onload=alert('xss')>"; var inputStr ="<input autofocus onfocus=alert('xss')>"; xssDom.innerHTML = inputStr;

包含可执行JS属性的HTML片段

javascript伪协议

xssLink.setAttribute("href","javascript:alert('xss')")//点击可触发 var inputStr = "javascript:alert('xss')"; window.location.href = inputStr;

DATA URI

例子:

// Payload原始值:data:text/html,<script>alert('xss');</script> //var inputStr = '<iframe src="http://www.likecs.com/data:text/html,<script>alert("xss");</script>"></iframe>'; // var inputStr = '<object data="data:text/html;base64,ZGF0YTp0ZXh0L2h0bWwsPHNjcmlwdD5hbGVydCgneHNzJyk7PC9zY3JpcHQ+"></object>'; xssDom.innerHTML = inputStr; //弹出alert("xss")

这里只是介绍了主要的Payload,还有很多不常见的Payload。

第四部分:XSS攻击模型分析

这部分我们根据漏洞攻击模型分析一下XSS的执行点和注入点。分析这两点其实就是找漏洞的过程。

1. XSS漏洞执行点

页面直出Dom

客户端跳转链接: location.href / location.replace() / location.assign()

取值写入页面:innerHTML、document.write及各种变种。这里主要会写入携带可执行Payload的HTML片段。

脚本动态执行:eval、setTimeout()、setInterval()

不安全属性设置:setAttribute。不安全属性前面见过:a标签的href、iframe的src、object的data

HTML5 postMessage来自不安全域名的数据。

有缺陷的第三方库。

2. XSS漏洞注入点

看看我们可以在哪些位置注入我们的Payload

服务端返回数据

用户输入的数据

链接参数:window.location对象三个属性href、search、search

客户端存储:cookie、localStorage、sessionStorage

跨域调用:postMessage数据、Referer、window.name

上面内容基本包含了所有的执行点和注入点。对大家进行XSS漏洞攻防很有帮助。

第五部分 XSS攻击防御策略

1. 腾讯内部公共安全防御及应急响应

接入公共的DOM XSS防御JS

内部漏洞扫描系统扫描

腾讯安全应急响应中心:安全工作者可以通过这个平台提交腾讯相关的漏洞,并根据漏洞评级获得奖励。

重大故障应急响应制度。

2. 安全编码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpywyd.html