栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

xml注入以及xxe漏洞

文章目录
  • xml注入以及xxe漏洞
  • 前言
  • 一、什么是xml
  • 二、xml注入以及xxe漏洞
    • 1. xml注入
      • 基本格式
      • DTD
      • 注入
      • 防御xml注入的方法:
    • 2.XML外部实体注入(XXE)
      • 任意文件读取
    • 3.读入数据
      • 命令执行
      • 内网攻击
      • 防御措施
  • 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漏洞案例


总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020010.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号