前情提要:

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

JSONP ‘s BG

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

Process:

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

JSONP 的具体实现流程:

image

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

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

1
2
3
4
5
6
<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. 必须要使用