01
引言
C/S(Client/Server,客户机/服务器)模式,是20世纪80年代末逐步成长起来的一种软件模式,是软件系统体系结构的一种。C/S结构的关键在于功能的分布,一些功能放在前端机(即客户机)上执行,另一些功能放在后端机(即服务器)上执行。后端机通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。前端机需要安装专用的客户端软件与后端机进行通信和交互。
如今,在医疗卫生行业的等保测评过程中,经常会发现绝大部分机构仍然存在二层架构的C/S程序,即存在客户端直连数据库服务器的情况。同时,数据库配置文件大多以明文方式存储在客户端本地,存在着巨大的安全隐患。软件开发商为解决该安全性问题通常会对客户端本地数据库配置文件进行加密。但是,为了方便运维人员对配置文件进行修改,在软件程序目录中留下了数据库文件加解密工具,从而留下数据库配置信息泄露等安全隐患。
本文通过搭建实验环境对二层架构C/S模式的数据库加解密工具进行渗透,绕过其访问控制和身份鉴别策略,获取数据库配置信息,并通过配置信息最终获取数据库服务器的系统权限。
02
测试过程
本文模拟某机构使用二层架构的C/S程序环境,数据库文件保存在本地,通过本地程序[SysConfig.exe]对数据库配置文件进行加解密,如下图所示。该程序在进入时通过静态口令(密码)进行身份验证,通过验证后进入加解密功能模块可以直接使用加密功能,解密功能仍需再次进行口令验证,程序使用对称算法对数据库配置文件进行加解密,并通过得到的数据库信息进一步获取数据库的系统权限。

终端操作系统环境:Windows 10专业版
数据库版本:SQL Server
使用工具:x64_dbg、DataGrip
其中,x64_dbg是一款Windows系统下非常优秀的64位调试器,与目前热门的“OllyDbg”十分相似,软件具有简洁的界面以及强大的功能,提供了类似C的表达式解析器、全功能的DLL和EXE文件调试、IDA类似的侧边栏与跳跃箭头、动态识别模块和串、快反汇编、可调试的脚本语言自动化等多项实用功能。
DataGrip是一个多引擎的数据库管理环境程序,支持MySQL、PostgreSQL、SQL Server和Oracle,Sybase、DB2、SQLite、HyperSQL、Apache Derby和H2数据库。旨在为用户提供完整的功能,如数据库对象、智能文字编辑器、运行查询、处理文件、资料编辑器、导入/导出选项、代码生成、代码完成、代码见解、重构和查找用法、导航、自定义IDE等多个方面。
终端本地保存的数据库配置文件信息如下:

破解程序的流程主要分为以下5个步骤:
1、打开SysConfig.exe,弹出密码输入框。

输入任意密码后会返回密码错误弹窗。

2、对SysConfig.exe进行动态调试。
1)得知输入错误密码后会产生错误弹窗“错误的密码”,对该字符串进行搜索。

2)通过搜索,得到00457D04和00457DD1两个地址,查看这两个地址的汇编代码。


3)通过上图中的汇编代码可以确定:程序通过上一行的[jne]进行密码校验,如输入错误的密码则弹窗并退出程序,输入的密码正确则跳过弹窗的部分。因此本实验采用将jne逻辑判断跳转修改为强制跳转的方式进行绕过,将jne改为jmp以实现强制跳转(jne和jmp均为汇编语言中的跳转指令,jne的效果为,当zf标志位=0时,跳转至标号处执行,可以简单理解为高级语言中的if语句,jmp为无条件跳转可以简单理解为高级语言中的goto语句)。


3、修改完成后将程序重新导出为SystemConfig_a.exe可执行文件。
4、双击直接运行SystemConfig_a.exe可执行文件,并输入任意密码后可进入程序界面。

5、对数据库配置文件中的数据库ip信息进行解密(解密时弹出的弹窗也可输入任意密码),结果如下图所示,最终成功得到数据库服务器的ip地址、账户和密码。



至此,通过以上步骤实现了程序的破解,下面将通过获取的用户名密码登录数据库,进一步获取数据库的系统权限。
1、使用DataGrip连接数据库,成功连接数据库,可以查看到连接的数据库JZCIS。

2、新建查询,尝试使用xp_cmdshell执行命令,显示xp_cmdshell已经被安全策略关闭,无法执行命令。

3、使用exec sp_configure语句开启shell功能,首先开启show advanced options功能(若不开启则无法对xp_cmdshell进行修改)。

4、再次使用xp_cmdshell执行命令,成功执行命令ipconfig并获取回显ip信息。通过下图获取的ip信息与通过渗透测试获取的ip信息完全一样,最终证明了实验和漏洞的真实性。

03
结论
通过上述测试过程可以看出,对数据库配置文件进行加密的方式无法完全解决二层架构的C/S程序缺陷所导致的数据库配置信息泄露、获取数据库权限等安全隐患。
开发者应当在程序部署完成后移除相关的数据库加解密程序,规范运维流程,同时对数据库的权限进行分离,实行最小权限原则。SQL Server中的服务器角色权限如下表所示:

在实际生产环境中,业务系统所使用的SQL Server账号建议为public服务器角色,在数据库权限中按实际业务需求分配,实现最小权限原则。同时使用加壳、混淆等手段加固程序,提高软件生命周期内被破解的难度。
本文在此仅起到抛砖引玉的作用,希望能够引起医疗等重点行业的重视,未雨绸缪,防患未然。

上海市计算机软件测评重点实验室(简称SSTL),由上海市科委批准成立于1997年,是全国最早开展信息系统质量与安全测评的第三方专业机构之一,隶属于上海计算机软件技术开发中心。





