渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法 ...

打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

目录
原理
XML语言解释
什么是xml语言:
以PHP举例xml外部实体注入
XML语言结构
口试题目
如何探求xxe漏洞
XEE漏洞修复域防御
提高版本
代码修复
php
java
python
手动黑名单过滤(不推荐)


一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区
原理



  • XXE:XML External Entity 即外部实体 简称XXE漏洞

    • 从安全角度理解成XML External Entity attack 外部实体注入攻击。
    • 由于步伐在剖析输入的XML数据时,剖析了攻击者伪造的外部实体而产生的。


XML语言解释

什么是xml语言:



  • XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、界说数据范例,是一种允许用户对本身的标记语言举行界说的源语言。
  • XML文档结构包罗
   

  • XML声明
  • DTD文档范例界说(可选)
  • 文档元素
  

  • 实在XML是一门语言,类似于html,但是厥后主要用xml的文档格式来传输数据,但是现在比较新的系统,各人之前传输数据用的是json了。
  • 现在很多语言里面对应的剖析xml的函数默认是

    • 克制剖析外部实体内容的,从而也就直接制止了这个漏洞。

以PHP举例xml外部实体注入



  • 以PHP为例,在PHP里面剖析xml用的是libxml,其在≥2.9.0的版本中

    • 默认是克制剖析xml外部实体内容的
    • 如果你测试用的php中剖析xml用的libxml的版本大于了2.9.1
    • 为了模仿漏洞,那么可以通过手动指定LIBXML_NOENT选项开启xml外部实体剖析功能。

  • 修改 libxml 版本 PHP版本


XML语言结构

文档结构包罗以下三个部分:
   
  

  • Json xml 数据 xml攻击数据格式
  • 外部实体注入攻击
  • Xml外部实体攻击
  1. 内部声明DTD
  2. <!DOCTYPE 根元素 [元素声明]>
  3. 引用外部DTD文档
  4. <!DOCTYPE 根元素 SYSTEM "文件名">
  5. <!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">
  6. 内部声明实体
  7. <!ENTITY 实体名称 "实体的值">
  8. 引用外部实体
  9. <!ENTITY 实体名称 SYSTEM "URI">
  10. <!ENTITY 实体名称 PUBLIC "public_ID" "URI">
  11. 调用方式:&实体名称;
复制代码

DTD 也就是攻击代码
我们在做渗透测试 做一个读取文件 证明存在这个漏洞就行了




  • payload如下:

    • 而且你需要掌握的代码就这几行,各人最好能够背下来
        --------------------------------------------------------------------------------------------
       

    • 声明部分
      DTD攻击载荷部分
      xml部分
       
    1. <?xml version = "1.0"?>
    2. <!DOCTYPE note [
    3.     <!ENTITY hacker "lady_killer9">
    4. ]>
    5. <name>&hacker;</name>
    复制代码

如何探求xxe漏洞

   

  • 抓包查看accept的头是否接收xml
  • 抓包修改数据范例把json改成xml来传输数据
  






XEE漏洞修复域防御



  • 提高版本
  • 代码修复
php

  1. libxml_disable_entity_loader(true);
复制代码
java

  1. DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
  2. dbf.setExpandEntityReferences(false);
  3. setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
  4. setFeature("http://xml.org/sax/features/external-general-entities",false)
  5. setFeature("http://xml.org/sax/features/external-parameter-entities",false);
复制代码
python

  1. from lxml import etree
  2. xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
复制代码


  • 手动黑名单过滤(不推荐)
  1. 过滤关键词: <!DOCTYPE 、 <!ENTITY SYSTEM 、 PUBLIC
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表