安全矩阵

 找回密码
 立即注册
搜索
查看: 4749|回复: 0

Web安全:跨站请求伪造漏洞

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-11-1 08:08:33 | 显示全部楼层 |阅读模式
原文链接:Web安全:跨站请求伪造漏洞

跨站请求伪造漏洞被称为安全漏洞中“沉睡中的巨人”,由此可见,该漏洞是一个巨大的安全隐患。它与SQL注入漏洞及跨站脚本漏洞并称为安全漏洞中的“三大天王”,而其他的安全漏洞基本上都可与这“三大天王”中的任何一个配合并产生一些复合的、高技巧的攻击手法。该漏洞对攻击者来讲,常有“柳暗花明”的突破,而对于安全防御者而言,却是一件十分头疼的事。


在介绍跨站请求伪造漏洞之前,我们先来了解下Cookie与Session的一些原理。

Cookie是一个保存在用户的本地计算机上的txt文件,用来保存用户登录的信息。例如只要您登录成功一次,Cookie就会保存您的登录凭证,下次再登录的时候就不需要输入登录凭证,浏览器直接携带该Cookie通过服务器的验证,进而操作登录权限以下的内容。当然,前提是您的本地浏览器启用了Cookie功能。

Cookie的使用是不是很方便呢?答案当然是“是的”。可是,方便的同时也给用户带来了安全隐患。若攻击者盗取了用户本地计算机系统上的Cookie,那么,攻击者就可以冒充用户的身份,无须输入登录凭证即可直接使用用户的Cookie访问登录权限以下的内容。

例如:若该Cookie是用户保存在本地计算机系统里的网银登录成功以后的Cookie,那么可能就会直接危及用户的资金安全。Cookie的功能如此强大,那么Cookie中存储的究竟是什么内容呢?答案是Session ID。说起Session ID,我们就不得不说下Session了。

Session是什么呢?Session是保存在服务器的内存中、服务器的文本文件中或者是服务器的数据库(Redis及MongoDB等)中的一种与Cookie一一对应的凭证。每一个登录成功的用户都会产生一个Cookie及一个Session,它们一一对应。Cookie保存在用户的本地计算机系统里,Session却保存在服务器上。当用户的浏览器下次携带Cookie进行登录验证的时候,服务器就会寻找并判断Session中存储的信息与Cookie中存储的信息是否是“一对”,若是则通过验证,若不是则禁止访问登录权限以下的内容。

Session的功能如此强大,那么Session中存储的究竟是什么内容呢?答案是用户的身份信息、登录状态信息及用户的操作权限等一系列与用户身份、权限相关的信息。这些信息都是通用的、频繁存取的并且与用户直接或者间接相关的。有比较才有鉴别,否则Cookie提交过来的身份信息该如何鉴别真伪?如何鉴别是不是本地计算机系统的浏览器在操纵呢?试想:若攻击者没有用户的Cookie,却能任意修改Session,是不是也可以达到入侵的目的呢?答案显然是可以。只需要修改Cookie与Session为“一对”即可,因为Cookie与Session本来就是一一对应的。

事实上,跨站请求伪造漏洞的攻击就是利用Cookie与Session自身的弱点来达到入侵用户的目的的。举个例子:用户打开了网银页面,此时,时时刻刻都有Cookie与Session的一一对应验证(因为HTTP请求是无状态的请求,所以时刻需要鉴别用户的身份真伪),交易应该很安全。可是,若用户的浏览器开启了Cookie功能,这时候用户的本地计算机系统里就会产生用户登录凭证信息。此时若攻击者发一个恶意链接给用户,而该链接是针对网银页面转账操作的,攻击者意图将用户网银中的资金通过转账的方式转移到其他账户中,此时的您却并不知情,为什么呢?因为攻击者已将恶意链接伪装成了正常链接(例如领取红包等),如果用户由于好奇心或者其他原因点击了领取红包的链接,那么,用户网银中的资金就会不知不觉被窃取了。这是如何实现的呢?因为用户启用了浏览器的Cookie功能。当用户点击了攻击者精心伪装的恶意链接后,浏览器就会自动寻找并携带用户本地与网银页面有关的Cookie信息去操作网银页面。服务器只能检测到该操作是来自本地计算机系统的浏览器,却并不能判定该操作是否为网银所有者本人自愿的操作。如此一来,攻击者就窃取了用户的网银资金,严重损害了用户的个人利益,从技术上来讲就达到了跨站请求伪造漏洞的攻击目的。

如果某站存在跨站请求伪造漏洞,攻击者进入系统后单击修改密码,将旧密码150019更改为新密码150018,如图1所示。

图1  修改密码

使用Burp Suite截取数据包,却没看到有Token或者Refer的安全验证。由此可见,此处应有跨站请求伪造漏洞,如图2所示。

图2  截取修改密码请求数据包

攻击者在该请求数据包上单击鼠标右键,首先选择Engagement tools,再继续选择CSRF PoC generator以后,如图3所示。

图3  Burp Suite生成CSRF PoC

发送该PoC至服务器,则可以看到密码已修改成功,如图4及图5所示。

图4  JSON数据之修改密码成功


图5  弹窗之修改密码成功

我们这里是使用Burp Suite测试跨站请求伪造漏洞,当然,也可以使用CSRFTester来测试,二者的测试原理基本都是相似的。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 11:45 , Processed in 0.014137 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表