【33】WEB安全学习----XSS攻击1

关于XSS跨站脚本攻击有太多文章和教材提供了,本章就简单介绍XSS攻击原理,重点介绍XSS代码构造和绕过。

一、XSS攻击原理

XSS攻击:即跨站脚本攻击,是指攻击者在网页中嵌入客户端JavaScript脚本,当用户使用浏览器浏览嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。

JavaScript可以用来获取用户cookie、改变网页内容、URL跳转等等,那么存在XSS漏洞的网站就可以盗取用户cookie、黑掉页面、导航到恶意网址等。

XSS攻击分为三类:反射型存储型DOM型

反射型XSS

反射性XSS也叫非持久型XSS,是最容易出现的一种XSS漏洞,当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。这个过程就像一次反射,故称为反射型XSS。

存储型XSS

存储型XSS又被称为持久型XSS,存储型XSS是最危险的一种跨站脚本。

允许用户存储数据的Web应用程序都可能出现存储型XSS漏洞,当攻击提交一段XSS代码后,被服务器端接受并存储,当攻击者再次访问页面时,这段XSS代码就会被读取出来并响应给浏览器,造成XSS跨站攻击。

DOM型XSS

学过JavaScript都知道DOM(文档对象模型),使用DOM可以允许程序动态的访问和跟新文档的内容和结构。

而基于DOM型的XSS是不需要与服务器端交互的,它只发生在客户端处理数据阶段。

二、XSS攻击利用

JavaScript语言非常强大,可以做很多事情,可利用JavaScript做如:经纬度定位、获取HTML源码、H5截屏、端口扫描、CSRF攻击、键盘记录、页面伪造、点击劫持、钓鱼等等。

具体功能可参考BEFF和一些XSS利用平台。

扫描二维码关注公众号,回复: 3494264 查看本文章

三、XSS攻击修复

1、HttpOnly

HttpOnly最早由微软提出,如今已成为一个标准,浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie。

所以,HttpOnly是解决XSS攻击后的Cookie劫持攻击,而不是解决XSS攻击。

2、输入检查

对用户提交的数据进行检查,如长度、类型等检查,或采用XSS Filter过滤器进行XSS检查。

3、输出编码

可采用HTML实体编码HtmlEncode。对&、<、>、"、'、/等进行转义编码。

四、XSS构造研究

1、插入<>标记

如果能插入<>标记,那么就能操作一个html标签,然后通过<script>标签就能插入任意的脚本代码。

<script>alert(/xss/)</script>

2、利用HTML标签属性值执行XSS

如果不能构造自己的HTML标签,但是还是可以通过其他形式来执行XSS,如HTML标签的属性值。

很多HTML标签中的属性都支持JavaScript:[code]伪协议的形式,如:

<img src="javascript:alert('xss');">

<table background="javascript:alert('xss');">

但目前支持这种伪协议的浏览器为老版本,如IE6。

并不是所有的标记属性都能产生XSS,通常只有引用文件的属性才能触发XSS。

如:href=、lowsrc=、bgsound=、background=、value=、action=、dynsrc=等等。

经测试,火狐、谷歌浏览器均不支持此伪协议:

只有IE6支持此伪协议:

3、利用事件触发

因为标签属性值只有特定浏览器才能触发,如IE6,那么有没有其他办法呢?事件就是其中一种方法。

事件就是浏览器自身执行的某种动作,如click、mouseover、load等,而响应事件的函数叫做事件处理函数(事件侦听器)。如:

<img src="#" onerror=alert(/xss/)>

onerror是IMG标记的一个事件,只要页面中发生错误,该事件立即被激活。

4、利用CSS进行跨站攻击

使用CSS样式表执行JavaScript具有隐蔽性、灵活多变等特点,但是CSS样式表有一个很大的缺点:各浏览器不能通用,甚至于同一浏览器不同版本之间都不能通用。

<div style="background-image:url(javascript:alert(/xss1/))">
<style>
    body {background-image:url("javascript:alert(/xss2/)");}
</style>

<style>
    @import 'javascript:alert("xss3")';
</style>

经测试,此代码也只能在IE6中被触发:

可见,以上能通杀的就只有利用事件进行触发的方法。

5、XSS绕过

大小写绕过:jaVaSCript

单双引号互用:<img src='xxx'>、<img src="xxx">

不用引号:<img src=javascript:alert(xss);>

绕过空格:<img/src="javascript:alert('xss');">

编码绕过:HTML属性值支持ASCII码。

通用:

十进制编码
<img src="#" onerror=&#97;&#108;&#101;&#114;&#116;&#40;&#47;&#120;&#115;&#115;&#53;&#47;&#41;>  

十六进制编码
<img src="#" onerror=&#x0061;&#x006c;&#x0065;&#x0072;&#x0074;&#x0028;&#x002f;&#x0078;&#x0073;&#x0073;&#x0035;&#x002f;&#x0029;>

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82939753