.net那些XML漏洞

Posted 横戈安全团队

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net那些XML漏洞相关的知识,希望对你有一定的参考价值。

0x01 序言

xml文件格式常用于配置文件,在java领域我们也常看到xml的配置文件,比较明显的就是tomcat的用户配置文件“tomcat-users.xml”,与java语法相近的.netC#其实也是常用xml文件格式作为配置文件,今天我要介绍的就是使用C#来介绍与xml文件格式相关的漏洞。

这是 .net MVC中默认的配置文件之一。

0x02 准备工作

    在接下来的学习中,我们仅需要使用到Visual Studio 2015,为了支持正版,我特意找了社区版Visual Studio 2015。

.net那些XML漏洞

迅雷下载(较快):

ed2k://|file|cn_visual_studio_community_2015_x86_dvd_6847368.iso|4013920256|EB7F6605EDE67509E218E29173AC6574|/

百度网盘(较慢):

https://pan.baidu.com/s/16aB2go8n4J6vvxzKBA8CTg 提取码:tjcs

我们进行的实验都是在vs2015上创建asp.net空web应用程序,然后添加web窗体(.aspx后缀文件)进行测试,如下两图。

.net那些XML漏洞

.net那些XML漏洞

0X03 XXE

此处不再叙述XXE那些原理性的东西了,原理性的东西具体可以看腾讯的文章《未知攻焉知防——XXE漏洞攻防》(https://security.tencent.com/index.php/blog/msg/69),XXE能称为漏洞最本质的是能恶意引入外部实体,也就是下面这条语句“<!DOCTYPE doc [<!ENTITY win SYSTEM "file:///c://windows/win.ini">]>”,在.net里面有好几种方式解释xml文档,但是.net高版本环境经常默认禁止引入外部实体,所以此文章以.net2.0的形式进行测试,下面就是.net4.0默认引用外部实体的演示。

.net那些XML漏洞

当然你也可以在修改配置文件之后,在高版本可以引用外部实体,我在“https://blog.csdn.net/sat472291519/article/details/53128130”找到了这个配置,就是添加下面两段配置代码,为了实验效果,我就以.net2.0的形式进行测试。

.net那些XML漏洞

.net那些XML漏洞

0x03.1 XmlReader

XmlReader是用于xml读取常用的一个类,我编写了以下代码进行xml读取内容,然后把结果进行输出,可以看到下面我已经做好了注释,在.net里面XmlReader是默认禁止启用引用外部实体的,修改配置“rs.ProhibitDtd = false;”的目的是开启引用外部实体。我使用.net2.0在默认的情况下,发送引用外部实体的数据包,可以发现服务端直接报错默认禁止引用外部实体。

.net那些XML漏洞

.net那些XML漏洞

.net那些XML漏洞

我们关闭默认禁止之后,就可以进行xxe读取文件

.net那些XML漏洞

0x03.2 XmlTextReader

XmlTextReader看起来很像XmlReader,但其默认没有禁止外部引用。

.net那些XML漏洞

.net那些XML漏洞

0x03.3 XmlDocument

XmlDocument也跟XmlTextReader一样,在.net低版本的情况下无需修改配置即可引用外部实体。

.net那些XML漏洞

.net那些XML漏洞

0X04 XPATH注入

xpath语法常用于使用路径表达式来选取 XML 文档中的节点或节点集,具体可以到“https://www.w3school.com.cn/xpath/xpath_syntax.asp”进行学习,我个人用得xpath语法最多就是在以前使用python进行爬虫解析html节点的时候,所以说还是应用广泛。xpath注入最本质的原理就是可以操作匹配语句,从而达到我们可以操作匹配结果,最常见的漏洞功能点应该就是进行登录的时候使用了xpath进行匹配xml文档里面的账号密码,下面我就是编写了一段这样的功能代码进行测试。

.net那些XML漏洞

可以看到上面我们设置的账号密码为test1 123456,我们输入正确的账号密码则返回成功

.net那些XML漏洞

错误则返回失败

.net那些XML漏洞

我们可以使用与sql注入一样的语法达成xpath注入(此处语法一致)

.net那些XML漏洞

这里还有个重点就是条件语句里面需要有一个条件必须为正确才可以实现xpath注入

0x04 总结

上边,我描述了三种常见的xxe代码案例以及一种xpath注入代码案例,并非代表全部,关于xml的漏洞,还有之前前辈在安全圈分享过的《.NET高级代码审计(第一课)XmlSerializer反序列化漏洞》“ https://www.cnblogs.com/Ivan1ee/p/10499842.html ”,我就不在此叙述了。
本篇文章如有错误,欢迎后台留言纠正,谢谢。

以上是关于.net那些XML漏洞的主要内容,如果未能解决你的问题,请参考以下文章

XML引用外部实体触发XXE漏洞

.net 的xxe漏洞和反序列化漏洞

如何在 ASP.NET 中返回 XML?

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

那些你常用的JSP知识

提效小技巧——记录那些不常用的代码片段