带有实际示例的安全性总是更加有趣。
作为渗透测试人员,我喜欢基于Rapid开发框架的项目,例如Ruby-on-Rails,Django,AdonisJs,Express等。 由于业务模型会立即跳转到包括客户端浏览器在内的所有级别,因此它们使您可以非常快速地构建系统。 通常将模型(数据库中业务对象的模型)和ViewModel(与客户进行交互的合同)这样的框架组合在一起,以避免不必要地从Model转移到ViewModel,反之亦然,REST服务会自动生成。 从开发的角度来看,您可以简单地在服务器上开发业务模型,然后立即在客户端上使用它,这无疑会提高开发速度。
再一次,我并不是说上述框架不好,或者它们有问题,它们具有适当保护的手段和工具,只是开发人员对它们的错误最多。 在一个ASP.NET MVC项目中也可以看到这一点,在该项目中,开发人员通过公开模型而不是ViewModels来制造相同的漏洞。
漏洞:由于来自客户端的传入模型的字段验证不力,您可以注入功能未提供但在业务模型中的字段。 例如,有一种方法允许您仅更改用户名,并返回用户配置文件对象。 如果我复制返回的对象,更改其中的所有属性,然后再次将其发送到输入,该怎么办? 事实证明,您可以绕过标准工作流程来更改对象的任何属性(密码,角色)。
在我们经过安全性测试的各种项目中,我将给出真实的例子。 所有这些问题区域均已修复,并且屏幕快照中的所有其他信息均被隐藏。
系统1在此系统上,只能在配置文件中更改用户名。 但是用另一个电子邮件代替,我可以更改用户的登录名。 而且,现在邀请其他用户的邀请也离开了。
系统2在此示例中,一个简单的用户设法通过添加角色字段来将角色更改为管理员,并且通过url / admin只需打开包含所有事务,用户,报告等的系统管理面板即可。
系统3在此系统中,可以无限期续订免费订阅。 显然,标准方法要求付款。

根据工作空间的品牌,输入方法似乎只会采用选定的颜色,然后返回整个工作空间的对象,包括StripeCustomer对象的完整转储,该对象反映了付款。 不仅可以插入字段,还可以插入巨大的子对象StripeCustomer,因此,一次付款或从另一个用户处捕获该对象,然后将其复制到其所有工作空间即可。
系统4最后。 该系统存在相同的问题:可以绕过发明的工作流程更改密码和密码。 长期缺乏针对CSRF的保护和身份验证cookie的存储增加了此漏洞进入天堂的风险。 恶意用户可以在受欢迎的资源上放置脚本,以请求更改此系统当前用户的密码,所有打开此资源的用户都将失去对系统的访问权限。

将服务器代码隐藏在该字段的元数据中,这样就可以不将该字段返回给响应中的客户端,但是该字段在输入数据中没有问题地进行了处理。
消息:- 永远不要信任用户输入的数据,他们可以做任何事情
- 注意没有单独的ViewModel-s层的系统,并直接使用基本模型
- 详细探讨您的框架提供的保护。
以上信息仅出于教育和教育目的而提供,无需进行系统设置。
CISSP渗透测试仪Denis Koloshko