记一次CNVD通用漏洞审计

本文转载于:https://www.freebuf.com/articles/web/290697.html

0x01 前言

写这篇文章的缘由其实还挺魔幻的,起因是在一次实战渗透时通过弱口令拿下一个低权限用户成功进入后台,在后台寻找功能点通过抓包分析,定位到目标系统后台存在SQL注入,通过os shell拿下内网之后闲着无聊就谷歌了下,发现这个系统的开发商是某某公司,同时cnvd也没有收录该产品,于是想着能不能捡漏搞个cnvd证书。

碍于信息检索能力太差,只收集到屈指可数的几个url,而且这几个系统都没有弱口令可以进入后台,因为进不了后台,就猜测后台的功能也都无法使用,漏洞无法复现,于是在知道肯定过不了的情况下还是硬着头皮只交了几个url上去(没记错通用漏洞需要至少3个以上验证成功漏洞案例),结果果不其然,三审的时候给我驳回了。

不甘心,案例找不出来,我把代码审计一遍还不行吗?于是就通过webshell打包了一份代码(因为是.net的站,就只打包了bin包下来),于是便有了这篇文章。

0x02 漏洞利用

还是先简单聊聊sql注入如何拿下内网的吧。(以前的一次实战,没有截图,脑补一下,见谅)

漏洞点抓包

尝试直接sqlmap拿下--os-shell,苦于没有绝对路径,就尝试百度看看还有没有其他漏洞,然而网上资料几乎没有,就在要放弃的时候从百度文库中找到一线希望,找到了该系统的使用说明,从说明书中得知系统的mysql数据库安装路径和web路径在同一目录下,于是通过--sql-shell使用

select @@datadir

获取到mysql的安装目录,同时也就获得了web目录,最后就可以直接--os-shell了。

拿到os-shell之后先tasklist,没有杀软,不需要免杀;ping了下发现服务器出网,基础操作certutil下载msf马上线,先用msf上传一个web shell到网站目录(感觉拿到web shell后要放心点)。看了下权限,system,不用提权了;看了下systeminfo,08的机器,load kiwi模块,读取明文密码;netstat看下3389端口,没开启,用注册表开启。msf起socks代理,mstsc远程连接之。net view看了下没有域,上传fscan进行内网资产扫描,同时在桌面看到WinScp软件,而且其中还保存着好几台内网服务器,都是root权限,试了试都能连接上。这里我下了个星号密码查看器传上去,想获取它们的明文密码,结果失败了。谷歌了下,发现WinScp配置默认加密保存在注册表中,可以修改保存方式为ini文件并用工具破解其密码,于是修改之后dump到本地通过工具get到密码。

另一边fscan扫到了两台服务器的弱密码,还有几台有redis未授权漏洞,都可以写私钥登录。

此外,从sql备份文件中又找到另外平台的账号密码。

0x03 代码审计

从webshell的文件管理处定位到漏洞文件Default.ashx,可以看到调用了UserInfo.Default这个类。

在bin包中找到对应dll文件,使用dnSpy反编译得到源码,开始审计。

结构如下:

首先全局搜索一下session关键字,没有发现。再在所有外部引用中搜索session关键字,还是没有发现,是个好兆头,说明系统可能没有对session进行验证。

代码第20行,定义ProcessRequest方法并将http请求体作为该方法的参数传入,并在第22行定义httpCookie变量存储当前cookie中键名为"WCMS.User"的数据,可以看到在代码第23行,程序只进行了三种判断,cookie不为空,cookie中UserID不为空且RoleID也不为空

只要满足上述三个条件,程序就会继续处理请求,否则才返回204代码报错。

这里由于身份校验不严,导致攻击者可以在没有后台管理员权限的情况下也能执行相应操作。审计到这里我兴奋起来了,因为之前担心系统会对session进行判断就没有对另外几个站点进行复现,导致cnvd提交被驳回,然而现在完全不需要担心了,因为系统根本就没有对session进行验证,只需要修改http请求中的host参数就可以实现漏洞的批量利用。

但是审计到这里还没有结束,我们继续对sql注入漏洞的成因进行分析。

在代码第32行,对action参数进行判断,我们根据payload中的Read值,跟进到GetData()函数

从代码第190行,不难看出该函数并未对参数进行过滤,只进行了是否为空的判断

在代码第197行程序还进行了RoleInfoID的校验,担心这里可能会要求提供服务器中存在的id导致身份鉴权失败,我们着重分析下这里

定义一个text变量接收结果,如果在http form表单中不存在RoleInfoID,就调用Lib.CommonFunction类中的GetRoleID()方法进行获取,我们跟进后发现程序仍然只判断了cookie是否存在,只有当cookie不存在时才会返回为空,导致代码第198行判断为假进而导致api返回为空

如果cookie存在,会调用DESDec()函数将cookie中RoleID的值进行DES解密,并将结果保存以待后用。

这里我根据源码用c#重写了下解密过程,并将payload中的RoleID用于解密,结果最后是乱码(可能是我代码没写对的锅...)

然后我用在线的DES工具解密出来又是正确的...(蚌埠住了,我写的代码就是屎呜呜呜)

然后我们再回到GetData()函数,代码第186行通过Lib.Factory类中的CreateUserInfo()函数创建了DBHelper对象,并在第205行调用了GetItems()函数

通过分析发现IDBHelper接口由Mysql.DBHelper类实现,跟进到DBHelper类的GetItems()函数进行分析

代码第302行,使用for循环遍历之前text变量中的值,构造sql语句,使用where in语法对查询结果进行限定。同时,我们注意到,搜索关键字keyWords到目前为止仍未进行任何的过滤,而且后续通过分析,发现开发者也未在全局使用预处理和参数化,导致keyWords参数易于受到攻击。

综上,虽然RoleID会用于获取子账号ID,然而如果数据库中不存在该RoleID的用户也没有关系,因为我们的攻击方式是基于时间的盲注,即使数据库查询返回为空,也不妨碍我们通过时间比较进行攻击。因此可以下定结论,该漏洞在未经授权就可被利用。

整个流程如下图所示:

0x04 后话

细心细心细心!

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

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

相关文章

教你玩转CSS 属性选择器

目录 具有特定属性的HTML元素样式 属性选择器 属性和值选择器 属性和值的选择器 - 多值 表单样式 CSS 属性 选择器 具有特定属性的HTML元素样式 具有特定属性的HTML元素样式不仅仅是class和id。 注意:IE7和IE8需声明!DOCTYPE才支持属性选择器!IE6和更低的版本不支持属…

本地CDI限定词:@Any和@Default

让我们看一下CDI中的开箱即用的限定词 CDI规范声明了三个限定符– Any, Default, New Any :将其视为无所不在的限定词。 它在那里,即使不是;-) Default :顾名思义,当没有其他限定符是特定的时&#xff…

Oracle 关于事物的描述

事物在Oracle中的4种状态: commit--提交 rollback--全部回滚 savepoint name;--定义一个回滚到这里的点:例如:savepoint a; rollback to [savepoint]name--回滚到指定的点 例如 rollback to a;就回滚到a这个地方 例子: ----------…

简单CSS 总结

目录 CSS 总结 你已经学习了CSS,下一步学习什么呢? CSS 总结 本教程已向你讲解了如何创建样式表来同时控制多重页面的样式和布局。 你已经学会如何使用 CSS 来添加背景、格式化文本、以及格式化边框,并定义元素的填充和边距。 同时,你也学会了如何定…

计算机管理里边如何分盘,如何给电脑分盘【设置门径】

很多小伙伴都遇到过如何给电脑分盘的困惑吧,一些朋友看过网上零散的如何给电脑分盘的处理方法,并没有完完全全明白如何给电脑分盘是如何解决的,今天小编准备了简单的解决办法,只需要按照1:首先我们找到电脑里面的此电脑…

(九十三)蓝牙的基本使用

蓝牙在GameKit框架中实现,可以实现文件传递和游戏通信等,蓝牙的缺点是不能得到文件传输的进度,因此不宜传输大文件。 使用蓝牙的一般步骤如下: ①创建蓝牙设备拾取器,类似于图片拾取器,通过代理方法获取拾取…

电脑常识——host文件修改(屏蔽网站或解开屏蔽)

1. 什么是host文件: Hosts文件主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定。可以用文本文件打开!当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址&#xff…

面试提问vue中v-if与v-show的区别以及使用场景

目录 区别 使用场景 总结 区别 1.手段:v-if是通过控制dom节点的存在与否来控制元素的显隐;v-show是通过设置DOM元素的display样式,block为显示,none为隐藏;2.编译过程:v-if切换有一个局部编译/卸载的过程…

清华大学计算机系牛人,高考状元不靠加分靠实力

高考状元不靠加分靠实力来源:京华时报 2010-08-24英才档案 录取院校:清华大学计算机专业 毕业学校:河南省濮阳市油田第一中学 高考分数(理):678分语文117数学135理综283英语143今年初清华大学举行的有三万余名考生参加的自主招生考试中&#…

Web常见漏洞描述及修复建议

1.SQL注入 漏洞描述 Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行,导致参数中的特殊字符破坏了SQL语句原有逻辑,攻击者可以利用该漏洞执行任意SQL语句,如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。…

glassfish_具有GlassFish和一致性的高性能JPA –第3部分

glassfish在我的四部分系列的第三部分中,我将说明将Coherence与EclipseLink和GlassFish结合使用的第二种策略。 这就是通过EclipseLink使用Coherence作为二级缓存(L2)的全部内容。 一般的做法 这种方法将Coherence数据网格应用于依赖于数据库…

应广大粉丝的要求,推荐几本前端书籍

这些书籍平时会直接发送在主页的QQ技术群,有兴趣的可以加一下。 不想去培训机构,不想花大笔钱的学习,那就自学吧!接招

初中学习计算机基础,初中生计算机基础学习心得

导语:为了提高自身的计算机管理业务素质,促进信息技术教学工作的顺利开展,我于2017年3月份在中小学继续教育网上选学了《计算机应用基础》的课程学习。以下是小编为您收集整理提供到的范文,欢迎阅读参考,希望对你有所帮…

java的数据结构

本文转自互联网 1、二叉树:非线性数据结构,常被用于实现二叉查找树和二叉堆 二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T。 满二叉树 完全二叉树 平衡二叉树 2、 二叉树的遍历…

AssertJ的SoftAssertions –我们需要它们吗?

编写好的单元测试的规则之一是,它应该出于某种原因而失败,因此,单元测试应该测试一种逻辑概念。 有时很难在每个测试中拥有一个断言。 为了遵循规则,我们可能在一个测试中每个对象具有多个断言。 但是,在单个测试中存…

早上起来CSDN的PC端主页积分变成了0

没有违法,没有乱纪,这是什么鬼?我刚才百度了一下,很多大牛都有类似的经历,心里舒服多了 平台BUG还是挺多的,说不准哪天就轮到你啦,哈哈!!

Fofa搜索技巧

Fofa搜索技巧(理论加实践的整理) 题记 最近在整理以前的知识,不过最近出现职业病了,打开fofa看站点就停不下来。我把常用的fofa查询语句记录下来,方便查阅。钟馗之眼和他有区别也异曲同工。 https://fofa.so/ http://…

魔兽世界阿拉索人数最多服务器,魔兽世界8.3哪个区人多_wow8.3服务器人数统计介绍_3DM网游...

魔兽世界8.3人口最多大区是很多玩家都非常关心的一件事情,很多玩家都想在这个新版本去最多的服务器,很多玩家都想知道服务器人口,来看看魔兽世界8.3哪个区人多,wow8.3服务器人数统计介绍。8.3人口最多大区介绍魔兽世界8.3安苏大区…

如何系统的学习javaScript?赶紧看看吧

当今如果要开发现代网站或web应用(包括互联网创业),都要学会JavaScript。而面对泛滥的JavaScript在线学习资源,却是很难找到一份高效而实用的方法去学习这个“web时代的语言”。有一点需要注意,几年前我们需要知道一个真正的服务器端语言(比如PHP,Rails,Java,Python 或…

Shiro-550反序列化漏洞复现

0x01 漏洞简介Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可…