微信Netting-QRLJacking分析利用-扫我二维码获取你的账号权限
首先我们来看一下QRLJacking的实际原理:.攻击者首先进行客户端QR会话,并将登录QR码复制到网络钓鱼网站。“现在,一个精心制作的网络钓鱼页面有一个有效和定期更新的QR码可以被发送给受害者。”
本文作者:gh0stkey
前言
某天晚上,key在研究了一下朋友圈在传的QQ点击劫持,直接导致QQ冻结24小时。然后我们一起交流着聊着聊着扯到了二维码劫持这个话题上,发现国内也没有一些实战性的文章,所以针对微信展开了二维码劫持的实战。(顺便让我安静的做个小小的标题党)
原理
首先我们来看一下QRLJacking的实际原理:
1.攻击者首先进行客户端QR会话,并将登录QR码复制到网络钓鱼网站。“现在,一个精心制作的网络钓鱼页面有一个有效和定期更新的QR码可以被发送给受害者。”
2.攻击者将钓鱼页面发送给受害者。
3.受害者使用特定目标移动应用扫描QR码。
4.攻击者获得受害者帐户的控制权。
5.该服务正在与攻击者的会话交换所有受害者的数据。

这个原理的缺陷在于 -> 攻击者需要打开客户端QR会话,所以就只能进行1V1的实时性攻击,缺陷较大。
而我们实验室的成员在交流的时候发现其实可以实时撒网式QRLJacking(命名为:Netting-QRLJacking),恰好之前研究过微信的WEB协议,所以这里拿微信来当作“实验靶机“。
Netting-QRLJacking的原理如下:
1.攻击者首先精心制作一个网络钓鱼页面,钓鱼页面获取真实页面的二维码。
2.攻击者将钓鱼页面发送给受害者。
3.受害者使用特定目标移动应用扫描QR码。
4.攻击者后台获得受害者帐户的认证链接。
5.攻击者打开认证链接后直接控制受害者的微信权限。

协议分析
因为写过微信机器人,所以第一时间想起了wxpy这个神奇的模块,不过很有意思的写第一条命令的时候就遇到挫折:
from wxpy import *
bot = Bot()
Bot()需要执行完之后才会执行下一条代码,但是我用的Flask框架的代码就无法执行。
那怎么办?只能自己去分析微信QR快速登陆的WEB协议:
1. 获取uuid

(这个uuid是一个很关键的东西,我们可以通过接口去获取)
接口:
https://login.weixin.qq.com/jslogin
POST正文:
appid=wx782c26e4c19acffb&fun=new&lang=zh_CN

返回结果:

2. 获取的uuid与链接https://login.weixin.qq.com/qrcode/组合-> https://login.weixin.qq.com/qrcode/ob8jLaxD6Q==

返回结果:
aHR0cHM6Ly9sb2dpbi53ZWl4aW4ucXEuY29tL2wvb2I4akxheEQ2UT09 (二维码自动识别)
(这就是二维码的地址)
GET请求参数中的uuid也就是上面的uuid,正常组合就行。

这个监听接口打开,只要有人扫描2的二维码那么就会返回消息:

这个返回的其实就是微信头像而已:

真的只是头像而已么?有心的人已经注意到了最开始有一个window.code=201,这个window.code=201是扫描成功后会返回的,而如果二维码时效性过期就会返回window.code=400。

window.userAvatar 是头像,window.redirect_uri是用户凭证链接(这里只要我们点开链接直接可以进入用户微信WEB界面进行任意操作)
代码编写
这里使用一个能够快速开发flask的框架来完成
首先定义一个index的route当用户访问index时调用获取uuid的接口 将其渲染到模板中

模板获取后端传过来的uuid 并用img标签去调用获取二维码的接口
在客户端上显示出来 紧接着轮询二维码扫描的API
并且判断各种情况 尽可能实现地和微信一样
前端轮询代码

二维码扫描的route:

前端用ajax请求后端 将返回的结果转换为Javascript表达式
当全局里面的code为408的时候说明没有扫描
继续递归调用当前函数
当全局里面的code为400的时候说明二维码过期了
自动刷新当前界面获取新的二维码
当全局里面的code为201的时候说明扫描成功了
但没有在移动终端点击确认 将返回的用户头像渲染到界面中 继续递归调用当前函数
当全局里面的code为200的时候说明用户在移动终端点击确认了
这时候将返回的redirect_uri传入到后端 接着跳转返回的redirect_uri
扫描成功时调用的route:

钓鱼实践



You died.戏剧性的是这里key自己日了自己了,奶权并没有上当~
研究人员gh0stkey 来自米斯特安全攻防实验室 @ 奶权 & vulkey
参考资料:
https://www.owasp.org/index.php/Qrljacking
微信Netting-QRLJacking分析利用-扫我二维码获取你的账号权限的更多相关文章
- 利用JAVA生成二维码
本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...
- 【转】Android平台下利用zxing实现二维码开发
http://www.cnblogs.com/dolphin0520/p/3355728.html 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描 ...
- Android平台下利用zxing实现二维码开发
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...
- (转载)Android平台下利用zxing实现二维码开发
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...
- 微信小程序通过二维码获取参数运行
小程序开发过程中会遇到参数id会通过二维码获取,然后执行接口获取数据,但是难免会遇到带过来的参数出现乱码,这样就需要解码,多个参数时就需要进行处理取我们需要的字段值:小程序开发过程中会遇到参数id会通 ...
- 微信公众号生成带参数的二维码asp源码下载
晚上闲着没事,一个朋友联系,让帮忙写一个微信公众号利用asp生成带参数的二维码,别人扫了后如果已经关注过该公众号的,则直接进入公众号里,如果没关注则提示关注,关注后自动把该微信用户资料获取到并且保存入 ...
- 网页授权——扫二维码获取openid
最近做微信公众平台开发项目时遇到这样一个功能需求:生成一个特定url的二维码,用户扫描二维码后跳转到这个url指定的页面,并在这个页面获得用户的openid.这个功能主要涉及到两方面的技术:生成二维码 ...
- 微信小程序开发之普通链接二维码
本文主要介绍扫普通链接二维码打开小程序, 详情请看官方文档https://mp.weixin.qq.com/debug/wxadoc/introduction/qrcode.html 配置普通链接二维 ...
- 利用PHP生成二维码(转)
导读:在二维码广泛应用化的今天,在web站点中自动生成对应的二维码是最基础的需求.文章介绍了使用PHP自动生成二维码的三种方式. get方法实现方式一: $urlToEncode="163. ...
随机推荐
- POJ1180 Batch Scheduling -斜率优化DP
题解 将费用提前计算可以得到状态转移方程: $F_i = \min(F_j + sumT_i * (sumC_i - sumC_j) + S \times (sumC_N - sumC_j)$ 把方程 ...
- [BAT]win7下用批处理脚本自动删除7天以前创建的文件
set JmeterPath=D:\apache-jmeter-2.7 forfiles /p %JmeterPath%\extras /m *.html -d -7 /c "cmd /c ...
- 在Mockplus中,如何做鼠标悬停时菜单下拉的效果?
了解Mockplus的用户会知道,该原型工具目前并不直接支持鼠标悬停功能.但我经过尝试,发现想用它实现一个鼠标悬停事件并不是什么难事,比如网页设计中很常见的鼠标悬停时菜单下拉的效果,只要换个思路,利用 ...
- linq group by / distinct
https://www.cnblogs.com/qixu/p/6033532.html http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062 ...
- windows10创意者完整镜像下载
今天给大家分享一个windwos10创意者的完整镜像. 在官网,我们看到的是直接下载安装,但是在没有网的时候我们就无法了 而且在很多的时候我们在下载安装windows10的时候回遇到很多无法估量的问题 ...
- AJAX学习必备三本书
<AJAX基础教程>AJAX必备图书之一.国内发行的第一本AJAX图书,也是目前最好的AJAX入门书,如果您是AJAX新手,此书是最好的入门图书.本书基本包括了实现Ajax需要了解的大部分 ...
- 面向对象先修:Java入门
学习总结 在C语言和数据结构的基础上,在上暑期的面向对象Java先修课程时,熟悉语言的速度明显加快了很多.Java和C在很多基础语法上非常相似,比如基本的数据类型,循环以及条件分支语句,数组的遍历等. ...
- 2018.09.05 bzoj2726: [SDOI2012]任务安排(斜率优化dp+二分)
传送门 跟Ti" role="presentation" style="position: relative;">TiTi为正数的时候差不多. ...
- 2018.08.19 NOIP模拟 change(简单模拟)
Change 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 Alice 和 Bob 又聚在一起了!他们已经厌倦了取石子游戏,现在他们热衷于切题.于是,Alice 找到了一道题让 B ...
- 第六章 副词(Les adverbes )
副词属于不变词类,无性.数变化(tout除外),它的功能是修饰动词.形容词.副词或句子. ➡副词的构成 ⇨单一副词 bien tard hier mal vite tôt très souvent ...