JSONP 无限源跨域返回敏感信息

前情提要:

实习过程中在公司的安全测试清单列表中看到了这个漏洞,由于之前了解的不是很多,所以在周末的时候来学习一下

JSONP 's BG

JSONP 是在 CORS 之前出现的一种用来去解决跨域请求的一种技术,任何一种新技术的出现,都是为了解决实际开发种存在的一些问题,因为随着网站开发的不断发展,我们在实际生活中也可以发现很多时候我们打开的一个页面要去跳转第三方或者说我去执行某些操作的时候需要从第三方去获取一些数据才能够完善业务,但是在这之前浏览器是有同源策略的,它会限制不同域(域名,协议,端口相同)的客户端脚本在没有授权的情况是无法读写其他域的资源,但是呢,在实际业务中有时候又必须要从其他域获取数据,这时候就出现了 JSONP

Process:

https://cloud.tencent.com/developer/article/2364388

JSONP 的具体实现流程:

image

这是展示了在实际业务开发中客户端是如何通过 JSONP 来从服务端获取数据

但是我们是 hacker ,我们要研究这种漏洞在实际情况要如何利用!

<script>
  function getmessage(data){
    alert(json.stringify(data))
  }
</script>
<script src="http://a.com?callback=getmessage">

这是一个 demo 示例,假设我们已经知道某网站存储个人数据的具体 url ,我们就可以在自己的服务器上构造一个这样的 html 页面去诱导已登录的用户去点击,这时候,用户的个人数据就会以 data 的方式放到 getmessage 函数中并传回给攻击端(可以理解为图中的客户端),攻击者的页面上就可以弹出用户的个人信息

Keys:

  1. 用户必须是登录状态且没有注销登录,这样当攻击者在实施 JSONP 劫持的时候,浏览器会自动带上用户 cookie
  2. 必须要使用 <script src="xxx"> ,这是因为在之前的时候<script>标签的src属性不受同源策略影响(可以简单理解为服务器不会直接传数据,但是可以接受将数据打包成一段 js 代码去发送)

End:

在我们实际复现的时候,其实我们可以发现,当我们在最新版的浏览器中触发该页面的时候,攻击者端并不能返回信息,而当使用老版的浏览器的时候是可以成功触发的

这是因为新版的浏览器中已经引入了很多相关 cookie 的安全机制,其中最关键的就是 SameSite Cookie 属性,可以说从根本上解决了该问题的存在,再加上之后出现了 CORS 提供了更加强大、安全的跨域方案,所以说这种漏洞在目前来说其实存在的已经很少了

posted @ 2025-11-08 18:53  Zephyr07  阅读(13)  评论(0)    收藏  举报