首页 > 其他分享 >某个OA系统的代码审计

某个OA系统的代码审计

时间:2024-07-24 09:29:24浏览次数:6  
标签:审计 文件 代码 controller OA 网安 token 参数 某个

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

0x1 反编译

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

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

0x2 身份校验绕过

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

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

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

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

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

0x3 任意文件下载

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

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

getBinaryFile函数如下。

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

0x4 信息泄露

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

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

直接访问:

0x5 任意文件删除

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

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

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

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

0x6 任意文件上传

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

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

pathType详解:

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

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

漏洞验证:

0x7 SQL注入

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

验证:直接sqlmap即可

更多网安技能的在线实操练习,请点击这里>>

  

标签:审计,文件,代码,controller,OA,网安,token,参数,某个
From: https://www.cnblogs.com/hetianlab/p/18320119

相关文章

  • 解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器!
    在当今数字化的时代,网站的流量和用户行为数据就像是一座蕴藏着无尽秘密的宝藏。而如何有效地挖掘和分析这些数据,成为了许多网站管理者和开发者头疼的问题。GoAccess,一款开源的实时Web日志分析工具,或许能为我们提供一扇窥探这些秘密的窗口。GoAccess:你的流量分析好帮手GoAccess......
  • 04-【编写loader工程内容】利用内联汇编显示字符串
    在开发操作系统过程中,有时必须使用某些特殊的指令(如inb/outb/hlt),而C编译器无法自动使用这些指令。因此,如果要使用这些指令,有两种方式:1.在汇编文件中为该指令的使用创建汇编函数(子程序),然后在C代码中以函数调用的方式去使用;2.使用内联汇编:即在C代码中嵌入汇编程序。......
  • 易优CMS模板标签specialnode专题文档在非专题内容页调用某个专题节点标签
    [基础用法]标签:specialnode描述:专题节点文档标签,获取指定专题页的某个节点的文档列表。(除了支持专题页调用,也支持其他页面的调用,具体请参考更多示例) 用法:{eyou:specialnode code='节点标识' id='field'}<a href='{$field.arcurl}'>{$field.title}</a>{/eyou:specialnode}......
  • Oauth 检查信用的有效性和服务器的可访问性
    我正在使用Google帐户为我的网站添加Oauth登录,并且偶然发现了一件事-如何在执行登录流程之前验证Oath提供的信息??首先,我有一个Flask应用程序以这种方式创建:是这样实现的:importloggingimportosfromdatetimeimportdatetimefromdatetimeimporttim......
  • JngLoad.dll 缺失报错问题全解:从原理到实践的修复流程
    jngload.dll是一个动态链接库(DynamicLinkLibrary)文件,通常与处理JPEG2000图像格式的软件相关联。JPEG2000是一种高效率的图像压缩标准,jngload.dll可能包含了处理这种图像格式所需的功能和算法。这个DLL文件常出现在处理图形和图像的软件中,比如某些图像编辑软件或游戏,用来读......
  • 深入理解 Java 类加载机制:Arthas classloader 命令解析
    引言Java虚拟机(JVM)的类加载机制是Java应用运行的基础。了解类加载器(ClassLoader)的工作原理对于解决类冲突、热部署、资源查找等问题至关重要。Arthas,作为一个强大的Java诊断工具,提供了classloader命令,帮助开发者深入理解JVM的类加载机制。本文将详细介绍classloa......
  • iOS面试题-load 和 initlize的区别
    +load和+initialize是两个与类的加载和初始化相关的特殊方法。它们在类的生命周期中的作用和调用时机有明显的区别。+load方法调用时机:+load在类初始加载进内存时调用,这通常发生在程序启动的时候,所有类和分类(Category)的+load方法在应用程序的生命周期中只会被调用一次。调用......
  • c#格式化浮点数double/float保留小数位数方式(转)
    下面的示例显示如何格式化C#中的浮点数。使用静态方法String.Format或实例方法double.ToString和float.ToString。小数点后位数[C#]//justtwodecimalplacesString.Format("{0:0.00}",123.4567);//"123.46"String.Format("{0:0.00}",123.4);......
  • Android或iOS 与 REST/SOAP测试 工具推荐
    移动测试工具- 有助于自动测试Android或iOS应用程序1)AppiumAppium是用于移动应用程序自动化的开源测试工具之一。它允许用户测试各种原生、移动、web和混合应用程序。它还支持模拟器和模拟器上的自动测试。功能特点:这是一个简单的应用程序,需要很少的内存用于测试过程......
  • 易优CMS模板标签downloadpay下载付费
    [基础用法]标签:downloadpay描述:下载模型实现付费,会员专享,会员付费下载,在使用之前先频道模型->下载模型->编辑->开启下载付费使用方法:付费标签需要加载/template/pc/system/download_pay.htm模板文件下载地址:点击下载,该文件放在pc模板目录......