最后更新于2023年12月13日(星期三)23:30:42 GMT

跨站点请求伪造攻击 欺骗web应用程序用户提交通过其会话执行操作的请求, 例如向某人发送一个钓鱼链接,该链接会自动提交一个表单,将新用户添加到他们的web应用程序中.

解决CSRF攻击的一种方法是实现反CSRF令牌, 比如一个包含随机值的隐藏表单字段,由服务器进行验证.

在测试一个web应用程序时, 我们发现反csrf令牌是用户登录时在浏览器中设置的会话cookie. 这很有希望,因为浏览器会将它添加到我们的请求中. 最大的问题是,匹配价值是否会很困难. 然而, 我们发现服务器接受任何存在的反csrf cookie值,并且长度正确. So, 而web应用程序有一个反csrf令牌, 该令牌实际上并没有被服务器以任何有用的方式验证. 这个值并不重要,所以我们可以提供自己的值(只要它是正确的静态长度)。.

不要错过任何一个博客

获取有关安全的最新故事、专业知识和新闻.


回顾我们的管理员级用户的一些功能, 我们选择了为目标用户提交密码重置的请求. 在创建我们自己的页面后,将提交一个测试帐户的密码重置请求, 我们将其加载到admin用户的浏览器中, 它成功地触发了密码重置.

当我们的测试帐户收到密码重置邮件时,事情变得更有趣了. web应用程序为每个客户组织使用子域, 邮件中的子域名已经被替换为我们CSRF页面中使用的主机名. web应用程序基于“Referer”标题的URL, 所以我们能够操纵发送给用户的URL.

我们制作了一个 网络钓鱼 页面看起来像web应用程序的密码重置页面, 设置它以便它会发送新密码给目标web应用并为用户正确设置它. 这种方式, 我们能够使用CSRF攻击来为我们的目标用户重置密码, 然后收集新密码, 同时通过合法地将新密码发送给真正的应用程序来保持妥协的安静.

这里链接操作的一个大问题是允许根据用户输入操作链接url, 比如"Referer"头. 但就CSRF的攻击而言, 这是一个很好的例子,不仅要求您的web应用程序提供反csrf令牌, 但要测试他们,确保他们确实在做他们应该做的事情.

本系列更多内容: