(由于要找工作了,所以决定整理一下常见漏洞的知识,以下通过借鉴一些大佬的文档或者博客从而整合,当然也包括一些以往自己的经验。菜鸟一个,请各位大哥指点。)
xml指的是可扩展标记语言。
DTD(文档类型定义)的作用是定义xml文档的合法构建模块。
DTD一般认为有两种引用或声明方式:
1.内部DTD:即对xml文档中的元素、属性和实体的DTD的声明都在XML文档中。
2.外部DTD:即对XML文档中的元素、属性和实体的DTD的声明都在一个独立的DTD文件中。
XXE的利用:
任意文件读取、SSRF、DOS攻击(如果XML解析器尝试使用/dev/random文件的内容来替代实体,则会使得服务器unix系统崩溃)、远程命令执行
修复建议:
为了避免XXE ,应为XML代理、解析器或读取器设置下面的属性:
factory.setFeature(“http://xml.org/sax/features/external-general-entities”,false);
factory.setFeature(“http://xml.org/sax/features/external-parameter-entities”,false);
如果不需要inline doctype声明,可以用以下的属性将其完全禁用。
factory.setFeature(“http://apache.org/xml/features/disallow-doctype-decl”,true);
如何XXE?
基本需要两个条件:1.支持DTD 2.数据可操控
摒弃需要数据有回显,我们才能看到。对于没有回显的情况,我们引入OOB(out of band)数据外带。
就是通过自己写一个页面用来接受目标服务器传回的内容,可以直接使用一个开源工具xxeserver。