有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况?

不多说,马上来试验一下:

for (i = 0; i < 20; i++)document.cookie = i + '=' + 'X'.repeat(2000)

什么,网站居然报错了?

众所周知,Cookie 是塞在请求头里的。如果 Cookie 太多,显然整个 HTTP 头也会被撑大。

然而现实中,几乎所有的服务器都会对请求头长度做限制,避免畸形封包消耗服务器资源。

那么有趣的事就来了 —— Cookie 是可以长期储存的,所以只要不过期,对应的站点就一直无法访问!

为什么会这样!因为博客园是支持自定义装扮的,用户可以嵌入自己的脚本。于是,一旦执行了恶作剧脚本,站点 Cookie 被污染,导致整个网站都无法访问了!

# 进阶

根据这个原理,我们继续挖掘 Cookie 的相关属性,让攻击效果变得更好。

expires

Cookie 之所以能被持久储存,完全得益于 expires 这个过期值。

理论上,Cookie 的过期时间可以足够长。不过鉴于实际情况,最多也就几个月的时间。

但对于互联网来说,这也非常长了,谁能容忍一个网站几个月没法用?

所以,我们可以设置足够久的过期时间 —— 只要用户不主动清空 Cookie,相应的站点就一直没法访问!

domain

例如博客园,所有用户都在 www.cnblogs.com 下。除了这个主站,能否将其他的子站服务也一起破坏呢?

答案是可以!因为 Cookie 具有一个特殊的属性 domain,它允许子站设置上级站点的 Cookie。甚至可以是根域!

于是 www.cnblogs.com 的页面,就能写入超大 Cookie 到 cnblogs.com 域下了。

未来,只要用户访问 *.cnblogs.com 的资源,统统变成 400 了。

这个特征可被利用到 XSS 攻击上:

只要某网站任何一个子站能够运行跨站脚本,攻击者就可以对该网站进行全站屏蔽了!(GFW:比我还狠~)

path

不过太霸道也是不好的。尤其是这年头大家都懂些网络知识,清缓存这样简单的事,不少小白用户都会尝试下。

所以,为了低调起见,我们不对页面进行屏蔽,以免被过早被用户发现。

我们只屏蔽特殊的 URL,例如 AJAX 请求接口。这样,页面仍能正常打开,只是后期的一些操作总是提示失败 —— 于是,用户大多会认为是网站出问题了,而不会怀疑是自己的原因。

为了能更精确的控制 Cookie 粒度,path 属性得利用起来。例如,我们只污染博客园的 /mvc/vote/VoteComment.aspx 页面:

for (i = 0; i < 20; i++)document.cookie = i + '=' + 'X'.repeat(2000) + ';domain=cnblogs.com; path=/mvc/vote/VoteComment.aspx'

这样,页面仍能正常浏览,只是把『点赞』功能给屏蔽了:

是不是很有趣:)

这种局部屏蔽的效果,显然有更好的迷惑性。

协议

仔细回顾一遍 Cookie 属性,除了 secure,再没和 URL Scheme 相关的属性了。

这意味着,HTTP 和 HTTPS 的 Cookie 默认都是共享的。因此,我们可以在 HTTP 下屏蔽 HTTPS 站点了!

不过 XSS 也不是也想有就能有的,但在特殊的条件下,任何站点都可以有 XSS —— 那就是流量被劫持的时候。

当用户流量被劫持时,中间人可以模拟出任何 HTTP 站点,因此就能对任意站点设置 Cookie:

当用户打开任意 HTTP 页面时,往其中注入脚本。接着悄悄创建目标站点的隐藏框架页,中间人返回特定的页面内容,其中的脚本即可修改目标站点 Cookie 了。

下面就来尝试一下吧。

通过代理,我们模拟流量被劫持的场景。当打开任意页面时,开始对目标站点释放 DeBuff:

主页面的实现:

目标框架页实现:

通过一堆框架页,即可批量对目标站点的 Cookie 进行修改。

最后,切换回正常网络 —— 发现邪恶光环仍在生效:

更杯具的是,连加密传输的 HTTPS 站点也未能幸免:

中间人缓存攻击,又多了一种新玩法!

# 用途

或许你要说了,这除了恶作剧恶搞之外,有实际意义吗。

不过,只要充分发挥想象,还是能玩出一些有趣的效果。例如配合 XSS:

  • 屏蔽资料修改页面,阻止用户改密码

  • 屏蔽注销接口,保持用户会话不过期

  • 屏蔽管理后台,让管理员暂时无法操作(XSS 盲打时,对管理员造成眩晕效果,持续时间视管理员 IQ 而定)

或者流量劫持的场合:

  • 屏蔽前端检测脚本,降低用户安全性

  • 屏蔽程序、补丁的更新站点,等等

# 小结

当然,这种所谓的『拒绝服务』,只是本地自欺欺人而已,对真实服务器并没什么影响。

虽然效果不及传统攻击,但这种方式显得更文明一些。只对部分人、甚至部分功能实施攻击,而完全不妨碍其他用户。

来源:https://www.cnblogs.com/index-html/p/cookie-dos.html

关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享

如果网站的 Cookie 特别多特别大,会发生什么情况?相关推荐

  1. Web网站架构演变—高并发、大数据

    转 Web网站架构演变-高并发.大数据 2018年07月25日 17:27:22 gis_morningsun 阅读数:599 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可 ...

  2. 网站关键词排名下降的8大祸首

    经常可以看到很多的朋友在论坛.QQ群里头讨论,今天网站排名又下降了,蛋疼啊.这个度娘到底在搞什么名堂,有人说百度又人工了,也有人说百度一个月总有那么几天的,还有人说...那么到底是什么原因导致你网站关 ...

  3. Chrome 清除特定网站的 cookie

    清除全部网站的 cookie 比较简单,但副作用也大,好些自动登陆的.自动填表的都丢失了.如果只是清除特定网站的 cookie,在 Chrome 里的操作其实挺麻烦,因为这个配置隐藏太深了! 没法,有 ...

  4. 用 API 提取、写入指定网站的 Cookie - 回复 bangrj 的问题

    问题来源: http://www.cnblogs.com/del/archive/2009/02/27/1399526.html#1463307 本例效果图: 代码文件: unit Unit1;int ...

  5. C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie

    网上找到的可以完整获取Cookie的方法,转载一下希望能帮助更多人. 亲测可用 在Winform中使用WebBrowser控件获取网站的Cookie有时候是不完整的,默认调用Document.Cook ...

  6. 网站图片多服务器选多大,网站上的图片一般多大合适

    网站上的图片一般多大合适 内容精选 换一换 安装了SSL证书后,访问网站时,HTTPS比HTTP要多几次握手的时间,HTTPS协议握手阶段比较费时,同时还要进行RSA校验,因此使用了SSL证书后,相较 ...

  7. CSRF 跨站请求伪造 为什么b网站请求a网站的地址能带上a网站的cookie

    知道csrf后的问题:CSRF 跨站请求伪造 为什么b网站请求a网站的地址能带上a网站的cookie 答:script.image.iframe的src都不受同源策略的影响.

  8. 电子商务网站建设策划书_网站建设及推广的5大注意事项

    如果你是一个相对成熟的企业,我们在建立网站的时候,总是会让网站开发人员,撰写一个网站策划书,通常而言,我们在做网站策划的时候,一份网站策划书主要包括如下一个因素: ①营销型网站的建立,页面样式的视觉体 ...

  9. 大带宽服务器对于网站速度的影响有多大?

    如今,拥有快速的网站速度已成为网站成功的关键因素之一.当我们浏览网站时,最重要的是能够快速加载页面,否则我们很可能会失去耐心,离开网站.为了确保网站速度,有许多因素需要考虑,其中之一是服务器的带宽.那 ...

  10. Chrome浏览器中清除特定网站的Cookie数据

    背景:当我们在网站上遇到错误时,经常会用到的一个方法就是清除Cookie,清除网站的Cookie和网站数据来重置本地的缓存,很多客户端引起的错误都可以使用该方法修复, 但是在清除Cookie时有一个问 ...

最新文章

  1. python如何自定义模块_python自定义模块和开源模块使用方法
  2. LeetCode Binary Search Tree Iterator( 二叉树迭代器)
  3. react 调用组件方法_React源码分析1 — 组件和对象的创建(createClass,createElement)...
  4. Thinkphp5 分页带参数(亲测)
  5. java版 modbus crc16校验 (已测试成功)_java版 ModBus CRC16校验 (已测试成功)
  6. 微信公众平台新增语义理解接口
  7. android跳蚤市场的功能,基于Android校园跳蚤市场设计与实现.doc
  8. 希尔排序不稳定例子_Python实现希尔排序(已编程实现)
  9. vSphere 6.5 High Availability New Features – Proactive HA(vSphere 6.5高可用性新功能–主动HA)
  10. 中山纪念中学培训DAY1
  11. C#多线程学习(三) 生产者和消费者 1——解决线程间冲突的关键
  12. 后台仿京东商城接口设计缺陷吐槽篇
  13. 方法重载和重写的区别
  14. 微型计算机主机的组成不包括______,微型计算机主机的主要组成部分是什么
  15. ios 设置属性的center_iOS游戏平台Game Center成就显示设置指南
  16. rar、zip、7z等压缩率的测试
  17. AcWing 1129 热浪
  18. mysql中where语句的不等于操作
  19. CPU占用率100%解决方法
  20. 游戏盾的原理和功能是什么?

热门文章

  1. FPGA开发设计流程
  2. 【Python】Tanimoto相似度算法实现
  3. Windows Server 2008 启用公共文件夹共享
  4. 第二十二章 职业道德规范
  5. LAMP笔记之Apache篇(2)
  6. 【转】HTTP幂等性概念和应用
  7. mysql安装及常见设置
  8. 捕获input 文本框内容改变的事件(onchange,onblur,onPropertyChange比较)
  9. Pr使用技巧,如何使用pr去水印?
  10. 在苹果Mac中如何不用鼠标刪除文件?