CSRF(Cross-Site Request Forgery,跨站请求伪造)和SSRF(Server-Side Request Forgery,服务器端请求伪造)都是Web应用程序中的安全漏洞,它们的主要区别在于攻击的发起方和攻击的目标。
CSRF是指攻击者利用受害者的身份认证信息(如Cookie或会话),诱骗受害者在不知情的情况下执行恶意操作。攻击者通常会构造一个包含恶意请求的链接或表单,当受害者访问该链接或提交表单时,浏览器会自动带上受害者的身份认证信息,从而使服务器误以为是受害者本人发起的请求。CSRF攻击通常需要受害者已经登录到目标网站,并且访问了攻击者构造的恶意链接或表单。即比如A与B,B制作了一个链接,A点击并登录了。这时A角度就是自己已经登录上去了,在B的角度而言自己已经将自己想用A账号干的事通过这个链接绑定好了的,只要A一登录点击,则执行自己想要的操作,这就是在A不知情的情况下B执行了想要用A的身份能执行的操作。可以理解为B通过提前写入操作制作成链接,并且A点击就执行,可以认为在A的账号登录期间的A账号的隐藏行为,而A并不知道。
SSRF漏洞是指攻击者利用服务器端的功能,构造恶意请求,让服务器代表攻击者发起请求。攻击者可以利用SSRF漏洞来攻击到内部系统,因为服务器请求天然发生在系统内部。SSRF形成的原因大都是由于服务端提供了从其他服务端应用获取数据的功能,但又没有对目标地址做校验与限制。攻击者可以通过修改请求参数以指定任意URL,例如访问内部系统或其他外部系统。即SSRF漏洞可以帮助攻击者去探测这个服务器的内网情况与外网情况,前提是这个情况范围只在这个服务器能访问的范围。
对于他们的异同点有以下四种:
- 发起方:CSRF漏洞是由攻击者构造恶意链接或表单,诱骗受害者执行;SSRF漏洞是由攻击者构造恶意请求,让服务器代表攻击者发起。
- 目标:CSRF漏洞的目标是受害者已经登录的网站;SSRF漏洞的目标是服务器可以访问的内部或外部系统。
- 利用方式:CSRF漏洞通常需要受害者已经登录到目标网站,并且访问了攻击者构造的恶意链接或表单;SSRF漏洞则是利用服务器端的功能,构造恶意请求,让服务器代表攻击者发起。
- 防御措施:CSRF漏洞的防御措施包括使用CSRF令牌、检查Referer头部等;SSRF漏洞的防御措施包括严格校验用户输入的URL、限制Web应用程序的网络访问权限等。
一般而言,前者好防御,后者防御的难度稍大以下是CSRF与SSRF的攻击方式与防御方法:
CSRF攻击方式有以下几种但不限于:
1、GET请求攻击:攻击者通过构造一个包含恶意请求的链接,诱使用户点击,从而在用户不知情的情况下执行恶意操作。例如,攻击者可以构造一个链接,该链接包含一个GET请求,请求中包含了修改用户密码的参数。当用户点击该链接时,浏览器会自动发送这个请求,从而修改用户的密码。
2、POST请求攻击:攻击者通过构造一个包含恶意请求的表单,诱使用户提交,从而在用户不知情的情况下执行恶意操作。例如,攻击者可以构造一个表单,该表单包含一个POST请求,请求中包含了修改用户密码的参数。当用户提交该表单时,浏览器会自动发送这个请求,从而修改用户的密码。
3、链接攻击:攻击者通过构造一个包含恶意请求的链接,诱使用户点击,从而在用户不知情的情况下执行恶意操作。例如,攻击者可以构造一个链接,该链接包含一个GET请求,请求中包含了修改用户密码的参数。当用户点击该链接时,浏览器会自动发送这个请求,从而修改用户的密码。
CSRF漏洞的防御方法:
1、使用POST请求:使用POST请求可以防止GET请求被滥用,因为POST请求不会被浏览器缓存,也不会被浏览器自动发送。
2、验证HTTP Referer字段:HTTP Referer字段记录了请求的来源,如果请求的来源不是预期的网站,则可以认为是CSRF攻击。但是,这种方法并不可靠,因为攻击者可以伪造HTTP Referer字段。
3、使用CSRF Token:在每个请求中加入一个随机生成的Token,并在服务器端验证Token的有效性。这样,即使攻击者能够伪造请求,也无法获取有效的Token来通过验证。
使用双重提交Cookie:在每个请求中加入一个随机生成的Cookie,并在服务器端验证Cookie的有效性。这样,即使攻击者能够伪造请求,也无法获取有效的Cookie来通过验证。
4、使用CSP(内容安全策略):CSP可以限制页面加载的资源,从而防止攻击者注入恶意脚本。
使用HTTP Only Cookie:HTTP Only Cookie可以防止JavaScript访问Cookie,从而防止攻击者通过JavaScript获取Cookie。
5、使用SameSite Cookie:SameSite Cookie可以限制Cookie的使用范围,从而防止攻击者通过跨站请求获取Cookie。
SSRF漏洞可以被利用进行多种攻击,包括但不限于:
1、端口扫描与内网探测:攻击者可以扫描服务器所在的内网或本地端口,获取服务的banner信息,从而窥探网络结构。
2、攻击运行在内网或本地的应用程序:通过SSRF,攻击者可能对内网或本地机器进行攻击,获取shell等。
3、指纹识别与默认文件访问:通过对内网web应用进行指纹识别,攻击者可以访问应用存在的默认文件,进一步获取敏感信息。
4、攻击内外网的web应用:利用SSRF漏洞,攻击者可以针对内外网的web应用发起攻击,尤其是那些通过GET参数即可触发的漏洞。
5、本地文件读取:利用file协议等,攻击者可以读取服务器上的本地文件,泄露敏感数据。
6、DOS攻击:攻击者通过请求大文件或保持连接不断,对目标服务器实施DOS攻击,耗尽其资源。
SSRF漏洞的防御方法:
为了防御SSRF漏洞,可以采取以下措施:
1、禁用不必要的协议:禁用不需要的协议,如file://, gopher://, dict://等,只允许HTTP和HTTPS请求。
2、统一错误信息:防止根据错误信息判断端口状态。
3、禁止302跳转:或每次跳转都检查新的Host是否是内网IP,直到抵达最后的网址。
4、限制请求:在服务器端设置限制,禁止访问内部网络中的资源。
5、使用白名单:实现一个URL白名单,只允许应用程序访问预定义的、安全的URL。
6、监控和日志记录:记录所有出站请求并监控异常模式,以便及时发现和响应潜在的SSRF攻击。
一般防御是将几种防御方法结合使用,确保达到最佳效果。