STATEMENT

新闻稿

虽然散播、借助该文所提供更多的重要信息而导致的任何人间接或是间接地的不良后果及经济损失,均由普通用户生前负责管理,火神众测及该文译者不有鉴于此分担任何人职责。

火神众测保有为此该文的修正和议决。轴果转发或散播此该文,要确保此该文的准确性,主要包括著作权新闻稿等该文。需经火神众测容许,严禁任一修正或是不定此该文文本,严禁以任何人形式将其用作商业性目地。

注:职责编辑牵涉文本均已Damazan,无真实世界安全漏洞公布,预测第一类均为恒定机能点,该些统计数据均遵照北欧国家法规。

No.1 前言

时间过得好快,虽然忙着谈恋爱笔者已经有快一年没有写过完整的技术该文了。再回看笔者去年写的《QQ小流程测试五脉》一文,该文中还是有许多可以改进和不准确的地方,也有因为当时自身思维局限而没有突破的地方。《QQ小流程测试五脉》中的许多技术手段已经过时,编写的脚本也因QQ版本升级需要修正之后才能使用,但其中抽象的思路仍是十分有价值的。笔者希望自己的每一遍该文都能给读者带来独到的测试基本功及深入思维的测试逻辑,该文中的例子会过时、该文中的手段会被更新,但其中的魂是不会变的。

笔者近遇到了一个小流程,需要在电梯中扫描小流程生成的二维码才能去对应楼层的电梯。二维码是动态生成且统计数据被进行了加密,此外小流程还有防截屏机能不让你截屏分享给他人,若多次截屏将会禁用当前账户。但笔者的手机信号不太好老是刷新不出来二维码,于是想弄一个不需要依托网络及小流程的离线电梯二维码工具。笔者发现在预测这个小流程的过程中,几乎用到了所有针对小流程预测的基本功,这些基本功都很有价值且是《QQ小流程测试五脉》中没有展开详将的文本,于是便有了这篇笔者自认为不错的技术该文想分享给大家。职责编辑看似是在讲一个实实在在的例子,却有许多抽象的基本功蕴含其中。

No.2调试前准备

首先我们需要一台已经root的安卓手机或是已经越狱的IOS手机,在手机内运行目标小流程并在如下目录中找到以.wxapkg结尾的QQ小流程包将其拉取至我们的电脑上(小流程包命名随机,可更具时间顺序推测出对应的包):

安卓保存路径:

/data/data/com.tencent.mm/MicroMsg/{用户ID}/appbrand/pkg/

IOS保存路径:

/var/mobile/Containers/Data/Application/{流程UUID}/Library/WechatPrivate/{用户ID}/WeApp/LocalCache/release/{小流程ID}/

在提取到QQ小流程包之后只需使用wxappUnpacker工具,项目地址:

https://github.com/rtcatc/wxappUnpacker

将其解包即可,如下图所示该工具会自动预测小流程包并还原对应的文件:

QQ小流程源代码预测基本功插图

还原结束之后我们便可以在当前目录下看到目标小流程的所有原始代码和资源文件:

QQ小流程源代码预测基本功插图1

在拿到了还原之后的文件我们可以把其作为一个恒定的项目源代码在QQ开发者工具中使用,我们在QQ开发者工具中选择 导入项目机能,选择对应的小流程存放目录。在AppID一栏可以使用自己的小流程AppID或是QQ分配的测试号AppID均可。

QQ小流程源代码预测基本功插图2

来到QQ小流程开发界面之后,我们还有许多工作要做,虽然QQ的安全策略限制在默认情况下所有不在小流程白名单之中的域名都是无法被请求的,会被QQ间接拦截。我们需要在详情、本地设置中勾选不校验合法域名一栏的选项。此外若对应的小流程使用了npm则需开启开启npm模块机能,ES5转ES6和增强编译两个机能可以按照需求进行关闭或打开操作,具体评判标准为只要小流程能恒定运行即可。

QQ小流程源代码预测基本功插图3

当一切基本设置都结束之后,我们来到调试器Console界面,发现流程抛出了严重错误,提示:Error: This application has not registered any plugins yet.通过报错文本我们可以猜测小流程在某个位置引入了一个QQ小流程插件,但是因为我们没有注册对应的插件导致插件文本无法导入,导致流程无法继续运行。

QQ小流程源代码预测基本功插图4

根据提示:at Bluekey.js? [sm]:1我们知道具体的问题代码位于Bluekey.js文件的行处,我们点击对应的超链接查看对应的报错代码。

QQ小流程源代码预测基本功插图5

可以看到在代码内小流程使用了requirePlugin函数来引用对应的插件,此时我们有两种处理形式:1. 在app.json配置文件中添加对应插件的引用;2.若插件对本次预测不重要可以间接使用require(js文件地址)函数将所有的引用替换为引用一个本地js文件。

QQ小流程源代码预测基本功插图6

在解决了外部插件引用问题之后,我们看到Console抛出了渲染层错误的异常的错误:Connot delete property WeixinJSBridge of 。

QQ小流程源代码预测基本功插图7

出现此类错误意味着非代码本身存在问题,而是QQ开发者工具出现了兼容性错误,我们可以选择更新至新版本的QQ开发者工具或在本地设置中选择不同版本的调试基础库即可解决此类异常。

QQ小流程源代码预测基本功插图8

修正完调试基础库版本之后等待小流程重新渲染,此时在Console内已无影响流程恒定运行的报错,剩下的一些都是系统提示:

QQ小流程源代码预测基本功插图9

随后便可以在开发者工具内随意调试小流程的该文,调试前准备到此结束。

QQ小流程源代码预测基本功插图10

No.3 文本逻辑预测

来到QQ小流程的主页,点击下方tab栏中的开门按钮,前往我们要预测的对应页面。

QQ小流程源代码预测基本功插图11

当我们来到对应页面时,QQ小流程立刻跳转到了登录页面:

QQ小流程源代码预测基本功插图12

这时需要我们来到调试器窗口切换到Wxml选卡,查看当前页面渲染之后的原始页面源代码。可以看到如下图当前页面嵌入了一个webview形式的h5的登录页面,所有的登录操作都在h5页面内完成。

QQ小流程源代码预测基本功插图13

遇到这种情况常规的解决思路很简单,我们只需要输入自己的账户登录即可。按照这个思路,我们在登录页面输入账号密码进行登录操作登录,随后我们发现系统提示跳转到了人脸识别验证模块,但虽然此时在QQ开发者工具内是无法在h5页面内唤起摄像头的,我们便也无法完成人脸识别操作进行QQ小流程的登录,常规的解决思路在这里并不可行。

QQ小流程源代码预测基本功插图14

此时我们只能从小流程源代码入手,找到小流程对应的登录判断形式来绕过全局登录校验进行下一步预测操作。来到app.json配置文件中,所有的tab栏配置均在tabBar的json列表内,可以看到对应的开门模块位于/pages/miniCode/minicode页面中。

QQ小流程源代码预测基本功插图15

来到对应页面的js文件中,在第78行处我们发现存在跳转至登录页面的代码:

QQ小流程源代码预测基本功插图16

可以看到小流程跳转到登录页面是因为在第76行处函数调用出现异常触发了catch机能自动执行了跳转的代码。我们向上追溯发现所调用的函数位于第44行处为s.getAppminiCode。

QQ小流程源代码预测基本功插图17

来到getAppminiCode函数中,我们发现函数首先会将全局统计数据中的e.globalApi.getQrCode的url地址传入a中作为api请求地址,接着创建一个ajax请求去触发对应的api,然后通过if函数判断http的响应码是否为200,若为200则先判断手机时间是否存在误差并将获取到的返回包中的token和qr值保存在本地的Strage中。

QQ小流程源代码预测基本功插图18

接着我们进入ajax函数继续进行预测,可以看到函数会将当前用户的openid赋值给uniqueId变量放置在o变量中,接着会将o变量文本与小流程的http请求头文本合并传入a变量中,后在wx.requesthttp请求函数内将a作为当前http的请求头。至此我可以判断出当前小流程的所有api都是通过请求头内的openid参数值来进行身份校验的。

QQ小流程源代码预测基本功插图19

在常规思路中,我们只需要在调试器的Storage模块中新建一个openid的key然后将自己的openid存入即让成功进入登录状态。

QQ小流程源代码预测基本功插图20

但在笔者的测试过程中,此小流程在每次重新启动的时候会触发一个http的请求去重新获取用户的openid值导致每次Storage中的openid值被清空。

QQ小流程源代码预测基本功插图21

当遇到这种情况时,我们可以去寻找对应触发openid参数修正的函数或是通过全局查找的形式将所有需要通过wx.getStorageSync函数获取openid值的代码间接替换为使用我们固定的openid文本:

QQ小流程源代码预测基本功插图22

替换完成之后QQ开发者工具会重新渲染小流程,稍等片刻便可看到QQ小流程已经是登录状态,我们成功获取到开门二维码:

QQ小流程源代码预测基本功插图23

我们在调试器的network模块中观察对应的API请求的返回包文本,看到有两个比较关键的参数:token和userId。

QQ小流程源代码预测基本功插图24

随后我们点击谷歌开发者工具的小鼠标按钮:

QQ小流程源代码预测基本功插图25

将鼠标移动到对应的二维码上面,我么可以很清晰的看见当前二维码的class为qr-image:

QQ小流程源代码预测基本功插图26

之后在调试器的审查元素模块中可以看到对应图片的地址为本地缓存目录:

QQ小流程源代码预测基本功插图27

之后我们在开发者工具的编辑器窗口中打开对应页面的原始wxml,搜索classqr-image我们找到了原始的图片地址为{{imagePath}}变量的值:

QQ小流程源代码预测基本功插图28

随后我们来到页面所属的js文件内,搜索imagePath变量被赋值的位置,成功搜索到位于canvasToTempFilePath函数中。

QQ小流程源代码预测基本功插图29

继续追溯canvasToTempFilePath被调用的位置,我们来到了createQrcode函数中。

QQ小流程源代码预测基本功插图30

接着继续进行追溯操作,终我们来到第51行代码处为初调用createQrcode函数的位置。往上研究,我们发现二维码的文本存储在46行的qrcodeUrl之中,而qrcodeUrl的文本正是通过之前API调用获取到的两个参数值userId和token经过e.default处理后产生的统计数据。

QQ小流程源代码预测基本功插图31

之后我们将鼠标放置于e.default之上,开发者工具会为我们自动显示对应文本的引用地址,我们看到对应的地址为utils/pocsirCode。

QQ小流程源代码预测基本功插图32

我们来到pocsirCode.js文件中,在行的e函数内便可以看到一个使用crypto-jsnpm库的标准aes加密函数,当前加密采用cbc模式不使用填充。e为待加密文本,r为加密密码,s为加密向量,终的加密结果使用base64编码之后返回。

QQ小流程源代码预测基本功插图33

可以推测出e函数是一个非常关键的函数,我们可以先开始调试e函数,间接使用console.log命令输出函数传入的所有变量值。重新运行小流程后我们看到控制台输出了三个被crypto-jshex处理之后的文本:

QQ小流程源代码预测基本功插图34

接着我们改进我们输出的形式,将所有被hex处理过的函数使用.toString()的办法转换为字符串之后再次输出。重新回到控制台,我们发现待加密文本和加密密码已经成功以字符串的形式输出,加密向量则虽然是object类型的变量无法被输出。我们观察待加密文本,发现开头部分好像是当前系统的时间,后面接的两段则是传入的userId变量和token变量的变量值。

QQ小流程源代码预测基本功插图35

结束完e函数的预测之后回到default的预测,我们来到文件末尾在第42行处找到了对应执行的函数。函数首先会将userID的值赋值给a,随后将token的值拼接000000赋值给o,随后将所有的文本通过01 + 年年月月日日分分秒秒当前日期 + 00 + a + o + 00的格式赋值给u。随后调用先前的e加密函数传入u作为待加密文本、传入s作为加密密码、传入n作为加密向量进行加密并返回加密之后的结果。

QQ小流程源代码预测基本功插图36

接着来到文件中间部分,我们发现了加密密码s变量和加密向量n变量的文本。n变量的值为:{sigBytes: 16, words: [1735354213, 1852405107, 825373492, 892745528]},s变量值的文本为r变量值的SHA256值,r变量的值为:{sigBytes: 8, words: [1735354213, 1852405107]},虽然上述变量的值均为固定值,我们的加密预测到此结束,我们完成了所有必要的预测操作。

QQ小流程源代码预测基本功插图37

No.4 验证及借助

知道了加密形式及加密流程之后我们便可以开始进行借助,这里推荐使用node.js编写POC脚本,很多QQ小流程的函数可以间接复制过来使用特别的方便。首先引入crypyo-js模块作为CryptoJS使用。随后将userId和token文本按照设置格式进行拼接,形成终的待加密文本。后在Encrypt函数中将待加密文本进行HEX处理,然后进行加密操作,返回终的加密结果。

QQ小流程源代码预测基本功插图38

编写完毕脚本之后,在控制台运行,成功输出加密之后的文本:

QQ小流程源代码预测基本功插图39

至此,我们便可以随时随地不依托于网络及QQ小流程生成自己的电梯二维码了。

RECRUITMENT

招聘启事

安恒火神众测SRC运营(实习生)————————【职责描述】1.  负责管理SRC的微博、QQ公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;2.  负责管理白帽子提交安全漏洞的安全漏洞审核、Rank评级、安全漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;3.  参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;4.  积极参与火神众测的品牌推广工作,协助技术人员输出优质的技术该文;5.  积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。【任职要求】1.  职责心强,性格活泼,具备良好的人际交往能力;2.  对网络安全感兴趣,对行业有基本了解;3.  良好的文案写作能力和活动组织协调能力。

简历投递至

bountyteam@dbappsecurity.com.cn

设计师(实习生)

————————

【职位描述】负责管理设计公司日常宣传图片、软文等与设计相关工作,负责管理产品品牌设计。【职位要求】1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;2、有良好的美术功底,审美能力和创意,色彩感强;

3、精通photoshop/illustrator/coreldrew/等设计制作软件;4、有品牌散播、产品设计或新媒体视觉工作经历;【关于岗位的其他重要信息】企业名称:杭州安恒重要信息技术股份有限公司办公地点:杭州市滨江区安恒大厦19楼学历要求:本科及以上工作年限:1年及以上,条件优秀者可放宽

简历投递至

bountyteam@dbappsecurity.com.cn

安全招聘

————————公司:安恒重要信息岗位:Web安全 安全研究员部门:战略支援部薪资:13-30K工作年限:1年+工作地点:杭州(总部)、广州、成都、上海、北京

工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…【岗位职责】1.定期面向部门、全公司技术分享;2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、安全漏洞公布并落地沉淀;3.负责管理完成部门渗透测试、红蓝对抗业务;4.负责管理自动化平台建设5.负责管理针对常见WAF产品规则进行测试并落地bypass方案【岗位要求】1.至少1年安全领域工作经验;2.熟悉HTTP协议相关技术3.保有大型产品、CMS、厂商安全漏洞挖掘案例;4.熟练掌握php、java、asp.net代码审计基础(一种或多种)5.精通Web Fuzz模糊测试安全漏洞挖掘技术6.精通OWASP TOP 10安全安全漏洞原理并熟悉安全漏洞借助方法7.有过独立预测安全漏洞的经验,熟悉各种Web调试基本功8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)【加分项】1.具备良好的英语文档阅读能力;2.曾参加过技术沙龙担任嘉宾进行技术分享;3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;4.具有大型SRC安全漏洞提交经验、获得年度表彰、大型CTF夺得名次者;5.开发过安全相关的开源项目;6.具备良好的人际沟通、协调能力、预测和解决问题的能力者优先;7.个人技术博客;8.在优质社区投稿过该文;

岗位:安全红队武器自动化工程师薪资:13-30K工作年限:2年+工作地点:杭州(总部)【岗位职责】1.负责管理红蓝对抗中的武器化落地与研究;2.平台化建设;3.安全研究落地。【岗位要求】1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等统计数据存储方案;3:熟悉域安全以及内网横向渗透、常见web等安全漏洞原理;4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。【加分项】1.有高并发tcp服务、分布式等相关经验者优先;2.在github上有开源安全产品优先;3:有过安全开发经验、独自预测过相关开源安全工具、以及参与开发过相关后渗透框架等优先;4.在freebuf、安全客、先知等安全平台分享过相关技术该文优先;5.具备良好的英语文档阅读能力。

简历投递至

bountyteam@dbappsecurity.com.cn

岗位:红队武器化Golang开发工程师

薪资:13-30K工作年限:2年+工作地点:杭州(总部)【岗位职责】1.负责管理红蓝对抗中的武器化落地与研究;2.平台化建设;3.安全研究落地。【岗位要求】1.掌握C/C++/Java/Go/Python/JavaScript等至少一门语言作为主要开发语言;2.熟练使用Gin、Beego、Echo等常用web开发框架、熟悉MySQL、Redis、MongoDB等主流统计数据库结构的设计,有独立部署调优经验;3.了解docker,能进行简单的项目部署;3.熟悉常见web安全漏洞原理,并能写出对应的借助工具;4.熟悉TCP/IP协议的基本运作原理;5.对安全技术与开发技术有浓厚的兴趣及热情,有主观研究和学习的动力,具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。【加分项】1.有高并发tcp服务、分布式、消息队列等相关经验者优先;2.在github上有开源安全产品优先;3:有过安全开发经验、独自预测过相关开源安全工具、以及参与开发过相关后渗透框架等优先;4.在freebuf、安全客、先知等安全平台分享过相关技术该文优先;5.具备良好的英语文档阅读能力。简历投递至

bountyteam@dbappsecurity.com.cn

END

QQ小流程源代码预测基本功插图40

QQ小流程源代码预测基本功插图41

QQ小流程源代码预测基本功插图42

长按识别二维码关注我们

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: