信息泄露SVG注入

极客

当SVG注入撕开我的信息防线

哎,兄弟们,昨晚我又失眠了,不是为情所困,而是被一个藏在图片里的“暗器”给扎心了——SVG注入,这玩意儿差点让我辛苦搭建的网站变成别人家的后花园,真的,那种感觉就像你半夜回家,发现门锁完好无损,但客厅茶几上的钱包却自己长了腿跑了,你说气不气人?

事情是这样的:一张图片引发的“血案”

昨晚我像往常一样,在后台审核用户上传的图片,咦?这张SVG格式的图标挺别致的,线条流畅,颜色渐变过渡得恰到好处,我寻思着,这设计师品味不错啊,顺手就点了“允许发布”,嘿,谁能想到呢,就是这看似人畜无害的矢量图,里面居然嵌套了一段JavaScript代码!信息泄露的通道就这么悄无声息地打开了,我的天呐,我当时还傻乎乎地夸它漂亮呢!

你可别觉得我在危言耸听啊,朋友,SVG和JPEG、PNG可不一样,它本质上是一种XML文档,这就意味着,它不仅能画画,还能“说话”——运行脚本,黑客把恶意脚本藏在SVG的<script>标签里,或者利用onload事件,只要用户在浏览器里一打开这张图,代码就“啪”地一下执行了,这就像你在可乐罐里藏了颗图钉,外表甜甜蜜蜜,一喝就扎嗓子眼,防不胜防啊!

数据是怎么从我的眼皮底下溜走的?

我后来翻了日志,冷汗直流啊!那段恶意代码干的事,是偷偷读取同源页面上的表单数据,然后通过fetch请求发往了一个境外IP,我的乖乖,这不就是典型的数据外带吗?我那些注册用户的手机号、邮箱,甚至加密前的密码哈希值,差点就成了暗网上的“紧俏商品”。

更离谱的是,攻击者还能利用SVG注入来篡改页面内容,搞个钓鱼弹窗,或者劫持用户的会话Token,你想啊,用户明明访问的是我的域名,看到的却是“系统维护,请重新输入密码”的假页面,那心情,简直比吃了苍蝇还难受!而这一切的始作俑者,竟然是一张体积不到2KB的“精美图片”,我的脆弱防线在它面前,简直是形同虚设。

吃了这个亏,我才懂得“过滤”比“信任”更重要

哎,说到底,还是我太“天真”了,以前总以为,只要做好SQL注入和XSS的防护,就万事大吉了,没想到SVG这匹“黑马”直接绕过了我的传统防线。信息泄露这件事,真的是千防万防,家贼难防啊!这“家贼”,就是用户上传的看似无害的文件内容。

我现在呢,终于长记性了:对于用户上传的任何SVG文件,必须进行严格的消毒处理,啥意思?就是解析一遍,把所有的<script><foreignObject><use>这些危险标签全部剔除掉,只保留基础的绘图元素和样式属性,这就像给水果削皮,虽然费点儿功夫,但吃着安全啊!我还升级了防火墙规则,把上传目录的执行权限统统关掉,让脚本即使上传成功,也找不到“起跑线”。

兄弟,我的教训,希望你别重演

写了这么多,心里这块石头也算落了地,这事虽然憋屈,但能给你提个醒,也算是它“鞠躬尽瘁”了,真的,在网络安全这条路上,一步一个坎儿,咱们千万不能心存侥幸。SVG注入这种攻击手法,现在越来越多地出现在各种图片上传功能中,你有没有想过,你负责或者使用的那些系统,上传图片的地方真的安全吗?

好了,不说那些揪心的事了,如果你也对网络安全感兴趣,或者想和我探讨怎么防御这些“花里胡哨”的攻击手法,随时可以来聊聊。

学习网络安全可以加QQ:33826819(记得备注“安全交流”哦)

信息泄露SVG注入

下次我要是再发现什么幺蛾子,再来跟你唠!祝你的服务器永远安稳,数据固若金汤!加油!💪

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

目录[+]

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