厚客户端渗透介绍(三):文件系统和注册表测试
导语:文件系统和注册表测试
厚客户端渗透测试介绍是一个系列博客文章,上一篇我们讲到了网络方面的测试,这一章我们来看看文件系统和注册表方面的测试。
示例应用下载地址:BetaFast Github repo。
已发布文章:
· GUI测试
· 网络测试
信息泄露
在很多应用程序中,开发者总是有意或无意的把敏感信息存储到文件系统或者注册表中,包括社保账号,信用卡号,数据库连接信息,凭证等。开发人员可以加密数据来增强安全性,但是可能会采用不安全或者自定义的加密方式。如果需要存储加密数据,密钥必须要单独存放,如安全地存储在数据库中。
测试
测试文件系统和注册表的信息泄露非常简单,只需要查找应用程序使用的文件和注册表键,确认是否有敏感信息。但是一般的应用程序对文件和注册表键进行多层调用,找起来也没有那么容易。因此把重点放在应用程序可能读写敏感数据的操作的地方是非常关键的。
安装过程
如果能够测试安装过程,这是一个很好的入口,可以通过安装过程来好好查找写入文件系统和注册表键的操作。安装过程是数据写入的最佳时机,安装好之后,应用程序会读取这些数据。应用程序连接数据库了吗?也许安装过程中将数据库连接字串写入到某个键值中了,又或者是在文件中存储了默认的管理员凭证。
应用程序
在应用程序运行过程中,需要识别并关注那些创建或修改明感信息的功能区。通常包括初始化数据库连接和登录表单。大多数应用程序都有一个“RememberMe”功能,这可能存储了一些信息。所以这个地方我们要搞明白它是如何存储的,并如何获取到它的值。在应用程序的认证部分,多去查找专门处理敏感信息的地方。
工具和案例
Sysinternals工具包里包含很多测试windows程序的实用工具。我这里将重点介绍两款工具,AccessEnum和Process Monitor,这两款工具室微软Azure CTO写的。本次案例中,我会重点介绍BetaFast这个存在漏洞的应用程序。
配置
Process Monitor会显示很多信息,比你想象的要多,第一步就是设置过滤器。Process Monitor可以设置过滤的条件有很多,其中有一个就是应用程序的PID,所以,可以先在任务管理器中获取你要测试的应用程序的PID。
在这个案例中,我还会对Event class(事件类型)进行过滤。
注册表
打开BetaFast时,就是一个带有Remember Me功能的登录表单。
开启Process Monitor进行监控,登录认证的时候,勾选“Remember Me”来记录凭证。
可以观察到执行了两个RegSetValue操作。一个是存储用户名的,一个是存储密码的。再看看图片底部我用红框框出来的地方,其实产生了非常多的事件,但是因为设置了过滤器,很多事件都被忽略了。
注册表路径可能不像凭证/密码那么明显,所以找特殊操作比找路径更加重要。
再介绍一个工具,Registry Editor,这个工具可以显示你上一步操作的路径,并且会把凭证明文显示出来:
AccessEnum这个工具可以让我们看到谁有权限读取和写入注册表和目录。如图,凭证的注册表只有管理员和NT AUTHORITY\RESTRICTED,可以读取。因为是存储在HKEY_CURRENT_USER注册表中,因此只有高权限账户和当前用户才能看到凭证,但是还是有可能泄露。
文件系统
BetaFast还有一个支付详情表单,Process Monitor可以分析这个LoadPaymentDetails按钮尝试去加载什么。
可以看到应用程序尝试查找C盘下 C:\ProgramData\BetaFast\PaymentDetails,文件名是当前用户名的文件blogger.txt
下一步,提交表单,勾选Save Payment Details,然后观察文件系统发生了什么。
不出所料,Load Payment Details所要加载的文件已经保存了。
而且这个文件里面包含了明文的信用卡信息。
然后,我们通过AccessEnum看到,任何人都可以读取这个文件。
当然,这也并不奇怪,因为ProgramData并不是属于特定用户的,不过AppData目录是属于特定用户的。不过在AppData中存储敏感信息也是一个问题,我们也会写到报告中,但至少不是系统中的任何人都可以读取其中的文件。
DLL劫持
这个主题也可能是一个独立的博客系列,我们12年的时候就写过一篇文章。因为它也是跟文件系统相关的,所以这里我们简单回顾一下:
1. 应用程序会搜索要加载的DLL文件。
2. 一些应用程序可能不会指定完整的全限定路径。
3. windows会根据预先定义的目录顺序来搜搜dll。
4. 使用Process Monitor,攻击者可以定位到这个dll,因为程序会尝试打开一个无法找到的dll文件。
5. 然后攻击者就可以在程序搜索的其中一个目录中放入恶意的dll文件,造成程序执行恶意代码。
DLL劫持,问题就出在第5步上。这个问题归根结底还是配置问题。微软在这篇文章中介绍了几种不同的攻击场景以及它们的严重性。还有一篇文章,介绍了如何防御并识别这些攻击。想要阅读更多关于攻击场景的内容,可以参考以下两篇文章,dll劫持与Ghidra和NetMan DLL劫持。
这里我想表达的是文件系统漏洞有时候不仅仅来自于数据写入的问题,也有可能是数据读取的问题。
发表评论