• 11
  • 11
分享
  • 两方面讲透什么是微信小程序渗透测试——软件测试圈
  • 曼倩诙谐 2021-06-17 09:59:44 字数 1676 阅读 1854 收藏 11

  引言

  自2017年面世以来,微信小程序以其相较于APP的进入门槛更低,开发周期更短,费用更低的优势,已经构造了新的微信小程序开发环境和开发者生态。

  当前,微信小程序已经赋能了社交、娱乐、旅游出行、购物、餐饮、支付、理财等多种场景。

  但随着小程序生态的建立,其特有的安全风险也逐步显示出来:因为小程序本质也是网页交互,其通讯更容易被破解。

  本文将从客户端和服务器两个层面讲解微信小程序渗透测试。

  客户端层面

  客户端方面,主要是对微信小程序进行反编译,得到源代码,检测源代码的保护强度以及是否存在信息泄露,如密钥硬编码等。

  要进行反编译,关键是要获取小程序的 .wxapkg 文件。接下来以安卓手机为例,演示反编译的过程和需要的工具。

  前置条件:

  (1)一个root的安卓手机(安装RE文件管理器);

  (2)手机微信打开要测的小程序(打开后,微信会自动缓存小程序的.wxapkg文件);

  (3)一台安装了node.js运行环境的电脑(官网下载安装即可)。

  第一步:电脑上安装反编译工具wxappUnpacker

  gitbub下载wxappUnpacker:

  https://github.com/58810890/wxappUnpacker。下载完成后,到wxappUnpacker目录下安装依赖:

npm install esprima 
npm install css-tree 
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify

2-1.png

2-2.png

  安装完成后,输入如下命令查看,如正常返回,则表示成功。

2-3.png

  第二步:安卓手机上打开RE文件管理器,在如下目录找到小程序的.wxapkg文件:

  /data/data/com.tencent.mm/MicroMsg/(一长串字符串)/Appbrand/pkg

2-4.jpg

  将对应的wxapkg文件拷贝到电脑上wxappUnpacker目录的子目录testpkg下,这个目录是自己创建的。

2-5.png

  第三步:运行反编译的命令如下:

  node wuWxapkg.js  ./testpkg/_-238827099_223.wxapkg

2-6.png

  执行后,查看结果,如果出现如下信息,则表示反编译成功。

2-7.png

  反编译成功后,在vs code中打开即可看到源代码。

2-8.jpg

  服务端层面

  在服务端层面,主要是依据微信小程序的特性,模拟攻击者从SQL注入、越权访问、文件上传、CSRF以及信息泄露等漏洞方面进行测试,这个其实与常规的web安全测试类似。

  而测试的关键步骤就是进行微信小程序的报文抓取。

  这里推荐使用苹果手机进行测试,原因是Android7.0以上系统、微信7.0版本及以上均不信任用户自定义安装的个人证书,所以无法抓取小程序的HTTPS报文。

  因此,建议使用苹果设备,在设备上安装了抓包工具如Burpsuite的证书后,将其设置为根证书信任,这样就能抓取小程序的HTTP报文了。

  第一步:打开抓包工具,设置代理IP和端口

2-9.png

  第二步:在手机端的Wlan连接中,设置对应的代理IP和端口。

  第三步:打开微信小程序,操作功能,Burpsuite进行抓包。

  第四步:对抓到的报文进行分析, 如下面的请求报文中传了一个参数memberNo,看到这个参数一般就能想到去对参数进行篡改,看是否存在memberNo遍历、水平越权、SQL注入等等。

2-10.png

  对于如下HTTP响应报文,我们也可以检测是否有多余的信息回显、敏感信息泄露等。

2-11.jpg

  总结

  本文从客户端和服务器两个层面讲解了微信小程序渗透测试。

  在客户端层面,主要是通过获取小程序的wxapkg包,然后进行反编译,对源代码进行分析判断是否存在信息泄露和保护强度不足的漏洞。

  服务端层面,主要是通过中间人攻击的方式,截获报文,篡改报文从而检测是否存在SQL注入、越权访问、文件上传、CSRF以及信息泄露等漏洞。



刘沅斌   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   前言  在做Web端自动化中,经常会使用到JS语法来辅助我们定位元素或者来修改元素的一些属性,从而达到自动化用例正常编写,今天安静来介绍下JS通过Selenium在Web端自动化中常用到的场景。  JavaScript  在介绍场景时,先介绍下什么是JS,即JavaScript的简写。一种具有函数优先的轻量级,解释型或即时编译型的编程语言。它是作为开发Web页面的脚本语言而出名。  调用JS元素  既然JS语法可以在Selenium中进行使用,是通过什么来实现的呢?通过WebDriver中的execute_script()的方法来实现JS语法的操作。  那么JS元素在Web端自动化中具体的...
            13 13 2046
            分享
          •   1-Wapiti  Wapiti作为一个高效的web项目安全测试工具,它支持用户对web应用程序进行评估。运用“黑盒测试”技术,它可以在Web应用中检查出可能存在的缺陷漏洞。  在测试过程中,Wapiti会对网页进行扫描,并注入测试数据来查找安全隐患。Wapiti支持GET和POST方法的HTTP攻击,可确认多种类型的安全漏洞,比如:  ·文件泄露(File disclosure)  · 数据库注入(Database Injection)  · 跨站脚本注入(XSS Injection)  · 命令执行探测(Command Execution Detectio...
            0 0 3533
            分享
          • 一般我面试的过程都是这样的:首先,先来个简单的自我介绍吧,简单讲下都参与了项目中的哪个阶段,对测试的理解,实战一个测试用例设计,最后是一些个人兴趣探讨。而我心目中的完美答案是这样的,如果能达到这样基本就会很满意~~测试阶段~需求分析阶段:确认需求和要求,参与需求评审会议和软件概要设计评审会议。测试计划阶段:编写测试计划,根据概要设计确认测试重点,安排每个版本要测试的内容。编写测试用例:编写测试用例并安排评审。测试执行阶段:搭建环境,进行测试,管理缺陷。输出测试报告:输出测试报告,给出能否上线结论。~测试设计~除了一些客观条件,我在面试时都会问一个点,地址,这个功能怎么测?地址这个点看似简单,实...
            3 3 7961
            分享
          • 1.说说你知道的创建线程的方式继承Thread类,重写run方法。实现Runnable接口,重写run方法。实现Callable接口,重写call方法。通过线程池创建线程。2.说说Runnable和Callable的区别Callable可以返回一个类型V,而Runnable不可以。Callable能够抛出checked exception,而Runnable不可以。Future和FutureTask留给你们!我放GitHub上了(uphe)3.说说通过线方程池创建线程的式Executors.newCachedThreadPool();创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收...
            14 14 2531
            分享
          • UI自动化是自动化测试中不可分割的一部分,是黑盒测试的一种重要手段。在UI自动化测试过程中,我们不可避免会遇到各种各样的问题,现将自己在测试过程中遇到的问题进行汇总,希望可以为大家提供帮助。1、启动浏览器报错报错信息:Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'...
            0 2 2236
            分享
      • 51testing软件测试圈微信