背景
欢迎来到本系列的第三部分,在本系列的第一部分,我们已经建立了测试环境,讨论了信息收集的方法。在本系列的第二部分,我们讨论了厚客户端的流量分析。今天我们讨论的是厚客户端应用程序数据存储问题。
注册表内的敏感数据
注册表内有敏感数据是出现在Windows桌面应用程序最常见的一个漏洞。开发人员通常使用注册表作为他们的客户端数据存储的位置。
让我们来分析DVTA,看看它有没有任何敏感数据存储在注册表中。
regshot是一个流行的工具,用于分析注册表的修改。该工具通过对比注册表在程序运行前后的差异找出注册表被修改的位置。
下载后运行regshot,点击1stshot,保存DVTA启动前注册表的状态。选择HTML作为日志输出的格式。
第一份注册表快照保存之后,运行DVTA并登陆。使用的凭证是rebecca:rebecca。
登陆成功之后,我们看到如下界面。
现在点击2nd shot保存DVTA运行后注册表的状态。
在第二个快照保存完毕之后,我们就可以开始对比了,点击Compare按钮。
程序会自动比较并输出HTML文件。
我们发现了点有趣的东西,注册表内添加了几个项,清楚的记录了用户名,密码,邮箱,登陆状态。我们打开注册表编辑器,导航到HKEY_CURRENT_USER|dvta,如下图。
注意:本系列的第1部分中所示,我们还可以使用Process Monitor确定应用程序访问的注册表条目。 得到数据库凭证
二层架构中,客户端使用预先存储好的数据库凭证来连接数据库。凭证存储的方式有两种类型。
1、 明文连接字符串是硬编码的,连接字符串可以在内存中看到。 2、 加密后的连接字符串是硬编码的,可以在内存中看到未加密的字符串。
DVTA是属于第二类,现在我们先查看内存读取未加密的字符串,会在后面的文章中讨论如何手动解密字符串。 从内存中获取连接字符串
我们使用一个叫做Process Hacker的工具,安装好后运行Process Hacker,可以看到正在运行的DVTA。
选中DVTA.exe,然后右键选择Properties。
会弹出一个窗口,切换到Memory选项卡,会显示出内存中跟该程序有关的数据。
点击Strings按钮时,我们可以选择要显示的字符串的格式,如下图。
我们先保持默认,点击ok,然后会显示出内存中与应用程序相关的字符串。我们可以点击filter来过滤结果。
在本文的第一部分中,我们已经设置了数据库的ip为192.168.56.110。我们可以用这个ip作为关键词。
我们可以看到有包含这个ip的所有字符串,其中就有我们想要的数据库连接字符串。
这就是我们得到的数据库凭证:
数据库名:DVTA 用户名:sa 密码:p@ssw0rd
我们看到应用程序连接到数据库的是“sa”,这是一个特权帐户。这是我们应该注意另一个重要的安全问题:账户权限最小化。
我们用这个凭证连接到数据库看看。
我们可以看到数据库DVTA下面的两张表。
点击dbo.users,我们看到了所有的用户名和他们的密码。
硬编码的凭证
顾名思义,就是在程序的代码里面写死了连接字符串。我们可以在github上的DVTA项目中的代码里面看到用于连接ftp的账号和密码。
如果我们没有源代码,我们可以使用.NET的反编译工具来查看。我们会在后续的文章中探讨这一做法。我们使用strings工具来查看可执行文件里面的字符串。
结论
在本文中,我们已经学会了如何使用DVTA应用练习各种数据存储问题,然后我们看到了如何分析内存敏感的数据,其次是硬编码的问题。在下一篇文章中,我们将讨论输入验证相关的漏洞。 注:本文参考来源于infosecinstitute
|