xml发生错误_XML外部实体注入详解|OWASP Top 10安全风险实践(四)

本文为一些列连载文章之一,不定期更新,计划目录如下:

OWASP介绍

SQL注入

命令注入

XML外部实体注入

XPATH注入

反射式、DOM及存储XSS

失效的身份认证和会话管理

不安全的直接对象引用

安全配置错误

敏感信息泄露

功能级访问控制缺失

跨站请求伪造

服务端请求伪造

文件上传漏洞

未验证的重定向和转发

不安全的反序列化

使用含有已知漏洞的组件

一、     注入

注入攻击漏洞,例如SQL,OS 以及 LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。

  1.   XML外部实体注入

  • 漏洞利用演示

页面功能:选择并查看xml文件内容。假设选择的evil.xml文件内容为:

877a54b6d46782d8e3b410c667841fa6.png

则结果显示了对应的文件内容和目录内容:

cfbaefc0345d113d03e8e70dd1158f89.png

  • 漏洞危害说明

    XXE攻击可以执行服务端任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

  • 漏洞代码分析

        Stringxmlfile=request.getParameter("fileselect");        if(xmlfile ==null){            xmlfile="wah.xml";        }        File f = newFile(application.getRealPath("/") + "/xml/"+xmlfile);        SAXReader reader = newSAXReader();        try {            Document document = reader.read(f);            Element element = document.getRootElement();            Iterator it = element.elementIterator();                                    while(it.hasNext()) {        Object object = (Object) it.next();        out.println("=====开始遍历=====
"); Element ele = (Element) object; List eleAttrs =ele.attributes(); for (Attributeattr : eleAttrs) { out.println("属性名:" +attr.getName() + "--属性值:" +attr.getValue()+"
"); } Iterator itt = ele.elementIterator(); while(itt.hasNext()) { Element eleChild = (Element)itt.next(); out.println("节点名:" +eleChild.getName() + "--节点值:" +eleChild.getStringValue().replaceAll("\r\n", "br/>")+"
"); } out.println("=====结束遍历=====
"); } } catch(DocumentException e) { e.printStackTrace(); } %>

后端处理代码中没有禁用DTD或没有对XML文件中可能引用外部实体的关键字进行判断,如果xml文件中,通过定义外部引用变量,指向系统敏感文件或其它地址,则可导致上述漏洞问题发生。

 注:代码中未对xmlfile进行验证,存在路径遍历问题。

  • 漏洞代码修复

    防止XXE注入可使用:

a.禁用文档类型定义DTD

    String xmlfile=request.getParameter("fileselect");    if(xmlfile ==null){        xmlfile="wah.xml";    }    File f = newFile(application.getRealPath("/") + "/xml/"+xmlfile);    SAXReader reader = newSAXReader();    // 禁止DTD                    reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);     reader.setFeature("http://xml.org/sax/features/external-general-entities",false);  reader.setFeature("http://xml.org/sax/features/external-parameter-entities",false);    try {        Document document = reader.read(f);        Element element =document.getRootElement();        Iterator it = element.elementIterator();        …….%>

b.过滤用户提交的XML数据关键词:!ENTITY,或者,SYSTEM和PUBLIC。

 290b26abfbbdb4611d60548d2b0496a2.gif

d4a239f03153ac72f94ca6cbb3756ea5.png

了解新钛云服

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

原电讯盈科中国区副总裁加入新钛云服「附专访」

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值