跨站脚本漏洞(XSS)文字部分

跨站脚本漏洞(XSS)——目录

         ·跨站脚本漏洞概述

         ·跨站脚本漏洞类型及测试流程

         ·反射型XSS(get&post)演示和原理分析

·存储型XSS演示和与原理分析

·Dom型XSS演示和原理分析

   ·XSS的危害-获取cookie的原理和实验演示

   ·XSS危害-XSS进行钓鱼的原理和实验演示

   ·XSS危害-XSS获取键盘记录原理和实验演示

               ·XSS盲打演示和原理分析

                                ·XSS的过滤和绕过(filter&htmlspecialchars)

                                ·XSS输出在href和js中的案例分析

                                ·XSS常见防范措施

跨站脚本漏洞概述

·XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。

·XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户

·XSS漏洞可以用来进行钓鱼攻击、钓鱼攻击、前端js挖矿、用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等

跨站脚本漏洞概述-XSS(窃取cookie)攻击流程

跨站脚本漏洞(XSS)文字部分

跨站脚本漏洞的常见类型

危害:存储型>反射型>DOM型

·反射型

交互的数据一般不会存在数据库里面,一次性,所见即所得,一般出现在查询类页面等。

·存储型

交互的数据会被存在数据库里面,永久性存储,一般出现在留言板,注册等页面。

·DOM

不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出时候产生的问题,一次性也属于反射型。

XSS漏洞形成的原因

形成XSS漏洞的主要原因是对程序对输入和输出的控制不够严格,导致“静心构造”的脚本输入后,在疏导前端时被浏览器当做有效代码解析执行从而产生危害。

跨站脚本漏洞测试流程

①在目标站点上找到输入点,比如查询接口,留言板等;

②输入一组"特殊字符+唯一 识别字符”,点击提交后,查看返回的源码,是否有做对应的处理;

③通过搜索定位到唯一 字符,结合唯一 字符前后语法确认是否可以构造执行js的条件(构造闭合) ;

④提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

 TIPS :

1.-般查询接容易出现反射型XSS ,留言板容易出现存储型XS ;

2.由于后台可能存在过滤措施构造的script可能会 被过滤掉,而无法生效,或者环境限制了执行 (浏览器 ) ;

3.通过变化不同的script,尝试绕过吧后台过滤机制;

从一个反射型的XSS(get)弹窗开始认识XSS漏洞

GET方式的XSS漏洞更加容易被利用,一般利用方式是将带有跨脚本的URL伪装后发送给目标而POST方式由于是以表单方式提交,无法直接使用URL方式进行攻击,如何利用?

GET和POST典型区别:

GET是以url方式提交数据;

POST是以表单方式在请求体里面提交;反射的 XSS 攻击比存储的XSS 攻击危险性要小,当用户访问特定页面时,这会引起持续的问题,但更为常见。任何从 GET 或 POST 请求获取参数并以某种方式向用户显示该参数的页面都可能面临风险。未能将查询字符串参数视为不受信任的内容的页面可以允许构造恶意 URL。攻击者将在电子邮件、评论部分或论坛中传播这些恶意 URL。由于链接指向用户信任的站点,因此他们更有可能单击它,不知道它会造成什么危害。

在代码评审中,反射的 XSS 漏洞很容易被忽略,因为诱惑是只检查与数据存储交互的代码。检查以下类型的页面时要特别小心:

  1. 搜索结果- 搜索条件是否显示回用户?是写在页名里吗?你确定被正确逃脱吗?
  2. 错误页- 如果您有抱怨输入无效的错误消息,当输入显示回用户时是否正确转义?您的 404 页是否提到要搜索的路径?
  3. 表单提交- 如果页面 POST 数据,表单提交的任何部分数据是否显示回用户?如果表单提交被拒绝 – 错误页面是否允许注入恶意代码?错误提交的表单是否预先填充了以前提交的值?

我们的示例黑客演示了恶意制作的 GET 请求。但是,应谨慎对待 POST 请求。如果不防止跨站点请求伪造,攻击者可以很容易地构造恶意 POST 请求。即使您确实可以抵御CSRF,攻击者也会经常使用漏洞组合来构建有毒的 POST 请求。

储存型XSS和DOM型XSS的解析

·存储型XSS演示和原理分析

·Dom型XSS演示和原理分析

存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入后台存储起来,构成更加持久的危害,因此存储型XSS也称“永久型”XSS。 漏洞百科

发生在目标网站中目标用户额浏览器层面上,当用户浏览器渲染HTML文档的过程中出现了不被预期的脚本指令执行,XSS就会发生,为不喝层叠样式表的绰号混淆,故将跨站脚本攻击缩写为XSS。一般分为反射型、存储型、DOM型、

DOM型XSS

学习DOM型XSS前,先搞清楚什么是DOM。

通过JavaScript,可以重构整个HTML文档。您可以添加、移除,改变或重排页面上的项目。

要改变页面上的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,炼铜对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。

所以,你可以吧DOM理解为一个一个访问HTML的标准编程接口。

跨站脚本漏洞(XSS)文字部分

举个例子来理解DOM

<html><head>

 

<script type= "text/javascript">

function getValue(){var

x=document.getElementById("myHeader")alert(x.innerHTML)}</script>

</head><body>

<h1 id="myHeader" οnclick="getValue()">这是标题<</h1>

<p>点击标题,会提示出它的值。</p>

</body></html>

XSS的绕过

XSS绕过-过滤-转换

0、前端限制绕过,直接抓包重放,或者修改html前端代码

1、大小写,比如:<SCRIPT>aLeRT(111)</sCRIpt>

2、拼凑:<scri<script>pt>alert(111)</scri<script>pt>

3、使用注释进行干扰:<scrip<!--test-->pt>alert(111)</sc<!--test-->ript>

编码的核心思路:

后台过滤了特殊字符,比如<script>标签,但该标签可以被各种编码,后台不一定会过滤,当浏览器对该编码进行识别时,会翻译成正常的标签,从而执行。

在使用编码时需要注意编码在输出点是否会被正常识别和翻译!

例子1:

<img src=x οnerrοr="alert('xss')"将alert('xss')进行URL编码,可以执行吗

<img src=x οnerrοr="alert%28%27xss%27%29"/>

并不会执行,why?因为这些属性标签并不会正常的解析这些编码

例子2:使用事件属性onxxx();

< img src=x οnerrοr= "alert("xss')" />可以把alert( xSS )进行htm|编码

<imgsrc=xοnerrοr="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;"/>

<img src=x

οnmοuseοver= "&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;" />

可以执行

注意,将事件标签里面并不会执行<script></script>标签里面的代码

XSS绕过的姿势有很多,取决于你的思路和对前端技术的掌握程度

XSS绕过-关于htmlspecialchars()函数

htmlspecialchars()函数吧预定义的字符转化为HTML实体。

预定义的字符是:

&(和号)称为&amp

“(双引号)成为&quot

‘(单引号)成为&#039

<(小于)成为&lt

>(大于)成为&gt

可用的引用的类型:

ENT_COMPAT -默认。仅编码双引号。

ENT_QUOTES -编码双引号和单引号。

ENT_NOQUOTES -不编码任何引号。

我们可以输入&“’<>来测试一下他是使用了什么编码

在测试中我们可以看见

跨站脚本漏洞(XSS)文字部分

单引号未被编码,我们就可以构造一个palyload

跨站脚本漏洞(XSS)文字部分

这样就会弹出1111

保护

要防止反射的 XSS 攻击,请确保来自 HTTP 请求的任何动态内容不能用于在页面上注入 JavaScript。

请务必检查您网站上的所有页面,无论它们是否写入数据存储!

转义动态内容

网页由 HTML(通常在模板文件中描述)为设计,在呈现页面时将动态内容编织在一起。已存储XSS 攻击利用来自后端数据存储的动态内容的不当处理。攻击者使用可编辑字段插入一些 JavaScript 代码,并在页面加载时对其进行评估。除非您的网站是内容管理系统,否则很少希望用户创作原始 HTML。相反,您应该义来自数据存储的所有动态内容,以便浏览器知道它应被视为 HTML 标记的内容,而不是原始 HTML。

转义动态内容通常包括用 HTML 实体编码替换重要字符:

"

&#34

#

&#35

&

&#38

'

&#39

(

&#40

)

&#41

/

&#47

;

&#59

<

&#60

>

&#62

XSS常见防范措施

总的原则:输入做过滤,输出做转义

·过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许驶入手机号格式的数字。

·转义:所有输出到前端的数据都根据输出点进行转义,比如输出去到html中进行html实体转义,输入到JS里面进行js转义。