『代码审计』某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项目了。