二维码劫持案例分析

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

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

引言

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

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:

二维码劫持案例分析


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

查看所有标签

猜你喜欢:

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

Computers and Intractability

Computers and Intractability

M R Garey、D S Johnson / W. H. Freeman / 1979-4-26 / GBP 53.99

This book's introduction features a humorous story of a man with a line of people behind him, who explains to his boss, "I can't find an efficient algorithm, but neither can all these famous people." ......一起来看看 《Computers and Intractability》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

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

UNIX 时间戳转换

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

RGB CMYK 互转工具