xxe


什么是xml

xml是一种具有结构性的标记语言,用来标记数据,定义数据类型,允许用户自己定义的源语言。在解析外部实体的过程中,XML解析器可以根据URL中指定的方案(协议)来查询各种网络协议和服务(DNS,FTP,HTTP,SMB等)。 外部实体对于在文档中创建动态引用非常有用,这样对引用资源所做的任何更改都会在文档中自动更新。 但是,在处理外部实体时,可以针对应用程序启动许多攻击。 这些攻击包括泄露本地系统文件,这些文件可能包含密码和私人用户数据等敏感数据,或利用各种方案的网络访问功能来操纵内部应用程序。 通过将这些攻击与其他实现缺陷相结合,这些攻击的范围可以扩展到客户端内存损坏,任意代码执行,甚至服务中断,具体取决于这些攻击的上下文

什么是DTD

一种文档类型定义 xml中标签本身是可以随便定义的二,DTD相当于给xml标签做个了类型限制约束

    例如:

    xxe.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    
    >
    <班级>
        <学生>
           <名字>xss
           <年龄>2
           <介绍>1    
        
    


     xxe.dtd文件

    
    
    
    
    

参考大佬博客(https://www.cnblogs.com/zhaijiahui/p/9147595.html#autoid-2-4-0)

xxe漏洞

又称为xml外部实体注入漏洞,发生在应用程序解析xml输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取,命令执行,内网端口扫描,攻击内网网站,dos攻击等

例如:

有了xml实体,ststem会令xml解析器从url中读取内容,并允许它在xml文档中被替换。因此攻击者可以通过实体将他定义的值发送给应用程序然后实现。

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

        &passwd;


xml外部实体passwd被赋值成了file:///etc/passwd  因此运行解析时passwd就变成了file:///ect/passwd的内容

按输出信息不同可以分成

  1. 正常回显xxe
  • 直接利用服务器回显信息进行xxe攻击
  1. 报错xxe
  • 正常回显时会报错,通过报错信息判断是否注入成功
  1. 盲注xxe(blind)最常见
  • 可以用file协议http协议ftp协议等伪协议配合使用

payload

基本的xml注入

<?xml version = "1.0"?>



]>

&hack;

实体实例

<?xml version="1.0"  encoding="UTF-8"?>
        //foo是接受任何参数的
]>    //定义了一个实体 xxe 

    &xxe;    //&xxe进行引用 本地引用
    pass

外部实例

  1. 在本地创建shell.php文件
    <?php
    $body = file_get_contents("php://input");   //php://input是伪协议类型的一种
    $xml = simplexml_load_string($body);
    print_r($xml);//有回显,无回显
    ?>
    

  1. 创建一个test.dtd文件
    

  1. 定义一个test.xml文件
    <?xml version="1.0"  encoding="UTF-8"?>
    
    %test;
    ]>
    
    	&xxe;
    	mypass
    

数据访问过程:
先访问test.dtd里面的内容,把里面声明的xxe实体拿出来,在页面上调用

shell.php模拟一个存在xxe的页面环境 test.dtd作用是调用时页面的回显 test.xml的内容就是payload

文件泄露


 ]>

 John
 &ent;

拒绝服务











&lol9;

本地文件包含

<?xml version="1.0"?>

]>
&xxe;

本地文件包含blind

<?xml version="1.0"?>


]>
&blind;

ssrf

<?xml version="1.0"?>

]>&xxe;

任意文件读取

<?xml version="1.0"?>
    
]>

&f;

执行系统命令

<?xml version="1.0"?>
    
]>

&f;

内网探测端口

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

]>

&Quan;Any bugs?
XXE