信息安全学习2 XSS

        XSS即跨站脚本攻击,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。 在XSS攻击中,一般有三个角色参与:攻击者、目标服务器、受害者的浏览器。 

        由于有的服务器并没有对用户的输入进行安全方面的验证,攻击者就可以很容易地通过正常的输入手段,夹带进一些恶意的HTML脚本代码。当受害者的浏览器访问目标服务器上被注入恶意脚本的页面后,由于它对目标服务器的信任,这段恶意脚本的执行不会受到什么阻碍。而此时,攻击者的目的就已经达到了。

      HTML编码,解码

        浏览器接收到服务器传送过来的数据后,进行HTML解码,解码后,在呈现HTML页面是,针对某些特殊字符如<,>直接使用,浏览器会误以为它们是标签的开始或结束,若想正确的在HTML页面呈现特殊字符就需要使用特殊字符的对应ascll码。

        在PHP中,防护XSS经常使用的函数:htmlspecialchars()把预定义的字符转换为ascll码。

        哪些情况会进行html解码

  •  数据状态中的ASCLL码使用
  • 属性值状态下的ASCLL码使用
  • RCDDATA状态中的ASCLL码使用:RCDATA元素有<textarea><title>

         URL编码

        URL编码(也称为百分比编码)是一种用于在URL中编码特殊字符的方法,以确保URL在传输过程中不被误解或破坏。以下是需要使用URL编码的具体情况和原因:

        1. 特殊字符

        某些字符在URL中有特殊含义,如 ?, &, #, /, :, 等。如果这些字符出现在URL参数值中,需要进行编码以避免歧义

        2. 保留字符

        保留字符是具有特殊含义的字符,如 :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =。在参数值或路径部分中使用这些字符时,需要进行编码。

        3. 非ASCII字符

        URL必须使用ASCII字符集。任何非ASCII字符需要进行编码。比如中文

        JavaScript编码

        会触发javascript编码的情况:

  • 直接嵌入<script>代码块中
  • 通过<script src=。。。>加载的外部文件中
  • 各种HTML CSS参数支持JavaScript:URL触发调用
  • CSS expression()和某些浏览器的XBL绑定
  • 事件处理器,比如onload,onerror,onclick
  • 定时器,Timer
  • ecal()调用

        <script>标签包裹的ASCLL编码不会被解析 

  

        反射性xss

        特点:仅执行一次,非持久型:参数型跨站脚本。主要存在于攻击者将恶意脚本附加到url的参数中,发送给受害者,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

        检测漏洞:见框就插,改url参数       

        常用代码:经典测试:<script>alert (1)</script>

                          大写绕过:<SCRIPT>alert (1)</SCIRPT>   

                          双写绕过:<scr<script>ipt>alert(1) </script>

                          其它标签:<img src =1 οnerrοr=alert(1) />

使用场景于DVWA靶机中:

        首先使用经典测试测出弹窗,接着输入下面内容,让弹窗显示cookie,实际攻击中会把cookie收集起来。

<script>alert(encodeURI(document.cookie))</script>

       发现链接中有一个name=。。。。。的内容,实际上这就是我们提交的代码转换为url编码的内容,也就是说讲修改参数后的内容发送给被攻击方诱导点击,就能获取被攻击方的cookie

     存储型XSS

        特点:持久型 主要存在于攻击者将恶意脚本存储到服务器数据库中,当用户访问包含恶意相关数据的页面时,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

        通常位于需要使用数据库的表单,如评论等。

        检测漏洞的方法如上;

        在DWVA中:

        首先检查页面查看name框和message框长度分别为10和50,而上面的实验中使用的弹窗弹出cookie长度刚好为51个字符,这时候修改本地页面允许上传字符为51.

尝试弹出cookie,无响应,尝试使用其它标签,尝试使用img弹出cookie

成功显示

DOM型XSS

        DOM-based XSS (DOM XSS) 是一种跨站脚本攻击,其中恶意脚本通过直接操纵客户端的文档对象模型(DOM)而不是通过服务器响应插入到网页中。这种类型的攻击利用了客户端脚本(通常是JavaScript)在处理用户输入时的漏洞。

        DOMXSS攻击构建和XSS类似的URL进行攻击,区别在于DOM是完全发生在客户端的攻击。

在DVWA中:

小结

        三种XSS攻击都是基于处理用户输入漏洞所导致的,严格对每一处用户可能的输入输出进行筛选即可避免XSS攻击。

        绕过

        1.如果前后的<script>标签被过滤,假如在特殊标签内,可以构建一些特殊事件来触发。例:

" autofocus onfocus = alert(1) 

        省略号闭合前面的内容(如果有的话,具体看页面源代码),

        2.如果中间的内容被过滤,可以善用base64编码(火狐可用),ascll编码等,例:

al&#101;&#114;&#116;&#40;&#101;&#110;&#99;&#111;&#100;URI(document.cookie))

         

        4.其他 标签和属性之间并不是只能出现空格,例:

<img/src=x οnerrοr=alert(1)>

        有时候并不需要一个合法的标签 

<M/οnclick="alert(1)">M

         防御

         1.阻止恶意代码注入

        2.阻止恶意代码执行

        不管是反射型XSS还是存储型XSS,都能通过服务端进行过滤来防御

  • 黑名单:过滤特殊符号及字符
  • 白名单:仅允许特定类型或符号
  • 编码和转移:输出在标签或属性中进行HTML编码,输出在script标签或事件中进行JavaScript编码,输出在url中进行url编码
  • cookie中设置httponly,setcookie将httponly选项设置为true,防范cookie劫持
  • 确保执行脚本来源可靠:开发者明确告诉客户端,哪些外部资源是可加载和执行的(CSP策略)
  • 不使用有缺陷的第三方库

一些语言防范XSS攻击的代码

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值