java代码安全审计_Java代码审计-XXE之Unmarshaller

XXE简介

XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素。文档类型定

义(DTD)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,

也可以外部引用。

* 内部声明 DTD:

元素声明]>

* 引用外部 DTD:

当允许引用外部实体时,恶意攻击者即可构造恶意内容访问服务器资源,如读取

passwd 文件:

]>

&aaa;

Unmarshaller简介

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

Marshaller:

marshaller 类负责管理将Java内容树序列化为XML数据的过程。简单的来说可以把java对象序列化转为XML格式的数据。

Unmarshaller:

Unmarshaller 类管理将 XML 数据反序列化为新创建的 Java 内容树的过程,并可在解组时有选择地验证 XML 数据。

DEMO区:

第一种:读取本地输入XML数据

为了方便演示,我就在本地搞个文件了,不抓包输入了。

下面是本地一个测试demo代码:

5563ad890282257d4efc00e853883df5.png

其中1.xml文件内容如下,读取的是本地win.ini文件:

%aaa;%ccc;%ddd;]>

192.168.153.181是反弹的本地ip,进行端口监听:

b19595202a8a8b372f3306dc71498d85.png

运行代码后结果如下,运行后解析了本地XML文件:

8bc9998b18d0d923e1b4966cb694e56f.png

本地监听结果如下,可以看到XXE已经执行,并且监听到结果:

0717a5affe50fd8a829b41a13fc3183e.png

第二种:远程加载XML文件

前面讲的是本地输入XML数据执行XXE,现在讲讲远程加载XML文件,执行XXE。同样demo如下,192.168.110.142 是远程存储XML文件的IP:

c42e7355b34e2bd4221f03c2b6430c19.png

运行效果如下,可以看到一样执行了XXE:

715eef9f0c9300063f2dca228195716f.png

4a820c201951fe000a8a5ce781bd92cf.png

总结

大家一定疑惑为什么我只用jdk1.6版本来执行,因为我试了很多次发现,unmashaller在jdk1.6和jdk1.7环境下都可以支持XXE,但是在jdk1.8环境下是执行不了的,贴两张图给大家看下:

acf1610c117e51f495870843c6fbf9c0.png

8f4b2ebe23071c368add4850e698c45f.png

两张图可以看出jdk1.8是无法执行外部dtd文档的,要是看不起,在贴一张:

c8a7d5169988e994954ea735321749bf.png

好了,今天就到这了。

文章来自【Backer Talk】,原创作者:小平哥,如需转载需注明作者及本文链接。

【Backer Talk】BSRC白客说栏目专注于安全知识分享,长期向安全爱好者征集漏洞分析、漏洞挖掘姿势分享等安全相关内容,欢迎惠赐作品!详情点击

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值