记对某.net系统的审计

admin 2025年6月7日10:28:46评论3 views字数 3276阅读10分55秒阅读模式
免责声明 由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号安全洞察知识图谱及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

1详细介绍

转自先知社区:https://xz.aliyun.com/news/10477作者:Alpaca

0x01 前言

是之前对学校某个平台进行测试的时候发现的,还有不少高校在使用这个系统,洞还挺多的,审计之后交了cnvd,顺便写篇文章记录下。

0x02 逻辑缺陷

由于程序是基于SilverLight框架开发的,我们先找到ClientBin下的.xap文件,该文件是SilverLight编译打包后的文件

记对某.net系统的审计

修改该文件后缀名为.zip并解压即可得到其中包含的文件

记对某.net系统的审计

将USTCORi.WebLab.WebUI.dll文件使用dnSpy工具进行反编译,得到源码

记对某.net系统的审计

程序在MainPage类中的MainPage()方法进行初始化,我们跟进到该方法:

记对某.net系统的审计

首先使用InitializeComponent()函数启动基础组件:

记对某.net系统的审计

然后使用GetSession()函数获取用户session,根据代码可以看到请求了一个.svc文件

记对某.net系统的审计
记对某.net系统的审计

根据我们登录时抓包获取到的数据得以验证是WLService.svc:

记对某.net系统的审计

根据请求的文件名定位到文件WLService.svc

记对某.net系统的审计

跟进该文件发现指定到已编译文件WLService.cs,进入该文件

记对某.net系统的审计
记对某.net系统的审计

程序首先对请求参数进行校验,要求BizName和ActionName都不为空,而且如果用户是执行的登录操作(即当BizName参数的值为”USTCORi.WebLab.BLL.BLLSystemUser” 且 ActionName的值为”CheckLogin”或”CheckLoginValue”时)会使用CheckTime()函数进行过期检查
跟进到CheckTime()函数:

记对某.net系统的审计

代码第102行,读取程序所在目录/Image/cdx.bin文件,如果第一个符号位等于200则返回true继续。
使用winhex工具打开该文件发现第一个符号位确为200,故CheckTime()函数返回true。

记对某.net系统的审计

完成“过期检查”之后从代码第48行开始,程序加载名为“USTCORi.WebLab.BLL”的程序集,创建实例,返回json序列化后的result结果。

记对某.net系统的审计

所以要想知道登录验证的逻辑是如何的,我们就必须进入到USTCORi.WebLab.BLL这个程序集。
在bin文件夹下找到对应的USTCORi.WebLab.BLL.dll文件,使用dnSpy工具反编译得到源码,结合burp suite抓包到的BizName、ActionName参数值,我们定位到BLLSystemUser类下的CheckLogin()方法。

记对某.net系统的审计
记对某.net系统的审计

在代码第九行,先将param参数的值
记对某.net系统的审计进行JSON反序列化,并用paramList变量接收,所以paramList[0]指向用户输入的用户名,paramList[1]指向用户输入的密码。代码第14、15行读取web.config文件中的配置:

记对某.net系统的审计

由配置可知变量ValidatorUser = "xxxx公司",IsShowPhysic = “0”。
在代码第17行调用了CheckUserRight()函数对用户合法性进行了校验,这个函数是开发者用于进行系统正版验证的,由于这个站是开发公司自己的演示站,肯定是没有问题的,我们继续往下审计。
在代码第22行调用Dao层接口获取数据,我们跟进到CheckLogin()接口

记对某.net系统的审计

可以看到,程序使用iBatis框架进行SQL查询,我们根据stmtId变量定位到iBatis配置文件SystemUser.BatisMap.xml,通过搜索”CheckLogin”找到对应的声明:

记对某.net系统的审计

不难发现,程序通过构造类似SELECT * FROM SystemUser WHERE UserID = “用户名”的SQL语句进行查询,并在第22行使用listUsers变量接收,第23行,判断数据库中是否存在且仅存在一个该用户,如果失败返回null,在第27行,又判断用户输入的密码经过md5加密后和数据库中的密码哈希是否一致,不一致则返回null。
如果以上两个条件都完全符合的话,代码第33到41行,对在第16行创建的名为result的CMMUser实体类进行赋值后返回。
回到最开始的GetSession()方法:

记对某.net系统的审计

在调用完WLService.svc后会同步对返回的结果进行验证:

记对某.net系统的审计
记对某.net系统的审计

首先使用JSON反序列化结果并转换为CMMUser对象,并将值赋给当前会话实例(即下图的CMMSession.User对象)

记对某.net系统的审计

赋值完成后调用InitSow()方法,跟进该方法:

记对某.net系统的审计

开始渲染登录成功后的界面
在代码第449行使用IsAdmin()方法判断是否是管理员:

记对某.net系统的审计
记对某.net系统的审计

我们进入WLConstants常量类,发现ROLE_ADMIN字段被定义为“1”
解读出程序逻辑:当前session中IsLogined参数为true,且UserType等于“1”就判定当前用户为管理员。
然而系统存在一个致命缺陷,响应包是可以借助burp修改的,也就是说在登录了一个普通低权限的学生用户之后我们可以通过修改响应包中的UserType字段为“1”达到越权成为管理员的目的。
漏洞验证:

记对某.net系统的审计

登录默认学生账号student/123并抓包,选择修改响应包

记对某.net系统的审计

可以看到默认学生用户登录成功,但是usertype字段为3,我们修改其为1

记对某.net系统的审计
记对某.net系统的审计

然后点击Forward放包

记对某.net系统的审计

发现用户管理处增加了系统管理员才拥有的功能菜单,而且所有功能都可以正常使用:

记对某.net系统的审计
记对某.net系统的审计

而使用默认低权限学生用户登录时却没有这些功能点:

记对某.net系统的审计

由此证明逻辑缺陷漏洞存在。

0x03 SQL注入

通过上面的简单审计,我们注意到系统使用了iBatis框架,.net的ibatis框架对sql注入已经做了不错的防护,但是往往由于开发人员的疏忽,仍然可能造成漏洞,比如在定义模糊查询的sqlmap时,如果开发者使用$进行拼接,而不是#,则会造成注入。

记对某.net系统的审计

我们进入ibatis的xml映射文件,搜索LIKE字样来寻找

记对某.net系统的审计

在SystemUser.BatisMap.xml中就找到一处。
为了验证漏洞能被利用,我们在dnSpy中全局搜索FindAllStudentByCondition这个id,定位到使用了该接口的函数

记对某.net系统的审计
记对某.net系统的审计

继而定位到触发该函数的功能点:

记对某.net系统的审计
记对某.net系统的审计

定位到“学生管理”处,抓包,将抓包内容保存为txt文件,由于是soap注入,将UserName参数值加上星号*,方便sqlmap识别

记对某.net系统的审计
记对某.net系统的审计

sql注入漏洞得以验证成功。

0x04 任意文件上传

在班级管理处点击数据导入按钮开始信息导入,

记对某.net系统的审计

发现只允许
记对某.net系统的审计

.xls和.xlsx文件,选择一个excel表格文件确定上传后在burp捕获到数据包

记对某.net系统的审计

发现请求了WebClientExcelUpload.ashx,进入该文件

记对某.net系统的审计

定位到WebClientExeclUpload类

记对某.net系统的审计

不难看出,后端直接从GET参数获取文件名和保存的路径,而且没有任何的过滤措施,导致任意文件都可上传,且上传路径也可控。
上传aspx类型的webshell并通过burp修改文件后缀为aspx即可绕过前端验证,成功getshell

0x05 后话

刚开始审计的时候其实能够做到反编译就已经是一个重大突破了,这里需要了解到的知识是:1).xap文件是SilverLight编译打包后的文件。2)改后缀为zip就能得到里面的文件。3)使用工具dnSpy进行反编译。
接下来得到源码过后就是基本操作:一步一步看代码,总能找到突破点,一些类中方法的跟进,理解函数的意思,请求,以及抓包获得数据。这里是存在一个逻辑缺陷漏洞,这个漏洞其实不难避免,如果说在每个登录用户里加一个token,就能避免被恶意修改权限以及后面的拿到shell。

2免费社区

安全洞察知识图谱星球是一个聚焦于信息安全对抗技术和企业安全建设的话题社区,也是一个[免费]的星球,欢迎大伙加入积极分享红蓝对抗、渗透测试、安全建设等热点主题

记对某.net系统的审计
记对某.net系统的审计

原文始发于微信公众号(安全洞察知识图谱):记对某.net系统的审计

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月7日10:28:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记对某.net系统的审计https://cn-sec.com/archives/3793108.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息