freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

某个OA系统的代码审计
2024-07-23 17:19:37

2023年HVV中爆出来的洞了,但是有一些漏洞点修复了,刚好地市级的攻防演练中遇到了一个,想着把可能出现问题的点全部审计一下,顺便熟悉一下.net代码审计。ps:感兴趣的师傅们可以自行根据poc搜索源码。

0x1 反编译

好吧,当我没说,下载dnspy反编译即可,但是首先要找到web逻辑代码才能开始审计,因为这套oa是使用了mvc开发模式,简单介绍一下mvc,其实就是model,controller,view,其中的view是视图也就是html等展示给用户看的东西,model是模型也就是控制数据库的代码。controller是控制器负责执行代码的逻辑,也就是我们需要审计的地方了。

202407231554123.png

202407231554126.png

然后找到controller就是web的主要逻辑了。

202407231554127.png

0x2 身份校验绕过

首先可以随便点入一个controller,发现filesController继承自TopVisionApi。

202407231554128.png

然后我们发现IsAuthorityCheck()这个函数用于判断权限。

202407231554129.png

首先看到第一行代码getByValue这个函数,其实Request.Properties["MS_HttpContext"]).Request[value]就是获取http请求中的某个参数,而value就是调用传过来的参数,在这里是token,那么这段代码就是获取http中的token参数。

202407231554130.png

然后if判断了token是不是空值然后再判断token参数的值是不是等于"zxh",如果登录则直接返回一个UserInfo对象。

202407231554131.png

然后回到filesController的身份判断,发现只判断了IsAuthorityCheck返回是否为null,所以只需要让token参数是zxh的时候,那么就可以绕过身份校验了。

202407231554132.png

0x3 任意文件下载

还是 filesController 这个控制器 DownloadRptFile方法。这时我们已经绕过了身份认证,所以只需要看之后代码即可。requestFileName就是我们传递的http参数,

202407231554133.png

然后跟进代码。并未发现任何过滤../的行为,直接传递给getBinaryFile函数202407231554135.png

getBinaryFile函数如下。

202407231554136.png

结果证明: (读取文件内容会以base64返回)

202407231554137.png

0x4 信息泄露

发现GetCurrentUserList方法查询了所有用户信息。并且返回给前台。

202407231554138.png

<UserInfo>是c#中的泛型,这里是用来查询数据库的。可以看到遍历了dicUserList这个数组。这个数组就是初始化的用户信息数组了。

202407231554139.png

直接访问:

202407231554140.png

0x5 任意文件删除

发现DeleteFile2方法是一个删除文件方法。这里也没有发现过滤../以及过滤删除文件的后缀名。

202407231554141.png

虽然是有限制了文件路径,但是全然没有过滤../,而且filename参数也是完全可控的。所以这里其实是存在任意文件删除漏洞的。

202407231554142.png

202407231554143.png

ps: 这里就不放验证截图了,感兴趣的师傅们可以自行本地验证。

0x6 任意文件上传

UploadFile2方法中获取了各种参数,然后传入UploadFile2

202407231554144.png

跟进该方法。pathType就是限制文件上传到哪个文件夹的。

202407231554145.png

pathType详解:

202407231554146.png

fs参数是我们传递的byte数组也就是文件的内容。

startPoint等于0就好这样才能创建一个新的文件,datasize则是数组的长度。

202407231554147.png

漏洞验证:

202407231554148.png

0x7 SQL注入

InventoryController的GetProductInv方法,直接从参数获取boxNoName未经过过滤直接通过string.Format拼接至sql语句中,导致了sql注入。

202407231554149.png

验证:直接sqlmap即可

202407231554150.png

202407231554151.png



# 攻防演练 # 代码审计 # OA系统
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录