浅谈XXE攻击

二.XML基础

xml是一种用于标记电子文件使其具有结构性的标记语言,用于标记数据,和定义数据类型,可以为两种不同系统进行信息交换,
XML文档结构包括xml声明,DTD文档类型定义(可选),文档元素
在这里插入图片描述

二.DTD文档定义,可以内部声明,也可以外部引用

    <!DOCTYPE address [<!ELEMENT address (#PCDATA)>
                                            <!ENTITY name "Tanmay patil">
                                            <!ENTITY company "TutorialsPoint">
                                             <!ENTITY phone_no "(011) 123-4567">
                                              ]>
  1.       <!DOCTYPE 根元素 SYSTEM "DTD文件的URL">
                <!DOCTYPE address SYSTEM "address.dtd">
             <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">
    

3.实体声明,相等于定义了一个变量

<!ELEMENT>这块略过,对xxe影响不大,自行去菜鸟教程了解 <!ENTITY>(重点):

直接声明

<!ENTITY 实体名称 实体的值 引用外部 <!ENTITY 实体名称 SYSTEM "URI">

或者

<!ENTITY 实体名称 PUBLIC "public_ID" "URI">

三,如何判断xxe漏洞
这里用一题南邮的web1题来作为案例

在这里插入图片描述
bp抓包看下,

在这里插入图片描述
发现Content-type:application/xml,或者直接从请求报文就能看出是xml了,说明可以去利用xml解析器来帮我们做一些事
而且从题目提示中,得知flag就在/flag这个文件中。只要能弄到源码,就美滋滋了,所以想到xxe,那么直接看下我是怎么写的
在这里插入图片描述
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/flag>这句的意思就是SYSTEM这个系统命名将这个url的文件内容读进了xxe这个实体。
所以答案就出来了。
在这里插入图片描述
解码下就ok了。以下,是发现几篇好文,可以更深入的了解。
知乎某老哥的资料分享
添加链接描述
添加链接描述

原文地址:https://www.cnblogs.com/YenKoc/p/12779993.html