Csrf与Ssrf的认知
本文最后更新于 2024年1月15日 09:19
CSRF(跨站请求伪造)
基本原理
跨站请求伪造(Cross-site request forgery,CSRF),它强制终端用户在当前对其进行身份
验证后的Web应用程序上执行非本意的操作。CSRF攻击的着重点在伪造更改状态的请求,而不是盗取数据,因为攻击者无法查看对伪造请求的响应。
借助社工的一些帮助(例例如通过电子邮件或聊天发送链接),攻击者可以诱骗用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF攻击可以强制用户执行状态更改的请求,例如转移资金。如果受害者是管理帐户,CSRF可能会危及整个Web应用程序。
流程图
其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
CSRF攻击攻击原理及过程如下:
- 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A; - 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
4 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
两个条件:
C 用户访问站点 A 并产生了 cookie
C 用户没有退出 A 同时访问了 B
CSRF漏洞危害
攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等等
造成的问题包括:个人隐私泄露以及财产安全。
还可以发送钓鱼邮件、盗用用户账号、网银转账、使用他人账号购买商品等,具体的危害跟存在漏洞的具体业务系统有关
- CSRF攻击可以导致未经授权的操作,这可能损害用户的隐私、财产或安全。
- 攻击者可以以受害者的名义执行转账、更改密码、删除帐户等操作。
- CSRF攻击还可以用于执行恶意操作,如在受害者不知情的情况下发布恶意内容或更改设置。
CSRF防御手段
- 同源策略:浏览器的同源策略限制了网页中的跨域请求。这意味着只有在同一域名下的网站才能访问彼此的信息。因此,重要操作(如更改密码或执行敏感操作)应该需要进行身份验证并要求用户手动输入凭据。
- CSRF令牌:在每个请求中包括一个CSRF令牌,该令牌是服务器生成的,与用户会话相关。攻击者无法获得这个令牌,因此无法伪造请求。服务器在接收到请求时会验证CSRF令牌的有效性。
- 限制敏感操作:对于敏感操作,要求用户再次输入密码或进行其他形式的身份验证,以确保请求是合法的。
- HTTP头部设置:使用适当的HTTP头部设置,如SameSite Cookie属性,可以防止跨站点请求伪造攻击。
- 定期审计:定期审查代码和应用程序以查找和修复潜在的CSRF漏洞。
SSRF(服务器端请求伪造)
基本原理
SSRF (Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况下,SSRF攻击的目标是外网无法访问的内网系统,也正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔绝的内部系统。也就是说可以利用一个网络请求的服务,当作跳板进行攻击。
攻击者利用了可访问Web服务器(A)的特定功能 构造恶意payload;攻击者在访问A时,利用A的特定功能构造特殊payload,由A发起对内部网络中系统B(内网隔离,外部不可访问)的请求,从而获取敏感信息。此时A被作为中间人(跳板)进行利用。
SSRF漏洞的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。 例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片,下载等,利用的就是服务端请求伪造,SSRF利用存在缺陷的WEB应用作为代理 攻击远程 和 本地的服务器。
攻击方式
- 当攻击者想要访问服务器B上的服务,但是由于存在防火墙或者服务器B是属于内网主机等原因导致攻击者无法直接访问。如果服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向主机B发起请求,达到攻击内网的目的。
示例:
漏洞场景:某网站有一个在线加载功能可以把指定的远程文章加载到本地,链接如下:
1 |
|
假如系统没有对url参数进行任何的检查,就可以构造其他的请求,例如:
1 |
|
漏洞危害
1、端口扫描
2、内网 Web 应用指纹识别
3、攻击内网 Web 应用
4、利用file、gopher、dict协议读取本地文件、执行命令等
5、DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
6、无视网站 CDN
漏洞利用
常见利用协议file://
dict://
gopher://
端口扫描
当访问未开放端口,脚本会显示空白或者报错。提交参数?url=dict://127.0.0.1:1234
提交参数?url=dict://127.0.0.1:3306
读取本地文件
?url=file://c:\windows\system32\drivers\etc\hosts
内网web应用指纹识别
识别内网应用使用的框架,平台,模块以及cms 可以为后续的渗透测试提供很多帮助。大多数web 应用框架都有一些独特的文件和目录。通过这些文件可以识别出应用的类型,甚至详细的版本。根据这些信息就可以针对性的搜集漏洞进行攻击。比如可以通过访问下列列文件来判断phpMyAdmin是否安装以及详细版本。?url=http://localhost/phpmyadmin/README
漏洞挖掘
从远程服务器请求资源(头像允许使用远程地址)
转码服务
在线翻译
调用url的功能
利用bp抓包,产看数据包中存在的诸如url=www.xxx.com的位置
漏洞防御
- 限制协议
仅允许http和https请求。 - 限制IP
避免应用被用来获取内网数据,攻击内网。 - 限制端口
限制请求的端口为http常用的端口,比如,80,443,8080,8090。 - 过滤返回信息
验证远程服务器对请求的响应是比较简单的方法。 - 统一错误信息
避免用户可以根据错误信息来判断远端服务器的端口状态
ssrf和csrf之间的区别
SSRF(Server-Side Request Forgery,服务器端请求伪造)和CSRF(Cross-Site Request Forgery,跨站请求伪造)是两种常见的网络安全攻击,它们之间有一些重要的区别:
SSRF(Server-Side Request Forgery,服务器端请求伪造):
- 攻击目标: SSRF 的目标是利用应用程序的漏洞,使其发起针对内部系统或其他外部服务的恶意请求。
- 攻击原理: 攻击者通过操纵用户输入,向服务器发起伪造的请求,使服务器在其本地网络或内部系统中执行请求,例如访问内部文件、执行命令等。
- 利用方式: SSRF 攻击通常利用目标应用程序的功能,例如图片上传、URL 解析等,以实现对内部资源的访问。
- 防御措施: 防御 SSRF 的方法包括对用户输入进行严格的验证和过滤、限制服务器访问权限、使用白名单控制等。
CSRF(Cross-Site Request Forgery,跨站请求伪造):
- 攻击目标: CSRF 的目标是利用用户在已经认证的会话中执行未经用户授权的操作。
- 攻击原理: 攻击者诱导受害者在其已经登录的网站上访问恶意网页或点击恶意链接,利用受害者已经建立的身份验证会话向目标网站发送恶意请求。
- 利用方式: CSRF 攻击通常利用受害者浏览器中的会话凭证(例如 Cookie),向目标网站发送伪造的请求,执行恶意操作,如修改用户资料、发表评论等。
- 防御措施: 防御 CSRF 的方法包括使用 CSRF Token、同源策略、检查 Referer 头等。