
Redis常见端口
Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
Redis数据结构

从多路复用IO来看
在Redis中很多地方调用Linux的epoll方法来实现多路复用,而在Windows系统是没有epoll方法的,Windows下对应的是IOCP模型,
从Redis如何进行持久化来看
RDB持久化的手动备份命令是bgsave,AOF文件过大的重写命令是bgrewriteaof。
原理都是开辟一个子进程对内存进行处理(注意了是子进程,不是子线程),这就涉及到操作系统的机制了。
Redis通过Linux系统的fork函数创建子进程,共享内存里面的代码段和数据段,从而实现了持久化。
然而Windows系统是没有fork函数的。
这里使用docker快速启动Redis


启动容器

protected-mode的yes修改为No

注释 bind 127.0.0.1



如果遇到这个,就用make编译,首先卸载原来的apt安装的版本
然后make编译就可以了
Redis 默认情况下,会绑定 .0.0.0.0:6379 ,如果没有才有相关的策略,比如添加防火墙规则避免其他非信任来源 限制ip访问等,那么就会将 Redis 服务暴露到公网上。如果没有设置密码认证的话(一般为空),会导致任意用户在可以访问目标服务器的情况下,未授权访问 Redis 以及 读取 Redis 的数据。

首先先来看一下info中有哪些信息


原理
在数据库中插入一条Webshell数据,将此Webshell的代码作为value,key值随意(x),然后通过修改数据库的默认路径为/www/wwwroot/html和默认的缓冲文件shell.php,把缓冲的数据保存在文件里,这样就可以在服务器端的/www/wwwroot/html下生成一个Webshell
条件
1、redis和网站要在同一台服务器下
2、知道网站根目录的绝对路径
2、运行redis服务的用户必须有权限向目录写文件
利用方法
将dir设置为/www/wwwroot/html,将指定本地数据库存放目录设置为/www/wwwroot/html;将dbfilename设置为文件名shell.php,即指定本地数据库文件名为shell.php;再执行save或bgsave,则我们就可以写入一个路径为/www/wwwroot/html/shell.php的Webshell文件
首先我们在服务器的根目录中创建一个/www/root的文件夹并用python启动一个临时的HTTP服务


获取当前路径

设置/www/root为指定目录

写入文件

设置写文件

随后尝试访问

这里是肯定不会解析的,因为只是一个HTTP服务,可以看到目录下也有test.php,成功写入

ps: 来自Tatsumaki大佬的博客
条件
Ubuntu


在Ubuntu中尝试之后,发现并没有反弹shell回来,不知道为什么,查询了文章看到有大佬说
所以这里更换Centos尝试,搭建步骤与上文一致,发现centos确实在1分钟左右就返回了shell

按照上面CentOs和Ubuntu写文件的说法,可以来看一下写入的文件权限大小
Linux权限对应表


可以看到CentOs中的是644

Ubuntu中也是644,那么如果真如那篇文章所说,必须是600才会执行的话,那么确实Ubuntu无法执行(
条件
这里就用Centos7搭建的redis作为环境
首先配置ssh密钥登录

然后重启sshd服务
随后尝试连接会提示

随后在Mac上生成密钥
设置.ssh目录
写入公钥

随后就可以使用shh直接连接了

原理
若/etc/passwd和/etc/shadow中同时存在密码,系统会使用/etc/passwd中的密码进行验证 /etc/passwd-是/etc/passwd的备份,成功登录系统后,通过替换/etc/passwd-文件,可以恢复root用户的原密码
Linux存账户密码一般会有/etc/passwd和/etc/shadow,如果两个出现冲突的话,会以/etc/passwd为准。
另外,/etc/passwd的权限一般是644,比/etc/shadow的640要高。而且,redis写入是覆盖的,也就是说,写入进去覆盖之后,其他的都没了,这个过程是有创且不可逆的。
这里用到一个大佬的dockerfile: 819K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6B7N6i4y4@1L8$3&6D9P5e0q4Q4x3V1k6p5L8$3y4C8k6i4u0d9k6h3c8A6M7H3`.`.
或者docker直接下载也可以


随后生成一串密码为YourNewPasswd%1024的密文
另外这段代码
mac下会这样

在kali下就好了

然后写入/etc/passwd
然后就可以使用YourNewPasswd%1024这个密码登录了

这里用vulhub的靶场


exp用这个fa3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6F1x3r3t1H3k6s2W2o6e0W2)9J5c8Y4u0W2k6r3W2K6i4K6u0V1M7X3!0Y4N6h3g2Q4x3X3c8K6k6i4u0$3k6i4u0Q4x3X3g2Y4K9i4b7`.
这执行的时候会遇到错误


多跑几次就行

a59K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1j5J5x3o6p5^5i4K6u0W2P5X3g2J5L8$3&6A6k6$3S2@1M7#2)9J5k6i4u0#2i4K6u0r3N6%4m8Q4x3X3c8U0L8$3&6@1k6h3&6@1i4K6u0r3N6i4m8D9L8$3q4V1M7#2)9J5c8X3#2S2N6r3g2J5K9h3q4D9M7#2)9J5c8U0p5#2i4K6u0V1M7X3g2V1K9i4y4Q4x3X3c8H3L8%4y4@1i4K6u0V1k6i4S2H3L8r3!0A6N6r3q4@1K9h3!0F1i4K6u0W2M7r3c8X3
943K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1I4x3o6t1@1M7$3!0#2i4K6u0W2j5$3!0E0i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8U0j5I4x3e0M7$3y4q4)9J5k6h3S2@1L8h3H3`.
docker search redis
docker pull redis
docker run
-
itd run
-
p
6379
:
6379
-
d redis
docker run
-
itd run
-
p
6379
:
6379
-
d redis
wget http:
/
/
download.redis.io
/
releases
/
redis
-
3.2
.
11.tar
.gz
tar
-
zxvf redis
-
3.2
.
11.tar
.gz
vim redis.conf
make
wget http:
/
/
download.redis.io
/
releases
/
redis
-
3.2
.
11.tar
.gz
tar
-
zxvf redis
-
3.2
.
11.tar
.gz
vim redis.conf
make
cp .
/
redis
-
server
/
usr
/
local
/
bin
/
cp .
/
redis
-
server
/
usr
/
local
/
bin
/
apt remove redis
-
server
https:
/
/
github.com
/
microsoftarchive
/
redis
/
releases
https:
/
/
github.com
/
microsoftarchive
/
redis
/
releases
wget http:
/
/
download.redis.io
/
redis
-
stable.tar.gz
tar
-
xzvf redis
-
stable.tar.gz
cd redis
-
stable
make
cp src
/
redis
-
cli
/
usr
/
local
/
bin
/
wget http:
/
/
download.redis.io
/
redis
-
stable.tar.gz
tar
-
xzvf redis
-
stable.tar.gz
cd redis
-
stable
make
cp src
/
redis
-
cli
/
usr
/
local
/
bin
/
brew tap ringohub
/
redis
-
cli
brew install redis
-
cli
brew tap ringohub
/
redis
-
cli
brew install redis
-
cli
在未授权的情况下,可以利用 Redis 自身提供的 config 命令进行写入shell、写SSH公钥、创建计划任务反弹shell 等。其思路都是先将 Redis 的本地数据库存放目录设置为 特定的目录,然后将 dbfilename \(本地数据库文件名\) 设置为你想写入的文件名称,最后在执行 save 或 bgsave 保存,那么就看在制定的目录下写入指定的文件了。
在未授权的情况下,可以利用 Redis 自身提供的 config 命令进行写入shell、写SSH公钥、创建计划任务反弹shell 等。其思路都是先将 Redis 的本地数据库存放目录设置为 特定的目录,然后将 dbfilename \(本地数据库文件名\) 设置为你想写入的文件名称,最后在执行 save 或 bgsave 保存,那么就看在制定的目录下写入指定的文件了。
redis
-
cli
-
h ip
/
/
无需密码登录
redis
-
cli
-
h host
-
p port
-
a password
/
/
使用redis密码登入redis服务
info
redis
-
cli
-
h ip
/
/
无需密码登录
redis
-
cli
-
h host
-
p port
-
a password
/
/
使用redis密码登入redis服务
info
Config get
dir
[培训]科锐逆向工程师培训第53期2025年7月8日开班!