二维码劫持案例分析

栏目: IT技术 · 发布时间: 4年前

内容简介:微信扫描二维码登录网站,相信很多网站登录中都有这个功能。但是这个功能使用不当,将会出现劫持漏洞。话不多说,直接分享三个实战挖掘的案例,三个的实现方式都不一样(已脱敏).正常走其流程,发现登录扫一个二维码即可:

引言

微信扫描二维码登录网站,相信很多网站登录中都有这个功能。但是这个功能使用不当,将会出现劫持漏洞。话不多说,直接分享三个实战挖掘的案例,三个的实现方式都不一样(已脱敏).

A网站登录处存在二维码劫持漏洞

正常走其流程,发现登录扫一个二维码即可:

二维码劫持案例分析

微信扫描后发现,只要关注了 A网站 的公众号,无需点击确认,扫描后即可登录:

二维码劫持案例分析

二维码劫持案例分析

‘打开浏览器f12,发现生成二维码的链接如下:

二维码劫持案例分析

但是直接访问,发现报错:

二维码劫持案例分析

估计是判断了Refere头,我们用 python 的requests去请求试试:

二维码劫持案例分析

发现轮询判断二维码是否扫描,是否登录的接口如下:

二维码劫持案例分析

其中:

未登录 code为 1

登录 code 为 0

二维码过期 code 为 2

当登录成功,code返回0,将会set-cookie,返回一个绑定登录账号的cookie:

二维码劫持案例分析

可成功获取到msg。

制定攻击流程:

(1)请求 https://a.com/account/login_weixin.html 获取到 msg参数

(2)轮询请求 https:// a.com /account/checkLogin.html?1586329068966&ticket= msg参数 其中 ticket参数为 第一步获取到的msg参数

(3)将二维码投放出去,钓鱼等待受害者扫描

(4)受害者扫描二维码,轮询返回登录成功

(5)获取此时的cookie。用这个cookie去登录受害者账号

Exp:

qrcode.py

二维码劫持案例分析

此python文件用来获取二维码以及轮询

Index.php:

二维码劫持案例分析

此页面用于投放二维码,供受害者扫描。

攻击流程:

(1)开启qrcode.py:

二维码劫持案例分析

(2)投放恶意页面:

二维码劫持案例分析

(3)受害者扫描二维码

(4)获取到session:

二维码劫持案例分析

(5)登录受害者账号:

二维码劫持案例分析

自行脑补下登录成功的样子吧。。为了脱敏。。。这篇文章仅仅讨论技术。

B网站登录处存在二维码劫持漏洞

登录处:

二维码劫持案例分析

二维码登录流程:

(1)获取二维码和 key

(2)轮询(很长一段时间不会过期)

(3)用户扫描二维码或点击登陆链接确认登录,轮询将返回openid

(4)登录

其中,获取链接和key的阶段。是没有做请求来源校验和csrf token的。意味着任何人任何地点都可以请求获取二维码和key:

二维码劫持案例分析

请求链接:

http://b.com / xxxx /getWxQrcode? xxx=xxxx(GET参数不重要)

接着轮询:

二维码劫持案例分析

请求链接:

https:// b.com / xxxx /checkWxQRState? QRkey =QRkey

这里的请求参数中的QRkey就是在上一步获取二维码和key时,获取的响应参数 QRkey。

此时需要用微信扫描二维码。本人分析了一下,发现二维码链接如下:

http://b.com/login/scan/gQH18DwAAAAAAAAAAS5odHRwOi8vd2VpexxxxxxxxxxxxFNTF1MUEAAgTY5YVeAwRYAgAA

其中 /scan/后的字符串就是我们的QRkey。只不过这个链接必须在微信中打开。

微信打开后,轮询返回了一个openid,这个openid应该是绑定这微信的,同一个微信号返回的openid都是一样的:

(偶然发现,如果微信没有自己去改微信号,就是openid的值哦)

二维码劫持案例分析

获取到openid后,openid和QRkey构造一下链接。如果微信绑定了账号的,即可登录。

登录链接:

https:// b .com/ xxxx /qrWxLogin? openid =oo6-IuOhw xxxxxxxx _hOI& QRkey =gQH18DwAAAAAAAAAAS5odHRwOi8vd2Vp xxxxxxxxxxxxxxxxx 4SU1 xxxxxxx SU1EAAgTY5YVeAwRYAgAA

根据此流程,可构造钓鱼页面。

攻击流程:

(1)开启 php 相关环境,使受害者能够访问test.php;运行python脚本(attack.py),开始轮询。

(2)受害者访问恶意页面(test.php),用微信扫描二维码,然后点击b网站那里的登录确认 或者将链接直接微信发给受害者,受害者微信处点开

(3)此时attack.py中获取到openid,组合成登录链接。攻击者可使用登录链接登录受害者账号

使用php和python来写:

钓鱼页面:

二维码劫持案例分析

二维码劫持案例分析

python轮询:

二维码劫持案例分析

当有用户扫描二维码或点击链接。点击确认后,获得openid,组成登录链接:

二维码劫持案例分析

我们直接访问这个链接,即可成功登录。

C网站登录处存在二维码劫持漏洞

正常请求:(前提:微信绑定了C网站账号,且在微信处登录了C网站账号)

1、网页端访问登录页面:

二维码劫持案例分析

2、网页端持续轮询,检查二维码状态。这里返回1,表示二维码还没有被扫描

二维码劫持案例分析

二维码劫持案例分析

3、手机微信端扫描二维码,发送了一个请求:

二维码劫持案例分析

响应:

二维码劫持案例分析

4、网页端轮询,返回值 2,表示二维码已被客户端扫描,但未确认:

二维码劫持案例分析

二维码劫持案例分析

网页端显示:

二维码劫持案例分析

5、手机微信端点击 “确认登录电脑端”

二维码劫持案例分析

二维码劫持案例分析

6、轮询接口,返回了登录成功的cookie值:

二维码劫持案例分析

二维码劫持案例分析

即可成功登录网页端

攻击链:

1、访问: https://c.om/xxxx/qrcodelogin/show ,获取 set-cookie:qrtoken

2、用获取到的qrtoken,轮询 状态接口

https://c.om/xxxx/xxxxxx/qrcodeLoginCheck/ qrtoken值 ?callback=jQuery1587040960902

其中:

返回值为1,用户还没有扫描二维码

返回值为2,用户还没有点击确定

返回值带有参数 xxxxx-passport,登录成功,xxxxx-passport为登录凭证

3、已经在微信客户端登录过的受害者在微信客户端打开恶意网页链接,或者微信客户端扫描恶意网页的二维码。

4、恶意网页先后通过两个img标签,依次请求登录确认网页、登录成功接口

5、轮询状态接口,获取 xxxxx-passport,劫持用户账号

Demo:

构建轮询脚本:qrcode.py:(测试发现一个二维码90秒过期,该脚本可自动重新请求)

二维码劫持案例分析

构建恶意页面:qrcode.php

二维码劫持案例分析

开启轮询脚本:

二维码劫持案例分析

手机微信端访问恶意页面。

轮询处获得cookie:

二维码劫持案例分析


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解CSS3

图解CSS3

廖伟华 / 机械工业出版社 / 2014-7-1 / CNY 79.00

本书是CSS3领域的标准性著作,由资深Web前端工程师根据CSS3的最新技术标准撰写。内容极为全面、丰富和翔实,由浅入深地讲解了CSS3新特性的语法、功能和使用技巧,涵盖选择器、边框、背景、文本、颜色、UI、动画、新型盒模型、媒体查询、响应式设计等各种模块;写作方式创新,有趣且易懂,用图解的方式来描述CSS3的每一个特性甚至每一个步骤都配有实战效果图;包含大量案例,实战性强,每个特性都有作者从实践......一起来看看 《图解CSS3》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具