• 渗透测试-xml注入以及xxe漏洞


    xml注入以及xxe漏洞

    前言

    上一期给大家介绍了命令执行注入,还剩下一个xml注入没有跟大家讲,由于没有相关的漏洞平台可以演示,这里的话大多是用图来做演示,内容比较少,大家可以好好掌握一下

    一、什么是xml

    XML是eXtensible Markup Language的缩写。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

    XML和html相对,xml专注于数据格式的传输,而html专注于数据的展示。

    说白了,就是一种超文本标记语言,与HTML相似,注入的方式也很简单,但我们遇到这种语言的时候,只要创建一个新的账号和密码,在闭合前面的标签,就可以实现注入了。

    二、xml注入以及xxe漏洞

    1. xml注入

    基本格式

    在这里插入图片描述
    这份xml文件用于记录的元素为bookstore,这个元素有一个子元素,为book,book有几个属性。
    xml作为一种标记语言,需要注意的是闭合框。这些框说明了各个元素的逻辑关系。

    DTD

    文件的规范,约束文件的内容。
    在这里插入图片描述
    有点像提前交代了一些信息,同时对文件内容做补充。

    DTD可以从外部引用
    本地
    在这里插入图片描述
    网络
    在这里插入图片描述

    注入

    插入用户
    在这里插入图片描述
    在这个地方,如果username或password字段是可控的,就可以通过闭合尖括号来直接插入用户
    假如password字段可控:
    在这里插入图片描述
    这里方括号内的是我们注入的部分,可以看到我们直接硬填了一个用户进入数据库。

    这里举个简单的例子
    在这里插入图片描述
    在123处替换为下面这些文字
    在这里插入图片描述
    注入之后,就成为了下面这个样子,
    在这里插入图片描述
    就添加了管理源账号和密码了

    防御xml注入的方法:

    (1)对用户输入进行检查
    (2)对特殊字符进行转码
    在这里插入图片描述

    2.XML外部实体注入(XXE)

    任意文件读取

    这里需要用到刚刚所说的外部引用DTD。我们将想要读的文件作为外部DTD读入,然后在回显部位选择DTD元素的地址,即可拿到想要的文件内容。

    3.读入数据

    在这里插入图片描述
    我们声明了一个实体,名字叫做haha,然后这个实体的内容在这个/etc/passwd
    然后这个例子中,如果你登陆失败,他是会回显,【username】登陆失败。所以我们在这个username字段选择这个haha实体的位置,然后就会回显出我们要的内容了。

    命令执行

    在这里插入图片描述
    使用了expect伪协议,需要php带有相关扩展。

    内网攻击

    在这里插入图片描述
    可以从解析xml的主机中转,向内网的机器发请求。
    这里可以从主机的这两个文件探测内网信息

    /etc/hosts 静态映射
    /proc/net/arp arp表

    防御措施

    这里也搬一下大哥的,感觉简单实用

    1. 通过开发语言的方法,禁止使用外部实体
      php:

    libxml_disable_entity_loader(true);

    java:

    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
    dbf.setExpandEntityReferences(false);

    python:

    from lxml import etree
    xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

    1. 过滤用户提交数据
      关键字,如
    2. 不允许XML文件含有自行定义的DTD
      即不准中间定义,感觉这个方法是最好的,只允许从特定的文件读取DTD,不允许中间插入定义,一了百了。

    xxe漏洞案例

    在这里插入图片描述
    在这里插入图片描述

    总结

    本篇文章内容较少,也比较简单,就是新增加了一个新的文本语言,只需要了解他的大概形势就好了,不需要说一定要了解的很精通,我们也没有那么多精力,够我们平时能用到的就好了,只要掌握好注入点,了解外部实体的引入和读取外部信息,就可以了。

  • 相关阅读:
    pytest自动化测试数据驱动yaml/excel/csv/json
    如何通过AI视频智能分析技术,构建着装规范检测/工装穿戴检测系统?
    Pytorch从零开始实战21
    Java开发手册①
    C# 按钮的AcceptButton和CancelButton属性
    apache httpd 换行解析漏洞
    哈希表题目:唯一摩尔斯密码词
    nginx负载均衡
    花了半天时间,使用spring-boot实现动态数据源,切换自如
    翻译:网站整站翻译 / 网站国际化 / 极简实现
  • 原文地址:https://blog.csdn.net/lza20001103/article/details/125890191