厚客户端渗透介绍(一):GUI测试
导语:厚客户端BetaFast渗透介绍
BetaFast是一款集合了诸多漏洞的厚客户端,对于我们练习安全技术是很不错的。
故事起源
几年前,一个NetSPI安全顾问进入了我们的地下室,想要从仓库中找一些无指手套。地下室的过道几乎没有灯光,四处散落着一些杂物,突然一台设备引起了他的注意力。在一堆乱七八糟的满是灰尘的盒子和年久失修的转椅后面,那台设备上居然还有一个终端在闪烁着。
NetSPI一支最优秀的团队觉得很有意思,于是决定开始研究它。这台设备是一家叫BetaFast的公司创建的,这家公司早就已经倒闭了。这台设备的唯一目的就是分发BetaMax磁带,这种磁带已经是1975年的老古董了。团队成员们很好奇,这台设备休眠了多久?运行了多久?为什么还在运行?于是这勾起了他们的兴趣。
发布
于是这些安全专家们就开始孜孜不倦的逆向这台设备(一个电影分发展台),它的软件是一种专有语言编写的,当然了,毫无疑问,漏洞百出。
这个展台的前端和后端都是用C#写的。在接下来的几周,我们将会写一个系列博客来概述我们在这个软件上发现的漏洞。代码可以在我们的github主页上找到。另外我们也找到了原始的BetaFast的网站,已经添加到我们的github页面上了,http://www.betafast.net/。
漏洞列表
我们已经发布了两款漏洞应用程序。一个是BetaFast,betamax展台应用,采用三层架构编写,另一个是Beta Bank,一个专为精英设计的高级金融应用程序,采用两层架构编写。
BetaFast包含但不限于以下漏洞:
· 硬编码加密数据
· 硬编码加密密码
· sql注入
· 认证绕过
· 缺少服务端输入验证
· 注册表存储明文密码
· 文件中存储明文敏感数据
· 弱文件上传控制
· 弱输入验证
· 无代码混淆
Beta Bank编写时包含了以上这些漏洞,同时也增加了一些额外的安全问题:
· 未加密的数据库连接
· 硬编码连接字符串
· 弱口令存储
· 自定义加密实现
已发布
1. The GUI
2. The Network
Youtube视频介绍:https://youtu.be/joVF53aOXX0
厚客户端渗透测试介绍是一个系列博客文章,会讲到我们在执行厚客户端安全测试时用到的工具和方法。与该系列文章配套,我们发布了两款包含众多漏洞的应用,一个是BetaFast,Betamax电影展台服务,一个是Beta Bank,一个金融应用。本系列中的很多案例都来自于这两个应用,大家可以从BetaFast Github Repo这个github库中下载,关于这两个应用的介绍,你们可以参考第一篇文章。
概述
在NetSPI平台,我们碰到的厚客户端都是用C#写的。这些应用一般都有两个GUI平台,一个是windows Forms应用,一个是WPF应用。
windows Forms应用
windows Forms在2002年非常盛行,现在2020,也还有人在用。form(窗体)是由很多控件组成的,控件是典型的windows对象,比如文本框,标签,按钮等。每个对象都有自己的属性,方法和事件。
下图就是一个windows Forms登录框:
这个应用已经存储了管理员的凭证,接下来我们就来窃取这个凭证。
怎么搞的?别慌,网上肯定是有工具的。有了这些工具,我们就可以查看和修改控件。第一款工具是WinSpy。只要定位到控件位置,就能查看星号对应的明文值了,比如密码这里。
另一款类似的工具是windows Detective,也是可以定位windows Forms对象的,选择一个控件,就会在桌面窗口中高亮显示,你可以查看它的属性,包括密码明文:
接下来,我们来看另一个windows Forms案例,这个应用在客户端验证用户身份,还有一个标识用户角色的灰色文本框,无法更改:
但是通过WinSpy和windows Detective工具,我们可以将属性值设置为Admin。
当然了,我们也可以启用这个属性值,如图:
一些应用程序为了防止SQL注入攻击和其他攻击,可能会限制输入长度和输入字符类型。但是,依赖客户端控件来实现根本没用。
WPF应用
WPF应用比windows Forms稍加复杂,因此自定义设计功能也更多一些。对于这个平台,我们也需要基于WPF的工具,如Snoop。
首先以普通用户身份登录到BetaFast,可以看到有4个主菜单,首页,购物车,设置,退出。
运行snoop,然后选择正在运行的BetaFast进程,就可以对它进行调试,菜单树可以展开,这里就能看到AdminVisiability的属性,它本来是设置为隐藏的。
将这个属性值设置为“显示”,就能看到只有管理员才能查看的功能菜单了,如图:
就这个属性本身来说,其实并不算是一个漏洞,只是没有做好校验。在普通用户无法访问的受控页面中的所有功能,都应该进行服务端校验。然而,大多数情况却并非如此。如下,一个普通用户可以创建管理员账号,并查看数据库中的所有账户。
付款页面的总金额数也是在客户端校验:
这危害就很大了,我们可以使用snoop来修改金额来享受折扣价,甚至把金额改成负数,这样还能额外收获一笔钱:
总结
在厚客户端中修改GUI元素是非常简单的,特别是还有一些非常好用的工具。这些漏洞的修复也比较简单,措施如下:
· 在服务器端进行认证和输入验证
· 不要在客户端的GUI设计元素上存储敏感数据
我会在我们的BetaFast github repo库上添加另一个链接。希望大家可以多尝试几个案例。
敬请期待我们厚客户端渗透介绍的下一篇文章。
发表评论