原理

CSRF漏洞是指利用受害者尚未失效的身份认证信息( cookie、会话等信息),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下,以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密、信息修改等操作)。

形成原因

CSRF的形成原因主要是由于Web应用程序没有充分验证请求来源的问题。正常的请求必须携带正确的Cookie信息,而攻击者可以构造一个恶意网站,在其中包含一个发送CSRF请求的链接或表单,当用户访问这个网站时,浏览器会自动发送CSRF请求到被攻击的网站,从而实现攻击。

防御措施

  • 随机令牌:在表单中增加一个随机生成的令牌(token),每次提交表单时都需要提交该令牌,服务器验证令牌是否正确,从而保证请求来源的合法性。
  • Referer验证:通过检查HTTP头部中的Referer字段,判断请求来源是否合法。但是该方法并非绝对可靠,因为发送请求时可能会篡改Referer字段。
  • Cookie:设置cookie的SameSite属性,值为Strict或Lax,可以限制第三方网站访问该cookie,从而避免其他网站利用cookie发起CSRF攻击。
  • 双重认证:采用双重认证机制,例如使用短信验证码、Google Authenticator等方式,增强用户身份验证,防止受到CSRF攻击。
  • 请求验证:在服务器端对所有请求进行验证,判断请求是否合法,例如判断请求头是否包含特定的自定义HTTP头字段,或者验证请求参数是否合法等。

突破方式

  • Session劫持:攻击者通过某些手段获取用户的Session ID,然后模拟用户的身份访问服务器,从而完成攻击。
  • 跨域POST:攻击者以受害者身份向其他网站发起POST请求,通过头部设置绕过同源策略(Same-Origin Policy),达到攻击目的。
  • Clickjacking:攻击者在一个网站上通过iframe嵌套形式,覆盖另一个网站的操作界面,使用户执行不知情的行为。
  • XSS攻击:攻击者将恶意脚本注入到目标网站或者通过链接传递给受害者,当受害者访问包含恶意脚本的网页时,攻击者就可以利用受害者的权限发送恶意请求,完成攻击。

【Low】级别

在csrf的界面,点击Test credentials,输入默认的账号和密码(admin,password),点击登录,提示密码有效。

修改密码界面输入新的密码,再使用工具burpsuit抓包,抓到包后,点击右键,选择Engagement tools,点击CSRF Poc,最后会生成一段payload。

复制这段html代码,把它单独存下来,再将这个html文件的两个密码都改成123456,并在浏览器里面打开。

 

点击submit request后会跳转回dvwa,这时再次验证原来的密码,会发现密码已经失效。

输入更改后的密码(123456),验证成功,证明crsf修改了用户密码。

【Medium】级别

这里查看源码,与刚刚的low等级比较发现,这里只有一个等级发生了改变,即在传入密码和确认密码参数前先进行了一个if语句的判断,判断里面的内容主要是验证这个访问请求是否从dvwa网站本身发起的,如果不是这个网站发起的请求,后面的操作就不执行。

源码是通过referrer这个字段的参数进行判断的,通常情况下在增加referrer验证时就是网站本省当前页面的ip地址,这里需要抓包看看相关信息。

首先,修改密码为10086(这里密码没有要求,随便设置一个),修改密码成功,这里的网站如下图url栏中所示。

将刚刚url栏中的网址复制到一个新的网页打开,发现change下面有提示,大致意思就是请求的来源不正确。

利用工具burpsuit抓包分析有:

对于最开始更改密码成功的页面抓包,可以看到有referer信息。

那解决办法就将刚刚页面没有问题的referer信息复制到第二个页面中,再返回给浏览器响应,可以看到密码已经更改成功。

【High】级别

首先查看源码,发现该级别加入了token机制,当用户访问修改密码页面修改时,服务器会返回一个随机的token,向服务器发送请求时,需要提交token,服务器接收请求时会先检查token,只有token正确,才会去处理响应请求。

利用burpsuit工具抓包可以看到主机名和token值。

通过存储型的XSS获得token,这里name长度限制抓包解决,然后将name值设为<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>,forword,然后网页中就得到了一个没有使用过的token值。

然后回到csrf界面,修改密码,将url栏中的token值改为刚刚得到的新token值。即把:

http://www.dvwa.com/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change&user_token=7732854e8c3912dd284538ed7533fe51#

改为:

http://www.dvwa.com/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change&user_token=3914162e7106cc2b9dc4905883a2b636#

然后修改密码成功。

然后去登录验证,修改密码成功。

 

 

 

 

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/yeahh/p/17498967.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!