web渗透CSRF漏洞详细讲解

Posted 摆烂阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web渗透CSRF漏洞详细讲解相关的知识,希望对你有一定的参考价值。

💕💕💕 博主昵称:摆烂阳💕💕💕

🥰博主主页链接https://blog.csdn.net/qinshuoyang1?type=blog 👩‍💻
博主研究方向:web渗透测试 📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导

CSRF

一、认识CSRF漏洞

1、什么是CSRF

CSRF(Cross-Site Request Forgery),也被称为 one-click attack 或者 session riding,即跨站请求伪造攻击。

2、CSRF漏洞的原理

1、用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

3、CSRF漏洞的危害

CSRF是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。可以简单的理解为:攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。攻击者只要借助少许的社会工程学的诡计,例如通过 QQ 等聊天软件发送的链接(有些还伪装成短域名,用户无法分辨),攻击者就能迫使 Web 应用的用户去执行攻击者预设的操作。

所以遇到 CSRF 攻击时,将对终端用户的数据和操作指令构成严重的威胁。当受攻击的终端用户具有管理员帐户的时候,CSRF 攻击将危及整个 Web 应用程序。

4、CSRF 攻击的条件

1 . 用户已经登录了站点 A,并在本地记录了 cookie

2 . 在用户没有退出站点 A 的情况时(也就是 cookie 生效的情况下),访问了恶意攻击者提供的恶意链接被引诱到危险站点 B (B 站点要求访问站点A)。

3 . 站点 A 没有做任何 CSRF 防御

二、CSRF的分类

1、站外CSRF

CSRF站外类型的漏洞本质上就是传统意义上的外部提交数据问题。通常程序员会考虑给一些留言或者评论的表单加上水印以防止SPAM问题(这里,SPAM可以简单的理解为垃圾留言、垃圾评论,或者是带有站外链接的恶意回复),但是有时为了提高用户的体验性,可能没有对一些操作做任何限制,所以攻击者可以事先预测并设置请求的参数,在站外的Web页面里编写脚本伪造文件请求,或者和自动提交的表单一起使用来实现GET、POST请求,当用户在会话状态下点击链接访问站外Web页面,客户端就被强迫发起请求。

2、站内CSRF

CSRF站内类型的漏洞在一定程度上是由于程序员滥用$_REQUEST类变量造成的。在一些敏感的操作中(如修改密码、添加用户等),本来要求用户从表单提交发起POST请求传递参数给程序,但是由于使用了 $_REQUEST等变量,程序除支持接收POST请求传递的参数外也支持接收GET请求传递的参数,这样就会为攻击者使用CSRF攻击创造条件。一般攻击者只要把预测的请求参数放在站内一个贴子或者留言的图片链接里,受害者浏览了这样的页面就会被强迫发起这些请求。

三、检测手段

检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

例如burp抓包删除Referer头

侧重点:

1、CSRF的攻击是建立在浏览器与web服务器的会话之中

2、欺骗用户访问URL

四、靶场实操

1、实操准备

本次实操基于phpstudy使用DVWA靶场
点击此处跳转到phpstudy下载
点击此处跳转到DVWA靶场下载

2、实操演示

在进行测试前,首先需要将靶场难度调整至low

ps:在这一步,或许有许多小伙伴会遇到修改等级后,还是无法进入low级别,此时的解决方案是,按下F12进入开发者模式,在cookie中删除之前所留下的缓存

这时我们需要进行抓包设置payload

首先在文字栏中添加自己想设置的密码

此时用burp抓取这个发送的包

将GET中的数据复制到host后边,得到payload为

127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change

将链接发送给正在使用该站点的用户

此时发现,该用户的密码被我们成功修改

五、CSRF的防御

CSRF漏洞防御主要可以从三个层面进行,即服务端的防御、用户端的防御和安全设备的防御。

1、 服务端的防御

目前业界服务器端防御CSRF攻击主要有5种策略:验证HTTP
Referer字段,在请求地址中添加token并验证,在HTTP头中自定义属性并验证等。下面分别对5种策略进行简要介绍。

(1)、验证HTTP Referer字段

根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=1&money=10000页面完成,用户必须先登录bank. test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。

(2)、在请求地址中添加token并验证

CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。

(3)、同源策略

同源策略,它是由Netscape提出的一个著名的安全策略。 当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面 当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的, 即检查是否同源,只有和百度同源的脚本才会被执行。 如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。同源策略是浏览器的行为,是为了保护本地数据不被javascript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。


(4)、在HTTP头中自定义属性并验证

自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。

(5)、 在服务端区严格区分好POST与GET的数据请求

如在asp中不要使用Request来直接获取数据。同时建议不要用GET请求来执行持久性操作,如:
http://www.yeeyan.com/space/deleteEvent/16824。

(6)、 使用验证码或者密码确认方式进行

这种方法很有效,但是用户体验就差了些。

2、用户端的防御

** 养成良好的上网习惯**

(1)、不要轻易点击网络论坛、聊天室、即时通讯工具或电子邮件中出现的链接或者图片;

(2)、及时退出长时间不使用的已登录账户,尤其是系统管理员,应尽量在登出系统的情况下点击未知链接和图片

(3)、在连接互联网的计算机上安装合适的安全防护软件,并及时更新软件厂商发布的特征库,以保持安全软件对最新攻击的实时跟踪。

3、安全设备的防御

由于从漏洞的发现到补丁的发布需要一定的时间,而且相当比例的厂商对漏洞反应不积极,再加之部分系统管理员对系统补丁的不够重视,这些都给了攻击者可乘之机。鉴于上述各种情况,用户可以借助第三方的专业安全设备加强对CSRF漏洞的防御。
CSRF攻击的本质是攻击者伪造了合法的身份,对系统进行访问。如果能够识别出访问者的伪造身份,也就能识别CSRF攻击。研究发现,有些厂商的安全产品能基于硬件层面对HTTP头部的Referer字段内容进行检查来快速准确的识别CSRF攻击。

六、小结

CSRF攻击方式并不为大家所熟知,实际上很多网站都存在CSRF的安全漏洞。早在2000年,CSRF这种攻击方式已经由国外的安全人员提出,但在国内,直到2006年才开始被关注。2008年,国内外多个大型社区和交互网站先后爆出CSRF漏洞,如:百度HI、NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站)和YouTube等。但直到现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”,其威胁程度由此“美誉”便可见一斑。

另外警惕大家,网络并非法外之地,大家要谨遵网络安全法,不要做违纪违规的事情!

web渗透SSRF漏洞超详细讲解

💕💕💕 博主昵称:摆烂阳💕💕💕

🥰博主主页跳转链接
👩‍💻博主研究方向:web渗透测试 、python编程
📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导

SSRF漏洞

一、原理简介

SSRF(Server-Side Request Forgery:服务器端请求伪造)
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

二、漏洞形成的原因

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

由于存在防火墙的防护,导致攻击者无法直接入侵内网;

这时攻击者可以以服务器为跳板发起一些网络请求,从而攻击内网的应用及获取内网数据。

三、SSRF和CSRF的区别

1、CSRF是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的cookie信息伪造用户请求发送至服务器;

2、SSRF是服务器对用户提供的可控URL过于信任,没有对攻击者提供的URL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或者其它服务器

四、SSRF的攻击方式

1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;

2.攻击运行在内网或本地的应用程序(比如溢出);

3.对内网web应用进行指纹识别,通过访问默认文件实现;

4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);

5.利用file协议读取本地文件等。

五、寻找漏洞的方法

1.能够对外发起网络请求的地方,就可能存在SSRF漏洞

2.从远程服务器请求资源(Upload from URL,Import & Export RSS feed)

3.数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)

4.Webmail收取其他邮箱邮件(POP3/IMAP/SMTP)

5.文件处理,编码处理,属性信息处理(ffpmg,ImageMaic,DOCX,PDF,XML处理器)

六、伪协议的介绍

1、ftp:// 协议

功能:

探测目标端口

实操:

如果目标未开放探测的端口,则会立马产生回显

如果对方开放了所探测的端口,页面将会一直处于加载中的状态

2、Gopher://协议

俗称万金油协议,可以任意的构造请求
payload:

gopher://192.168.5.111:80/_POST%20/aa.php%20HTTP/1.1%0d%0aHost:%20192.168.5.111:80%0d%0aUser-Agent:%20Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/103.0.5060.134%20Safari/537.36%20Edg/103.0.1264.77

此时可以查看到目标的信息

3、Dict:// 协议

功能:

探测主机信息

实操:


此时发现可以探测到目标的信息

七、绕过姿势

对于SSRF的限制大致有如下几种:

1、 限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。

采用HTTP基本身份认证的方式绕过
即@: http://www.xxx.com@www.evil.com

2、限制域名只能为 http://www.xxx.com

采用无效的伪协议头,例:httpssssss://就会将他当做文件夹,然后再配合目录穿越即可读取文件

3、限制不能访问内网的IP,以防止对内网进行攻击。

可以采用短链接或者ip指向来解决

4、屏蔽返回的详细信息。

八、漏洞修复

1、防护措施

(1)过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址​、IPv6地址
(2)过滤file:///、dict://、gopher://、ftp:// 危险schema
(3)​对返回的内容进行识别
(4)内网服务开启鉴权​(Memcached, Redis, Elasticsearch and MongoDB)

2、最佳防护

(1)使用地址白名单
(2)对返回内容进行识别
(3)需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:
首先禁用CURLOPT_FOLLOWLOCATION;然后通过域名获取目标ip,并过滤内部ip;最后识别返回的内容是否与假定内容一致

九、本章小结

通过SSRF漏洞的学习,我发现SSRF漏洞果然比CSRF漏洞的利用的局限性要小,并且SSRF漏洞对内网的一些应用危害比较大。所以在开发过程中,警惕大家要尽量避免产生SSRF漏洞。

另外警惕大家,网络并非法外之地,大家要谨遵网络安全法,不要做违纪违规的事情!

以上是关于web渗透CSRF漏洞详细讲解的主要内容,如果未能解决你的问题,请参考以下文章

CSRF 攻击API 设计Redis微服务框架| Chat · 预告

DVWA学习日记--CSRF超详细漏洞利用讲解

Web安全Csrf漏洞利用

浅谈CSRF漏洞

WEB安全之CSRF

Web系统常见安全漏洞介绍及解决方案-CSRF攻击