某oa代码审计

news2024/11/13 9:27:51

简介

这次是一次网盘搜索找到的代码。原本因为要下载一些资源顺手充了个网盘会员,结果发现意外的发现网盘搜索出来的资源还挺丰富。于是便开始搜索一些源码。。。

图片.png

然后安装完毕之后进入web目录中,将web目录单独打包出来。
ps: 由于源码貌似是个备份文件,所以不是很完整,缺少数据库文件源码无法本地安装。(痛点)

找到关键的dll文件,放入dnspy然后导出工程方便之后在vs中打开查看。首先拿到.net源码应该查看webconfig文件。在webconfig文件中可以找到重要的dll,比如web的Controller是哪个dll的。这里不多赘述,详情可看msdn文档,非常之详细。

图片.png

0x01 逻辑缺陷

首先是身份认证逻辑的缺陷,对于用户身份的识别程序没有选择传统的session中判断用户是否登录,而是要求用传递一个token的值,通过判断token值是否等于某字符串来进行一个登录的校验。这个漏洞也将作为基础导致了接下来的一系列未授权漏洞的出现。

图片.png

首先看到代码 base.IsAuthorityCheck() == null 判断了登录状态是否为空,这里可以跟进IsAuthorityCheck函数看看具体的判断逻辑。

在这里插入图片描述

因为条件base.IsAuthorityCheck() == null 判断了是否为空,那么我们只需要让IsAuthorityCheck返回一个非空的值就可以了。根据逻辑往下走,发现byValue == “zxh” 的时候会返回一个UserInfo对象,那么也就是返回一个非空值。

回看到第25行,跟进getByValue函数
在这里插入图片描述

getByValue函数如下:
图片.png

这段代码是Web中用于从请求的参数中获取特定值。解释一下:

  1. base.Request.Properties["MS_HttpContext"]:这部分代码通过基类的Request对象获取一个名为 “MS_HttpContext” 的属性,该属性用于存储HttpContextBase对象。
  2. (HttpContextBase):这是一个类型转换操作,将上一步获取的属性值转换为HttpContextBase类型的对象。HttpContextBase是.net中的http类,简单看成是一个http请求即可,详情:https://learn.microsoft.com/zh-cn/dotnet/api/system.web.httpcontextbase?redirectedfrom=MSDN&view=netframework-4.8
  3. .Request[value]:最后,从上述转换后的 HttpContextBase 对象中获取名为 “value” 的请求参数的值。value是刚刚传递过来的参数,也就是25行的token。

因此,整体来说,这段代码是从 HTTP 请求的参数中获取名为 “token” 的参数。然后判断参数是否是zxh,如果是则返回一个UserInfo对象,然后通过身份认证。也就是说和cookie,session等身份认证不挂钩,登录判断只需要有token字段并且内容是zxh即可。

> 这也是api中常见的安全问题,因为有时候api确实不好做登录验证,常常都会使用一个字段去判断是否登录,但是如果这个字段是静态的,固定不变的则可能引发未授权访问等一系列安全问题。

0x02 sql注入

图片.png
绕过了token验证之后,程序从http中获取了sqlParamenters参数,然后再次判断sqlParamenters是否为空如果不为空就执行ExecuteSqlForSingle函数。其中sql参数则是要执行的sql语句。

图片.png
其实到这里可以选择跟进或者是不跟进,因为如果跟进的话,还需要分析另外的一个dll。一般情况下我都是会直接试一下poc,如果能够运行成功,那么则不跟进,反之则跟进函数看看是否存在一些过滤。像这种看样子是没过滤的,可以尝试直接试一下是否存在注入。

在这里插入图片描述

图片.png

可以看到确实存在sql注入,能够直接执行sql语句。

后话:

如果想跟进看看具体原理就是找到这个Service的dll。

图片.png

然后找到systemService的ExecuteSqlForSingle函数

图片.png

然后跟进ExecuteScalarSQLToObject可以发现没有任何过滤,直接执行sql语句。

图片.png

题外话:

还能够看看webconfig文件的sql配置,如果默认用户是sa的话,可以通过sa这个用户直接使用xp_cmdshell直接执行windows cmd命令。这也是.net中比较有意思的一点,注入有时候就是rce。因为.net大多数都是用sql server作为数据库,而sql server有个xp_cmdshell可以执行系统命令。

0x03 文件上传1

对于.net的文件上传来说可以通过一些controller命名的方式寻找突破口,比如很多开发都习惯性命名为fileController表示文件操作的控制器,比如uploadController,fileController,downloadController等等命名的Controller就是极好的一个突破口,很容易能寻找到各种文件操作的控制器。

图片.png

这套源码就存在了一个较为常见的文件上传。通常oa系统都会需要上传一些文档比如xls表格或者word,pdf等附件之类的用于办公需求,但是如果没有对后缀名进行过滤,那么就会造成黑客通过文件上传漏洞获取服务器权限。

比如代码如下Upload函数,token已经通过漏洞1的逻辑缺陷进行了绕过。然后程序获取了FileName以及fs两个参数,其中fs就是文件的内容。

fs经过了JsonConvert的反序列化,将字符串内容转换成了Byte数组。

图片.png

跟进Upload函数,发现FileName就是传递过来的文件名。最后作为一个path给到文件流,文件流最后会写入成真正的文件。

图片.png

MemoryStream 是一个在内存中创建和操作字节流的类。它继承自 Stream 类,提供了读取和写入字节数组的方法,可以方便地进行内存中的数据操作。也就是说我们传递的http参数fs将会以byte编码的方式传递到fs变量fs变量经过了MemoryStream然后写入到文件。

比如http传入的是[97,97,97]这个byte数组那么经过MemoryStream写入文件就是aaa的形式,因为a的ascii码是97

1711438160800.jpg

然后a.txt只是为了省事随便写的,实际上是由http参数传递过去的。现在看看真正的效果。

图片.png

访问发现

图片.png

0x04 文件读取

同文件上传类似,基本上一个Controller某个方法如果没有任何防护,基本上整个Controller都没有防护。比如对上传的文件名没有做任何限制,那么对于文件读取的文件名大概率也是没有任何限制的。任意文件读取危害可大可小。任意文件读取在某些情况下危害是同等于文件上传的。比如某些api是对上传没有任何限制但是只限于后台文件上传,这个时候可以用任意文件读取读取数据库的备份文件从而寻找密码进行getshell。还有java的一些文件读取,比如java应用使用了shiro组件的同时还存在任意文件读取漏洞,那么攻击者完全可以通过读取java的shiro的jar包获取shirokey进行getshell。也可以通过读取ssh密钥(需要高权限)等等方式去进行利用。

程序代码如下:

1711460694276.jpg

通过requestFileName参数作为文件名然后去读取文件。可以看到虽然限制了文件夹路径,但是并没有过滤掉…/的方式,还是可以通过…/的方式去对目录进行跨越从而造成任意文件读取。

1711460729394.jpg

1711460674240.jpg

跟进getBinaryFile

1711460748509.jpg

然后读取文件。

图片.png
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇

这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超详细Python安装教程(包含python解释器和pycharm)

目录 一,安装python解释器 二,安装PyCharm开发工具 一,安装python解释器 下载地址:https://www.python.org/downloads/ 如果是在windows上下载的话,选择Downloads->Windows 我选择了最新版本的64位安装&#xf…

46 mysql 客户端拿不到具体的错误信息

前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…

低代码引时代浪潮,校企合作实训共筑未来蓝图

荣誉在身,责任在肩。 为贯彻国家科教兴国战略,充分发挥技术、人才等资源优势,提升学校科研能力与企业技术管理水平。2024年4月,山东建筑大学联合织信低代码正式签署“校企合作协议”,共同构建产学研联盟创新体系&…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(二)——带着问题的学习;一刷感受;环境搭建

按照作者在读者寄语中的说法:我们得榨干这本书的知识。 带着问题 为了更好的学习,我们最好带着问题去探索。 第一:核心问题与基础知识 如上图:这本书介绍了SLAM相关的核心问题和基础知识。王谷博士给我们做了梳理:…

鸿蒙语言基础类库:【@system.file (文件存储)】

文件存储 说明: 从API Version 6开始,该接口不再维护,推荐使用新接口[ohos.fileio]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import file from system.file;f…

OpenCV下的单目标定,双目标定与立体校正(calibrateCamera, stereoCalibrate and stereoRectify)

OpenCV下的单目标定,双目标定与立体校正(calibrateCamera, stereoCalibrate and stereoRectify) 文章目录 1. 杂话2. 单目标定2.1 先看代码2.2 一点解释2.3 calibrateCamera参数 3. 双目标定3.1 先看代码3.2 stereoCalibrate参数 4. 立体校正4.1 先看代码4.2 一点解…

U盘RAW状态深度解析与高效恢复策略

一、U盘RAW状态探秘:数据访问的隐形壁垒 在数字化时代,U盘作为我们日常生活中不可或缺的数据存储工具,承载着大量的重要信息与文件。然而,当U盘突然变为RAW格式时,这些宝贵的数据便仿佛被无形的屏障所隔离&#xff0c…

前端面试题(CSS篇八)

一、letter-spacing 与字符间距? letter-spacing可以用来控制字符之间的间距,这里说的“字符”包括英文字母、汉字以及空格等。 letter-spacing具有以下一些特性。 (1)继承性。 (2)默认值是normal而不是0。…

Go语言中GC(垃圾回收回收机制)三色标记与混合写屏障

5、Golang三色标记混合写屏障GC模式全分析 (yuque.com) 第1讲-课程目标_哔哩哔哩_bilibili Golang三色标记GC混合写屏障 Go V1.3之前的标记清除(mark and sweep) 垃圾回收、内存管理、自动适放、三色标记法、STW (stop the world) 图的遍历?可达性分…

轴端命名 及多器件编号

1.轴端命名 轴如果单端动力输入时,动力输入一侧,可以称为: 输入端,驱动端 另一侧可能的称谓是: 支撑端、自由端、从动端、未驱动端、静态支撑端。 另外,在查阅相关称谓时,看到了关于卷扬机…

<Rust>egui部件学习:如何在窗口及部件显示中文字符?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第一篇博…

简约唯美的404HTML源码

源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…

配置服务器

参考博客 1. https://blog.csdn.net/qq_31278903/article/details/83146031 2. https://blog.csdn.net/u014374826/article/details/134093409 3. https://blog.csdn.net/weixin_42728126/article/details/88887350 4. https://blog.csdn.net/Dreamhai/article/details/109…

Linux主机添加ipv6地址

一、添加网卡ipv6地址 通过命令行添加 ip add add 2001:db8:0:1::102/64 dev ens160 通过编辑/etc/sysconfig/network-scripts/目录下的ifcfg-配置文件添加 TYPEEthernet BOOTPROTOdhcp # 或者指定为 "static" 如果你想要静态配置 DEFROUTEyes IPV4_FAILURE_FAT…

多元统计分析概述

目录 1. 多元回归分析 2. 主成分分析&#xff08;PCA&#xff09; 3. 因子分析 4. 判别分析 5. 聚类分析 6. 多维尺度分析&#xff08;MDS&#xff09; 结论 多元统计分析是一组用于分析多个变量之间关系的统计方法。它广泛应用于各个领域&#xff0c;如市场研究、生物医…

C++中的语句详细介绍:简单语句、条件、循环迭代语句、跳转语句、异常处理语句、try语句等

文章目录 C中的语句(1)简单语句A.空语句B.复合语句 (2)条件语句(3)迭代语句A.常规for循环B.范围for循环C.while和do...while (4)跳转语句A.break语句B.continue语句C.goto语句 (5)异常处理语句A.标准异常B.throw抛出异常 (6)try语句 C中的语句 (1)简单语句 简单语句包括&#…

探索 Python 的宝藏:深入理解 NumPy库

探索 Python 的宝藏&#xff1a;深入理解 NumPy 库 引言&#xff1a;为何选择 NumPy&#xff1f; NumPy 是 Python 中一个基础而强大的库&#xff0c;它为 Python 语言提供了高性能的多维数组对象和相应的操作。在科学计算、数据分析、机器学习等领域&#xff0c;NumPy 以其高…

Android获取当前屏幕显示的是哪个activity

在 Android 中&#xff0c;要获取当前屏幕显示的 Activity&#xff0c;可以使用以下几种方法&#xff1a; 方法一&#xff1a;使用 ActivityManager 获取当前运行的任务信息 这是一个常见的方法&#xff0c;尽管从 Android 5.0 (API 21) 开始&#xff0c;有些方法变得不太可靠…

ctfshow~VIP限免题目20道(保姆级解析)

奈何自己没有实力&#xff0c;看到免费的东西就想占点便宜&#xff0c;想着做都做了就出个wp吧&#xff0c;本人小白&#xff0c;不喜勿喷&#xff01; 一、源码泄露 题目提示&#xff1a;开发注释未及时删除 题目给出了源码泄露&#xff0c;那咱直接看源码&#xff08;右键点…

2.I/O口

文章目录 I/O输出(点灯)分析电路代码编写 I/O输入(电平检测)代码编写 I/O内部电路分析51单片机STM32单片机输入输出 I/O输出(点灯) 分析电路 看电路图&#xff0c;元器件形成电压差&#xff0c;即可点亮LED灯 代码编写 使用不同操作进行LED控制 #include "reg52.h&quo…