url存在宽字节跨站漏洞_漏洞那些事er 反射型跨站脚本攻击

d6d6d59666ada843cff9ea98f59e54b1.png

        跨站脚本攻击(Cross Site Scripting,缩写为XSS)本质上仍是注入攻击的一种。当实施此类攻击时,攻击者通过直接或间接的方式,向WEB应用提交包含恶意代码数据,而WEB应用未对提交数据进行合法性验证或转义处理,最终致使恶意代码在被攻击者的浏览器中执行。

       跨站脚本是所有WEB应用安全漏洞中最常见的一种,一些安全公司的统计数据显示,其数量占据了WEB应用安全漏洞总数的一半以上。跨站脚本漏洞可能引发的多种安全威胁,包括篡改页面显示内容、实施钓鱼攻击、会话劫持等。最终可能造成的危害程度与WEB应用的用途、所涉及数据的敏感度、WEB应用所采取的安全控制措施有关,可能是较低危害,也可能造成严重危害。

       已知的跨站脚本攻击漏洞有三种:1)存储式;2)反射式;3)基于DOM。        本篇文章首先介绍反射式跨站脚本攻击。        反射式跨站脚本攻击又名非持久型跨站脚本攻击。此类攻击发生时,包含恶意代码的请求由被攻击者浏览器发往WEB应用服务器,恶意代码经过WEB应用服务器“反射”回被攻击者的浏览器,并得以执行。
6c141aac4fbfa530134cdaa7ad43adc8.png        跨站脚本漏洞的产生原因是WEB应用没有对输入内容进行有效的验证或转义处理,导致输入内容中的恶意代码在受害人浏览器中执行。 通常跨站脚本漏洞在满足以下两条件时出现:
  1. 数据由不可靠来源输入到WEB应用;
  2. 输入数据未作充分的合法性验证或转义处理,且被用于动态构建供用户访问的内容。

       利用跨站脚本漏洞可能实施的攻击有很多种,难以一一列举。最常见的攻击包括窃取隐私信息、劫持会话、将被攻击者重定向至恶意页面、诱使被攻击者浏览器执行恶意操作等。 a30da286e68fb4807f58bab78476540b.png

7825a49e88471a9caf5dac785d538971.png

      反射型跨站脚本攻击涉及的功能点:URL参数需要在页面显示的功能点都可能存在反射型跨站脚本攻击,例如站内搜索、查询功能点。 以下是一个典型的反射式跨站脚本攻击流程:
  1. 攻击者发现WEB应用存在反射式跨站脚本漏洞,并根据此漏洞构造包含恶意代码的链接;
  2. 攻击者发送向被攻击者发送电子邮件,邮件中包含有事先构造的恶意链接;
  3. 被攻击者收到电子邮件后,点击恶意链接,将包含恶意代码的请求发往WEB应用;
  4. WEB应用收到请求后,由于未能对内容作充分的合法性验证和转义处理,致使其中包含的恶意代码作为执行脚本返还至被攻击者的浏览器;
  5. 恶意代码在被攻击者的浏览器中执行,执行攻击者预设的攻击动作,例如弹出虚假信息、将被攻击者引诱至恶意站点、劫持当前会话等等。
测试方法 50c4f3fef6278e696f3d7d55e029e746.png 无论是是get方式还是post 方式,在参数的后边添加 50c4f3fef6278e696f3d7d55e029e746.png 由于html文本输出的多样性 ,可能导致脚本并不能直接成功执行,需要闭合一些元素,所以需要根据源代码中的具体情况,构造对应的语句。如下常见构造语句。 多行文本输入框

文本输入框

'>

">

-->

[img]javascript:alert(123456)[/img]

t>alert(123456)t>


13456e7b0e124e23ee18b39dcec360da.png

        整体的防范措施是验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。具体如下。 50c4f3fef6278e696f3d7d55e029e746.png输入验证      某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。 50c4f3fef6278e696f3d7d55e029e746.png输出编码 跨站产生的原因在于在对用户输入的内容进行显示时,未对html标签以及js内容进行正确的处理,导致数据作为脚本在浏览器中执行了,因此对跨站漏洞的修复要针对变量输出的位置进行不同的处理,具体方案如下: (1)当变量输出位置为HTML标签和属性中时,如
$var2
,要对其进行html escape转义,函数需要转移的字符如下:
需要转移的字符转义结果
<小于号><
>大于号<>
&和号&&
"引号""
'撇号''

参考代码:

function html_encode(str){    if(str.length ==0)return"";    str = str.replace(/&/g,"&");   //转义&    str = str.replace(/");    //转义<    str = str.replace(/>/g,"    str = str.replace(/\"/g,""");//转义"    str = str.replace(/\'/g,"'");  //转义'    str = str.replace(/
/g,"\n");//转义换行符 str = str.replace(/ /g," "); //转义空格}

(2)当变量的输出位置在js代码中时,如

需要转移的字符转义结果
\\\
/\/
"\"
'\'

(3)当变量输出在标签的事件中时,如

(4)针对DOM类型的输出,即在js脚本中通过html()等函数将变量输出在html中时,需要对变量先进行htmlescape,然后进行javascriptescape,即javascriptescape(htmlescape($var));

(5)当变量在url中输出时:首先保证完整的url是以“http://”开头,其次对内容进行urlescape,需要转移的字符如下:

需要转移的字符转义结果
<%3C
>%3E
"%22
'%27

094a53999d8c539ce0874d77c47fc914.png

本文章仅用来为大家提供已存在且公开安全问题的相关知识。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号不为此承担任何责任。 本公众号拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括声明等全部内容。未经本公众号允许,不得随意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值