点击蓝字 关注我们
日期:2025-03-07
作者:Corl7
介绍:记录某OA系统.NET审计过程。
0x00 前言
由于对ASP.NET
项目不是很熟悉,所以一直没有审计过ASP.NET
的源码。最近项目不是很多,于是随便找了一套手里面的源码,边审边学。
0x01 文件上传漏洞
通过查找上传点,发现Edit.aspx.cs
文件中存在上传点。首先创建一个 MojoCube.Api.File.Upload
类的实例,用于后续文件上传操作,然后设置文件上传路径为Document
拼接在Session
中取到的UserID
,然后设置文件名,最后调用DoFileUpload
方法进行上传文件。
使用ILSpy
打开Bin
目录中的dll
文件,搜索MojoCube.Api.File.Upload
,找到DoFileUpload
方法。首先检查上传的文件是否为空,然后判断FilePath
是否为空,如果为空,FilePath
为当前应用程序的根目录的物理路径拼接Files
目录,如果不为空,FilePath
为当前应用程序的根目录的物理路径拼接Files
目录拼接FilePath
值。
由于在Edit.aspx.cs
文件中设置了FilePath
的值,所以最终的上传路径为/Files/Document/
拼接在Session
中取到的UserID
。接下来就是获取文件名和后缀名,然后判断如果目标目录不存在,则创建目录,如果FileName
为空,使用原始文件名,否则使用自定义文件名,自定义文件名为在Edit.aspx.cs
文件中设置FileName
的值。最后使用SaveAs
将上传的文件保存到目标路径。
搜索MojoCube.Api.Text.Function.DateTimeString
,该方法使用当前时间戳拼接1000-9999
的随机值,也就是文件名是22
位。
在整个上传过程中,没有对文件后缀名做校验,因此存在文件上传漏洞,直接访问页面进行文件上传。
访问上传后的文件。
0x02 SQL注入漏洞
通过查看.cs
文件,发现大多数文件中都是用过滤器过滤了用户的输入,来防止SQL
注入,然后拼接keyword
值到sql
语句中。
在ILSpy
中搜索MojoCube.Api.Text.CheckSql.Filter
,查看实现方法。定义了一个字符串pattern
,包含了常用的SQL
关键词,然后去使用正则进行匹配,如果匹配成功,则将整个输入的内容替换为''
,如果匹配不成功,则将'
替换为''
。
虽然使用了过滤器,但是按我审计经验来说,并不可能全部参数都使用了过滤器,终会有漏下的参数。翻.cs
文件翻了好长时间,终于在List.aspx.cs
文件中,找到了一个没有使用过滤器的参数,直接接收typeId
参数值,并拼接到SQL
语句中。
直接上Sqlmap
,喜提SQL
注入一个。
0x03 未授权访问漏洞
为了发现未授权访问漏洞,找到了一个偷懒的办法,直接将系统路径制作为一个字典文件。
然后放到burp
中去跑,发现泄漏了数据库的账号以及密码。
0x04 总结
通过审计该项目,也算是对ASP.NET
项目有了一个简单的了解,包括常用函数、目录结构等,并且也成功审计出了漏洞,往后就可以开开心心的审ASP.NET
项目了。
免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。
点此亲启
原文始发于微信公众号(宸极实验室):『代码审计』某OA系统.NET代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论