08CSRFSSRF:为什么避免了XSS,还是“被发送”了一条微博?

发布时间 2023-09-11 23:37:26作者: Adom_ye

CSRF攻击时如何产生的?

当用户在网站上进行登录认证后,网站会为其生成一个会话(session),并为该会话分配一个唯一的标识符(session ID)。这个标识符通常存储在用户的浏览器的cookie中。

当用户点击一个链接或提交一个表单时,浏览器会自动包含当前网站的cookie信息,包括会话标识符。这样,用户发起的请求就会携带有效的身份认证信息,网站会根据该信息判断请求的合法性,并执行相应的操作。

CSRF攻击中,攻击者通过诱使用户点击恶意链接或提交恶意表单,利用了浏览器自动发送cookie的特性。由于网站无法区分是用户自己发起的请求还是攻击者伪造的请求,所以会错误地认为这是用户的合法操作。

以银行转账为例子,来详细讲解一下这个攻击过程。

黑客可以构造一个如下的空白网页。我们假设这个网页的地址为 hacker.com。

图解:

通过CSRF攻击,黑客能做什么?

XSS 一样,CSRF 也可以仿冒用户去进行一些功能操作的请求,比如修改密码、转账等等,相当于绕过身份认证,进行未授权的操作。

如何进行CSRF防护

  1. 使用CSRF令牌(token):在每个表单或请求中包含一个随机生成的令牌,确保请求是合法的。服务器在验证请求时会检查令牌的有效性。
  2. 启用同源策略:确保网站只接受来自同一域名下的请求,限制跨域请求的执行。
  3. 使用验证码:要求用户在执行敏感操作之前输入验证码,增加额外的身份验证层级。
  4. 设置短期有效的会话:确保用户在一段时间后需要重新进行身份认证,减少攻击者利用已认证会话发起攻击的机会。
  5. 避免使用GET请求执行敏感操作:GET请求容易被攻击者伪造,因此应该使用POST等更安全的请求方法。

SSRFServer-Side Request Forgery服务端请求伪造

CSRF 中,黑客通过诱导用户访问某个网站,让用户的浏览器发起一个伪造的请求。那么,如果服务端发起了这个伪造的请求,又会发生什么呢?

我们知道,服务端也有代理请求的功能:用户在浏览器中输入一个 URL(比如某个图片资源),然后服务端会向这个 URL 发起请求,通过访问其他的服务端资源来完成正常的页面展示。

这个时候,只要黑客在输入中提交一个内网 URL,就能让服务端发起一个黑客定义的内网请求,从而获取到内网数据。这就是 SSRF(Server Side Request Forgery,服务端请求伪造)的原理。而服务端作为内网设备,通常具备很高的权限,所以,这个伪造的请求往往因为能绕过大部分的认证和授权机制,而产生很严重的后果。

通过ssrf攻击,黑客能做什么?

要会有这样两种动作:内网探测和文件读取。

1、内网探测:攻击者可以通过SSRF攻击访问内部网络的敏感数据,如数据库、配置文件等。

例如黑客可以构造一个恶意的请求地址:https://image.baidu.com/search/detail?objurl=127.0.0.1:3306。如果服务器返回“格式错误”,则代表服务端本地的 3306 端口可用;如果返回“找不到图片”,则代表不可用。我们知道,3306 是 MySQL 对应的端口号,因此,根据这个返回的信息,黑客就能够知道服务端本地是否开启了一个 MySQL 服务。接下来,黑客只需要不断重复这个过程,尝试不同的 IP 和端口号,就能够一点一点探测出整个内网的结构。

2、文件读取

URI 中,开头的 http:// 和 https:// 代表需要使用什么协议去进行请求。除了 HTTP 之外,URI 还有很多种协议可以选择,比如 file:// 就是直接读取本地的文件。通过输入 file:///etc/passwd,黑客就能够通过一个请求获取到本地的 passwd 文件,从而知道本地有哪些用户。经过不断地尝试,黑客就能够把整个服务器中的文件内容都给拉取出来,这其中包括密钥、源码等极度敏感的信息。

如何进行ssrf防护

为了防护SSRF攻击,可以采取以下措施:

  1. 输入验证和白名单:对用户输入的URL进行验证和过滤,确保只允许访问可信任的外部资源,并限制访问内部网络。
  2. 使用合适的权限:确保服务器和应用程序的权限设置合理,限制对内部资源的访问权限。
  3. 防火墙和网络隔离:使用防火墙和网络隔离措施,限制服务器对外部网络的访问,并阻止内部网络暴露给公共网络。
  4. 限制重定向和代理:限制服务器的重定向和代理功能,避免将恶意请求转发到内部网络。
  5. 更新和修补漏洞:及时更新和修补服务器和应用程序中的漏洞,以减少攻击者利用的机会。