XSS跨站脚本攻击原理与常见的脚本及《XSS跨站脚本攻击剖析与防御》摘录总结

  • 一.XSS跨站脚本攻击的原理
    • 1.什么是XSS跨站脚本
    • 2.跨站脚本攻击产生因素
  • 二.XSS跨站脚本攻击的类别
    • 1.反射型跨站脚本
    • 2.持久型跨站脚本
  • 三.XSS跨站脚本攻击的方式
    • 1.XSS构造剖析
  • 四.XSS跨站脚本攻击的利用
    • 1.Cookie窃取
    • 2.会话劫持
    • 3.网络钓鱼
    • 4.XSS History Hack
    • 5.客户端信息刺探
    • 6.其他恶意攻击剖析
  • 五.XSS跨站脚本攻击的工具
  • 六.XSS跨站脚本攻击的发掘
  • 七.XSS跨站脚本攻击的防御

一.XSS跨站脚本攻击的原理

1.什么是XSS跨站脚本

跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通过HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害者用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)是世界上最知名的Web安全与数据库安全研究组织,在该组织发布的2017年的统计中,XSS跨站脚本漏洞高居第三位

2.跨站脚本攻击产生因素

1.Web浏览器本身的设计。浏览器包含了解析和执行JavaScript等脚本语言能力,这些语言可以创建各种格式丰富的功能,而浏览器只会执行,不会判断数据和程序代码是否有恶意;
2.交互过程。输入与输出是Web应用程序最基本的交互,在这个过程中若没有做好安全防护,Web应用程序很容易出现XSS漏洞;
3.XSS漏洞危害意识。很多人没有真正意识到XSS漏洞的危害,导致XSS漏洞受到开发人员忽视;
4.触发方式简单。只要向HTML代码中注入脚本即可,且执行手段众多,譬如CSS、Flash等,完全防御是一件相当困难的事情;
5.Web2.0的流行。Web2.0时代鼓励用户信息分享与交互,产生了越来越丰富的交互功能,如论坛、博客或社交网络,所以产生XSS漏洞的概率增加。

二.XSS跨站脚本攻击的类别

1.反射型跨站脚本

反射型跨站脚本(Reflected Cross-site Scripting)也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见的,也是使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中。

反射型XSS的利用一般是攻击者通过特定的手法(如电子邮件),诱使用户去访问一个包含有恶意代码的URL,当受害者点击这些链接的时候,恶意的JavaScript代码会直接在受害者主机上的浏览器执行。只有在用户点击时才触发,而且只执行一次,非持久化,恶意URL的暴露问题可通过各种编码转换解决,以增强其迷惑性。此类XSS通常出现在网站的搜索栏、用户登入口的地方,常用来窃取客户端Cookie或进行钓鱼欺骗


































含恶意XSS链接






访问链接






上传数据






下载数据






执行恶意代码
传递隐私数据
或跳转钓鱼链接






获取到用户隐私数据
完成反射型XSS攻击










攻击者









用户









浏览器









正常服务器









恶意服务器







2.持久型跨站脚本

持久型跨站脚本(Persistent Cross-site Scripting)也称作存储型跨站脚本(Stored Cross-site Scripting),比反射型跨站脚本更具有威胁性,并且可能影响到Web服务器自身的安全。
持久型跨站脚本的利用不需要用户点击特定的URL,持久型XSS一般出现在网站的留言、评论、博客日志等交互处,攻击者事先将恶意的JavaScript代码上传或存储到具有漏洞的服务器中,只要用户浏览包含此恶意JavaScript代码的页面就会执行恶意代码。










































恶意代码






正常访问






上传数据






恶意代码






执行恶意代码
上传用户数据






注入脚本
控制权限






用户数据






注入脚本










攻击者









漏洞服务器









用户









浏览器









漏洞服务器









恶意服务器









恶意服务器









攻击者







持久型跨站脚本的危害比反射型XSS大,更严重的是持久型跨站脚本能轻易编写危害性更大的XSS蠕虫,跨站蠕虫是使用Ajax/JavaScript脚本语言编写,能在网站中事先病毒的几何数级传播,其感染程度和攻击效果十分可怕。

三.XSS跨站脚本攻击的方式

1.XSS构造剖析

1. 绕过XSS-Filter
为了防御跨站脚本攻击,会在Web应用中设计一个XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击、恶意的HTML或简单的HTML格式错误。XSS Filter一般是基于黑白名单的安全过滤策略,在用户提交信息时,会对所有的输入进行检验,如检测到黑名单中的数据,便进行拦截、编码和消毒过滤等处理。
以下从“攻”的角度探讨一些测试用例:
(1)利用<>标记注入HTML/JavaScript
如果未限制<>等标记,那攻击者就能操作一个HTML标签,然后通过<script>标签插入恶意代码脚本;

<script>alert(1);</script>  //弹出窗口显示“1”

(2)利用HTML标签属性值执行XSS
很多HTML标记中的属性都支持JavaScript:[code]伪协议形式,这个特殊的协议类型声明了URL主体是任意的JavaScript代码,由JavaScript的解释器运行,攻击者可以利用部分HTML标记的属性值进行XSS攻击;此类攻击具有一定的局限性,并不是所有的浏览器都支持Javascript伪协议

<table background="javascript:alert(1);"></table>   //通过表格背景属性插入javascript代码
<img src="javascript=alert(1);">   //通过图片链接插入javascript代码
还有如下属性:href=、lowsrc=、bgsound=、value=、action=、dynsrc=

注:通常只有引用文件的属性才能触发跨站脚本,也并非所有嵌入到Web页面中的脚本都是Javascript,还允许有其他值,比如Vbscript。
(3)空格回车Tab键
如果XSS Filter仅仅把敏感的输入字符列入黑名单,对敏感字javascript而言,用户可以利用空格、回车和Tab键绕过限制:

<img src="java   script:alert(1);">   //java和script中的间隔为Tab键

产生原因为JavaScript语句通常以分号结尾,如果JavaScript引擎确定一个语句是完整的,而这一行的结尾有换行符,那就可以省略分号,如果同一行由多个语句,那么每个语句就必须使用分号结束。除了在引号中分割单词或强制结束语句外,额外的空白无论与何种方式添加都无所谓;

var a= true   //单语句可省略分号
var a= true; var b= "this is also true";  //同一行多语句以‘;’结束
var a
='hello word';   //换行赋值成功

(4)对标签属性值转码
对普通的HTML标签属性值进行过滤,攻击者可以通过编码处理来绕过,因为HTML中属性值本身支持ASCII码形式。

<img src="javascript:alert(1);">   //标准代码
<img src="javascrip&#116&#58alert(1);">   //ASCII编码后
//‘t’的ASCII码值为166,用‘&#116’表示,‘:’则表示为‘&#58’
//此外Tab键的ASCII码‘&#9’、换行键的‘&#10’、回车键的‘&#13’可以被插入到代码的任意位置。

为了防范利用HTML标签属性值编码的XSS,最好也过滤‘&’,‘#’,‘\’等字符;
(5)产生自己的事件
JavaScript与HTML之间的交互是通过事件来实现的,事件就是用户或浏览器自身执行的某些动作,而响应事件的函数就叫做事件处理函数(或事件侦听器)

//点击【click me】按钮,触发onclick事件,执行JavaScript代码
<input type="button" value="click me" onclick="alert('click me')" />

攻击者可以通过大量事件执行跨站脚本,只列举部分:

<img src=x onerror=alert(1)>
//onerror是img标记的一个事件,只要页面发生错误,该事件立即被激活ondblclick   //鼠标双击某个对象
onkeypress   //某个键盘的键被按下或按住
onload   //某个页面或图像被完成加载
onmousemove   //鼠标被移动
onsubmit   //提交按钮被点击

(6)扰乱过滤原则

<img src="javascript:alert(1);">   //正常
<IMG SRC="javascript:alert(1);">   //转换大小写
<iMg sRC="jaVasCript:alert(1);">   //大小写混淆
<img src='javascript:alert(1);'>   //使用单引号
<img src=javascript:alert(1);>   //不使用引号
<img src="java/*javascript*/script:alert(1);">   //使用注释
//除了/**/之外,样式标签中的‘\’和结束符‘\0’也是被浏览器忽略

以上的XSS构造技巧只是冰山一角,由于Web浏览器种类、版本的不同,各自的HTML、CSS、JavaScript等引擎也存在着各种各样的差异,再加上各个站点采用了不同的XSS检测和防范策略,XSS构造技术五花八门、包罗万象。在测试XSS的过程中,需要尝试各种XSS注入语句,以绕过服务器端对跨站脚本的过滤,国外著名安全工程师Rsnake把自己对XSS的研究总结成XSS Cheat Sheet,当中罗列了各种各样的XSS代码,引用中文翻译的一片文章。
XSS Filter Evasion Cheat Sheet 中文版

四.XSS跨站脚本攻击的利用

XSS攻击属于被动式攻击,具有一定的局限性,只能在用户访问特定页面的时候才会触发漏洞,离开页面后攻击也随之失效。以下简单剖析一些常见的XSS攻击的利用:

1.Cookie窃取

窃取客户端Cookie资料是XSS攻击最常见的应用方式之一。
Cookie是用户浏览网页时网站存储在用户机器上的小文本文件,记录了与用户相关的一些状态或设置,比如用户名、ID、访问次数等,当用户再一次访问这个网站的时候,网站会先访问用户机器上对应的该网站的Cookie文件,并从中读取信息,以便快速访问。

2.会话劫持

Session会话控制:Session对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。Session和Cookie的最大区别在于:Session是保存在服务器端的内存里面,而Cookie保存于浏览器或客户端文件里面。
会话劫持指攻击者利用XSS劫持了用户的会话去执行某些恶意操作,这些操作往往能达到提升权限的目的。

3.网络钓鱼

**网络钓鱼(Phishing)**是一种利用网络进行欺诈的手段,主要通过受害者心理弱点、好奇心、信任度等心理陷阱来实现诈骗,属于社会工程学的一种。网络钓鱼利用有一定概率使人信任并相应的原则进行攻击,现今在很多客户端和大型Web网站加入了反钓鱼功能,因此成功率较低。
但人们未意识到集合XSS技术的网络钓鱼是最具威胁的一种攻击手段,传统的钓鱼攻击通过复制目标网站与用户进行交互而实现,这种钓鱼网站域名和页面一般是独立的,而结合XSS技术后,攻击者能通过JavaScript动态控制页面内容和Web客户端的逻辑,使XSS钓鱼的欺骗性和成功率大大增加。

4.XSS History Hack

运用一些JavaScript/CSS的技巧,攻击者能获取用户浏览器的某些历史记录,甚至是在搜索引擎输入的查询字符,其原理只是利用了CSS能定义和控制链接样式的特性

5.客户端信息刺探

通过JavaScript/XSS提取有用的客户端信息,如浏览器访问记录、IP地址、开发端口等,即可发动新一轮的攻击
(1)JavaScript实现端口扫描
JavaScript可对用户本地网络中的主机进行端口扫描,这可以探测其主机提供的计算机网络服务类型,这些服务与端口号相关,例如21端口对应FTP服务,3306端口对应Mysql服务等。
(2)截取剪切板内容
JavaScript有一个很强大的特性,就是可以操作客户端的剪贴板内容,在用户浏览网页时,粘贴复制的一些重要的信息,这些信息可能含有用户账号、密码等一些隐私数据。如果网站存在XSS漏洞,攻击者就可以窃取到这些重要的信息:

clearData(sDataFormat)   //删除剪贴板中指定格式的数据
getData(sDataFormat)   //从剪贴板获取指定格式的数据
setData(sDataFormat, sData)   //给剪贴板赋予制定格式的数据

(3)获取客户端IP地址
利用JavaScript脚本代码,还能够获取客户端内网IP,依托一些IP查询网站,即可获取外网IP。

6.其他恶意攻击剖析

(1)网页挂马:网页木马隐蔽性很高,看似正常的网页,在用户浏览时运行木马程序,因为在浏览器中执行下载运行,用户是无法察觉的。网页挂马技术门槛不高,但下载的病毒危害性很高。网页挂马方式很多,一般都是通过篡改网页来实现的,例如在XSS攻击中使用<iframe>标签,当挂马网页在浏览器执行后,边指引浏览器加载网页木马的链接:

<iframe  src=xxx width=0 height=0></iframe>
//由于高度宽度都设置为0,所以用户不会察觉到

(2)DOS和DDOS
DOS(Denial of Service)是拒绝服务攻击,这种攻击会利用大量数据包“淹没”目标主机,耗尽资源导致系统崩溃,使目标主机无法对用户作出相应反馈。

<script>for (;;) alert(1);</script>   //无尽弹框,但可被浏览器禁止
<meta http-equiv=“refresh” content=0>     //不断刷新页面

DDOS(Distributed Denial of Service)是指分布式拒绝服务攻击,是目前攻击者经常采用而难以防范的攻击手段。攻击者利用因特网上成千上万的Zombie(僵尸,即被利用的主机),对目标发动威力巨大的拒绝服务攻击。攻击者通过XSS注入恶意代码对一个网站持续不断地发送请求,或通过XSS劫持大量的浏览器实施此攻击


























发送请求






发送请求






发送请求






发送请求










用户









服务器









用户









用户









用户







(3)XSS Virus/Worm:类似于个人计算机平台上的病毒,有潜伏、后门的特性,可以用于盗号、窃取用户隐私信息,主要在客户端执行恶意攻击,类似蠕虫病毒具有自我复制的攻击形态,因为使用JavaScript、Vbsccript等客户端语言编写,所以在Web平台能得到很好的支持。由于JavaScript等语言控制着Web客户端的逻辑,所以破坏性很强,能执行许多恶意操作,例如非法转账、任意篡改页面信息、删除目标文章等,如果利用XSS进行大批量的挂马,将造成更加严重的后果。

五.XSS跨站脚本攻击的工具

1.Google Chrome插件
(1)EditThisCookie
(2)HTTP Headers
(3)ModHeader
2.Firefox浏览器插件
3.Fiddler
Fiddler是一款免费且功能强大的HTTP/HTTPS网络调试器,该工具能检测和记录所有客户端和服务器之间的HTTP通信,此外还提供了清除IE缓存、请求构造器、文本转换等功能。
4.Kali-BeEF
BeEFThe Browser Exploitation Framework的缩写。它是一种专注于Web浏览器的功能强大的渗透测试工具。为经验丰富的渗透测试人员提供实用的客户端攻击向量。BeEF专注于利用浏览器漏洞来评估目标的安全状况。该框架包含许多使用简单而强大的API的命令模块,也支持自定义模块的开发。
5.在线XSS平台
XSS平台

六.XSS跨站脚本攻击的发掘

七.XSS跨站脚本攻击的防御

XSS跨站脚本攻击原理与常见的脚本及《XSS跨站脚本攻击剖析与防御》摘录总结相关推荐

  1. CC攻击原理及防范方法和如何防范CC攻击

    一. CC攻击的原理: CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃.CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数 ...

  2. csrf攻击原理与解决方法_信息安全之CSRF攻击

    在之前的文章中我们介绍过XSS攻击 和 SQL 注入.没看过的小伙伴可以在专栏中以往的文章中查看.这两种攻击分别篡改了原始的 HTML 和 SQL 逻辑,从而使得黑客能够执行自定义的功能.那么除了对代 ...

  3. XSS注入的原理与实现

    一.JavaScript的常用脚本 1.window.location.href 用来跳转页面 eg:<script>window.location.href='www.jd.com'&l ...

  4. 跨站点脚本 (XSS)

    跨站点脚本 (XSS) 跨站点脚本 (XSS) 是客户端代码注入攻击.攻击者旨在通过在合法的网页或 Web 应用程序中包含恶意代码,在受害者的 Web 浏览器中执行恶意脚本.当受害者访问执行恶意代码的 ...

  5. 跨网站脚本攻击(XSS)的原理与防范对策

    摘要:随着计算机网络技术的迅速发展,网络安全问题已变得越来越受到人们的重视,网络攻击形式多种多样,很多蠕虫病毒.木马病毒等植入到某些网页中,给网络用户带来了很大的安全隐患.其中XSS跨网站脚本攻击,恶 ...

  6. XSS攻击常识及常见的XSS攻击脚本汇总

    一.什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 二.XSS分类 ...

  7. xss跨站脚本攻击原理

    xss全称跨站脚本攻击,通过字面理解就是跨过网站进行攻击.其原理是前端提交的参数被当成网站js代码来被执行了.发生的场景通常在web的前端.比如我在网站的留言板处输入一个,提交之后发现我的留言并不会显 ...

  8. 【技术干货】浏览器工作原理和常见WEB攻击 (下)

    本文作者:上海驻云开发总监 陈昂 上篇给大家带来的是关于浏览器基本工作原理的总结和介绍,这篇文章重点给大家说明有哪些常见WEB攻击. 常见WEB攻击 互联网是个面向全世界的开放平台,越是开放的东西漏洞 ...

  9. Web 安全之 XSS 攻击原理/分类/防御 详解

    什么是 XSS 攻击? 全称 Cross-Site Scripting 跨站脚本攻击,简写为了避免和 CSS 冲突而改成 XSS 原理:通过在浏览器可输入的地方(比如评论栏.搜索栏.地址栏等)注入脚本 ...

最新文章

  1. AI 技术升级,这一新方法遏制在线语言骚扰
  2. Ellipse(椭圆)
  3. Zoom Capability
  4. Java的基础数据类型
  5. windows无法启动mysql服务(位于本地计算机上)_Windows 10开始菜单无反应,怎么办,看是否启用User Manager服务...
  6. 如何安装MySQL软件
  7. python连接wws协议和http协议时ssl验证失败
  8. 手机都能拍月亮了,为何我们还在怀念诺基亚?
  9. 一步一步学习Servlet之ServletContext对象
  10. python 对 list[list] 矩阵进行逆时针旋转90度 matrix = list(map(list, zip(*matrix)))[::-1]
  11. 在linux缓存里写数据,缓存策略
  12. 内固定取出术后护理_骨折术后康复治疗全知道!
  13. Safari浏览器显示网页不全问题解决方法
  14. maya中英文对比_maya菜单中英文对照表
  15. Python学习笔记(基础知识第三篇:列表、元组、字典、集合)
  16. 诱人福利:猎豹移动雇游轮带全员一块儿航海
  17. 最新版!国内IT软件外包公司汇总~
  18. math sub Java_java初学减法运算
  19. 云闪付和微信支付达成“条码支付互通”,二者支付功能有何不同?
  20. 信息重要性凸显,SSL证书为数据安全筑起高墙

热门文章

  1. App自动化测试(五)之swipe滑动操作
  2. java中文变成问号怎么解码_alpine 镜像 java 日志中文问号乱码
  3. 问题解答1:ERROR 1682 (HY000): Native table 'performance_schema'.'session_variables' has the wrong struct
  4. 在线怎么将pdf文件转换成word文档转换器
  5. 关于Eclipse中出现reaching for main types问题的解决
  6. Java开发谈:java热血征途触屏版
  7. 关于轮播图的简单介绍
  8. 考研高等数学上下册归纳总结思维脑图(超详细)
  9. 电脑大文件夹怎么加密?大文件夹方法介绍
  10. 久坐的程序员们到底该怎么高效锻炼?