形成原理JSON劫持

极客

哎哟喂!JSON劫持这玩意儿,到底是怎么悄悄溜进你浏览器的?

前言:一个让人后背发凉的“小透明”

嘿,各位老铁,今天咱们不聊那些高大上的防火墙,也不扯那些玄乎的零日漏洞,就唠唠一个听起来特“技术宅”,但实际上可能天天在你浏览器里“蹦迪”的家伙——JSON劫持,说真的,我第一次搞懂它的形成原理时,心里那叫一个“咯噔”,感觉就像自己家保险柜的钥匙,原来一直挂在门口花盆底下,还以为挺隐蔽呢!😅 这“小偷”是怎么练成“穿墙术”的?

你们知道吗?JSON劫持这事儿,核心问题压根不在“劫持”这词儿上,而在“信任”这俩字儿上,浏览器同学是个大嘴巴,它天生就爱“跨域”串门儿,但又不爱带身份证,这就给了坏蛋可乘之机。

第一步:合法网站的“豆腐渣”接口

你想啊,各大网站为了提升用户体验,现在谁还搞那种传统的表单提交啊?都是用AJAX(异步JavaScript和XML)或者Fetch(新的Web API)技术,去请求一个专门返回JSON数据的接口,这接口本来挺规矩的,前端拿到数据,一解析,往页面上一贴,多快好省!

问题来了,如果这个接口的“守门员”(也就是服务器的CORS(跨源资源共享)策略)是个摆设,或者压根没配置,只简单验证了个登录Cookie,那么任何网站的脚本,都能顺着这个Cookie的“气味”摸过来,这就好比你家门锁,只认钥匙不认人,钥匙复制了几百把流落在外头,你还不自知。

第二步:黑客的“钓鱼”网页,完美“接”住数据

黑客大叔登场了,他不需要费劲去攻破那个大型网站的服务器,只需要开一个自己的小破站点,放上一段“人畜无害”的JavaScript代码,代码里最关键的是这么一招:

// 黑客页面里
// 偷偷定义个Array的构造器,或者更经典的是覆盖__proto__
// 其实最古老的那招是直接用<script>加载目标JSON
function hack() {
  // 利用Object原型链的某个“脏”方法
  // 当JSON数据被当成JavaScript脚本解析时
  // 这些数据中的“标签”就会触发我们的回调
}

他就在自己网页里,堂而皇之地写上一句:<script src="https://被害网站.com/api/用户信息"></script>,哎,你猜怎么着?浏览器一看,哟,加载个脚本嘛,没问题啊,我有Cookie!于是屁颠屁颠地去请求,并且直接以JavaScript代码的形式把返回的JSON内容给执行了!

如果那个JSON里有{"username":"admin","password":"123"}这样的键值对,它会被解析成一条合法的JavaScript语句吗?嘿,太可能了!在老版本的浏览器里,这简直就是裸奔,黑客大叔只要在页面里提前定义好对应的变量名或者函数,数据就被“精准投喂”到了他的手里,而你,可能还在乐呵呵地刷着别的网站呢!

第三步:不是“窃取”,是“白嫖”

最气人的地方来了!这整个过程,不涉及任何木马病毒,也不涉及什么高深的系统漏洞,纯粹是利用了JSON作为数据格式的“可执行性”浏览器加载脚本的“宽松策略”,黑客甚至不需要跟你的电脑发生任何“越狱”级别的交互,他就是站在你背后,用一个合法的HTML页面,隔空把你的隐私“吸”走了,这感觉,就像你在咖啡厅用电脑,有个路人假装看报纸,实际上用望远镜看你键盘,你能咋办?😤

咱们得长点心眼儿

好了,说到这儿,大家伙儿应该心里有数了吧?JSON劫持的形成原理,说白了就是“资源加载的随意性”撞上了“数据格式的盲目解析”,现在的浏览器和服务器虽然加固了不少,但老代码、老接口 依然在互联网的犄角旮旯里跑着。

所以啊,各位网站的站长老爷们,千万别懒!接口一定要校验 Referer响应的 Content-Type 必须标对,最好再加上个CSRF Token(跨站请求伪造令牌),这不仅仅是安全公告上的字眼,这是保命用的护身符啊!咱可不能让黑客大叔的“空手道”白嫖了去。

小声问一句,你们有没有遇到过那种点了链接,页面突然弹出一串乱码,或者内容不对劲的情况?那可能真不是网站抽风,而是“高手在民间”跟你打了个照面呢!🙃

形成原理JSON劫持

学习网络安全,这里有个可以唠嗑的地方!

如果你也想搞明白这些“奇技淫巧”,或者想学点真本事保护自己,可以加QQ:17858252834,咱们多交流,别自己瞎琢磨,毕竟这行当,踩坑的教训可值钱了!

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码