水坑攻击之Jsonp hijacking-信息劫持,在钓鱼页面上调用js代码来获取用户在某些敏感站点的个人信息(如人人等)
水坑攻击之Jsonp hijacking-信息劫持
0X01 Jsonp hijacking作用
这是一种基于水坑攻击的攻击方式,用于大规模的获取用户信息,因为可以绕过同源策略的限制而展开,所以其威力巨大,尤其是在一些大型网站的接口处,用此方法可以盗取已登陆用户的敏感信息从而进行进一步的攻击。
0x02 劫持原理
在说原理之前,首先需要了解js中callback函数的作用,callback是js中的回调函数,这个函数的用处在于它自己是个函数,但是他会将自己作为参数传给另一个函数,并且在父函数执行完成之后再执行。
借用这个原理,我们来试试跨域加载数据:
这是人人网的一个接口,用于显示用户信息
在没登陆的时候,可以看到图中的信息,提示未登陆用户。然后我们本地构造劫持代码,建立evil.html文件。
<body>
<>
function run(obj){
document.write(obj.status);
}
</>
< src="http://base.yx.renren.com/RestAPI?method=api.base.getLoginUser&format=2&callback=run"></>
</body
注意到我在url中添加了参数callback=run,这样就会导致url在被加载完成之后会继续加载我们的run函数,本地访问网页:
输出了-110,可以看到,我们成功跨域加载了数据到本地域中,但是这有什么作用呢?还是以一个例子尝试,我们登录人人网后来访问这个API
可以看到,返回了用户的敏感信息,我们根据此json返回数据来修改我们的恶意代码文件evil.html<body>
<>
function run(obj){
document.write(obj.status+"<br/>"+obj.user.userId+"<br/>"+obj.user.userName);
}
</>
< src="http://base.yx.renren.com/RestAPI?method=api.base.getLoginUser&format=2&callback=run"></>
</body>
本地访问evil.html
成功在本地域劫持到用户信息。这个漏洞的利用条件就是需要用户访问我们构造的恶意界面,当然如果我们将这些代码放在用户访问量比较大的网站上,其成功率就可大大提高。至于如何将本地的劫持到的数据存储下来,就没必要多说了。
0x03结论
这种技术想来也是用在APT攻击中的,而且是大规模的数据窃取,作为一种技术手段还是很有用的,不过首先你要有一个大型网站的存储xss或者你自己的博客比较火火火火……
*信息源:http://www.stardustsky.net/post/25.html
*铸剑网络安全实验室CSNS-Lab
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2017-08-28 ES不设置副本是非常脆弱的,整个文章告诉了你为什么
2017-08-28 集群版本升级——rolling upgrade在ES 单节点从 restart 到加入集群,大概要 100s 左右的时间。也就是说,这 100s 内,该节点上的所有分片都是 unassigned 状态
2017-08-28 ES跨版本升级?——难道升级集群发生shard allocation是因为要分配replica节点???
2017-08-28 官方文档 Upgrading Elasticsearch
2017-08-28 集群节点Elasticsearch升级
2017-08-28 ES什么时候会平衡分片
2017-08-28 ElasticSearch 深入理解 三:集群部署设计