休闲

手机二维码漏洞复现

时间:2010-12-5 17:23:32  作者:娱乐   来源:百科  查看:  评论:0
内容摘要:去年秋天,我在一个商场门口扫了一辆共享单车。二维码贴纸上隐约有一层更厚的透明胶。抠开一看,底下还藏着一个二维码。扫了上面那个,跳转的不是解锁页面,而是一个“支付宝红包”领取链接。这种双层二维码的物理覆

去年秋天,手机我在一个商场门口扫了一辆共享单车。维码二维码贴纸上隐约有一层更厚的漏洞透明胶。抠开一看,复现底下还藏着一个二维码。手机扫了上面那个,维码跳转的漏洞不是解锁页面,而是复现一个“支付宝红包”领取链接。这种双层二维码的手机物理覆盖,是维码二维码漏洞里最粗糙也最有效的一种。

二维码本身没有漏洞。漏洞它只是复现一串二进制数据的图形化表示。问题出在“扫”这个动作上——扫码工具和背后的手机解析逻辑,才是维码攻击面。

一个真实的漏洞复现过程

我找了个开源二维码生成库,版本是两年前的。用Python写了几行代码,生成一个指向自己服务器的URL。然后把这个二维码打印出来,贴在另一张二维码上面。用微信扫,微信会弹出一个提示:“该链接非微信官方网页,是否继续访问?”但用某些手机自带的扫码工具,直接跳转,没有任何拦截。

这不算漏洞,算设计缺陷。真正让我觉得有意思的是另一个场景:二维码里嵌入的URL,如果包含特殊字符,部分扫码App的解析逻辑会出错。比如把http://example.com/?a=1&b=2里的&替换成%26,再拼接一个#,某些App会截断后面的参数,只解析前半段。攻击者可以利用这个特性,让用户扫一个看起来是A网站的码,实际跳转到B网站。

我试了五个主流扫码工具。三个正常解析,两个截断。其中一个截断后,跳转到了我预设的钓鱼页面。页面做得跟某银行登录页一模一样。输入账号密码,后台直接记录。整个过程不到二十分钟。

为什么这种漏洞一直存在

扫码这个动作太日常了。日常到没人会停下来想:这个二维码是谁生成的?它指向哪里?跳转过程中有没有被篡改?

商家贴二维码,顾客扫。中间没有任何校验环节。二维码贴纸可以被覆盖,URL可以被伪造,跳转链路可以被劫持。而手机厂商和App开发者,在扫码体验上追求的是“快”和“少点击”。安全提示多了,用户嫌烦。少一步确认,就多一分风险。

我观察到一个细节:安卓系统自带的扫码工具,比iOS上的第三方扫码App更谨慎。前者通常会弹窗显示完整URL,后者直接跳。这跟系统权限和审核机制有关,但更根本的原因是——安卓的扫码工具默认认为“用户可能扫到恶意码”,而很多第三方App默认认为“用户扫的都是正常码”。

复现之后能做什么

普通人能做的很有限。扫之前看一眼URL预览,别见码就扫。商家二维码被覆盖了,及时撕掉重贴。手机厂商能做的更多:强制显示完整域名,对短链接和重定向做拦截,对非HTTPS链接默认不跳转。

但现实是,这些措施都会增加“摩擦”。产品经理不喜欢摩擦。用户也不喜欢。所以漏洞会一直存在,只是换一种形式。今天是从二维码覆盖,明天可能是从扫码后的H5页面里注入脚本。攻击面在变,本质没变:信任被预置在了“扫”这个动作里。

我复现完那个钓鱼页面之后,把代码删了。但那个双层二维码的贴纸,我留了一张在抽屉里。偶尔拿出来看看,提醒自己:扫码之前,先想想底下那层是什么。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap