-
-
[分享]漏洞分析 CVE-2019-6250
-
2023-3-10 14:57
9242
-
漏洞分析 CVE-2019-6250
软件介绍
ZeroMQ(Zero Message Queue) 是一个 C++ 编写的高性能分布式消息队列,是一个非常简单好用的传输层,使得 Socket 编程更加简单、简洁和性能更高效。ZeroMQ 核心引擎是libzmq
环境配置
系统环境 ubuntu18.04(64bit)
目标软件版本: libzmq 7302b9b8d127be5aa1f1ccebb9d01df0800182f3
安装 libzmq
下载目标软件
1 | Git clone https: / / github.com / zeromq / libzmq.git
|
跳转到有漏洞的版本
1 | git reset - - hard 7302b9b8d127be5aa1f1ccebb9d01df0800182f3
|
安装 libtool
1 | sudo apt - get install libtool pkg - config build - essential autoconf automake
|
执行
执行
执行
执行
安装 Cmake
cppzmq 的编译需要版本较新的 Cmake
第一步:卸载原来的cmake版本:
1 | sudo apt - get remove cmake
|
第二步:自 https://cmake.org/download/ 下载cmake源码,cmake-3.26.0-rc5.tar.gz。
第三步:解压cmake源码。在cmake源码所在文件夹中打开命令终端,解压文件:
1 2 | tar - zxv - f cmake - 3.26 . 0 - rc5.tar.gz
cd cmake - 3.26 . 0 - rc5
|
第四步:进入解压后的cmake文件,执行bootstrap。接下来的bootstrap、make、make install三个命令执行时间都很长,需要耐心等待。
出现以下错误可尝试依次使用下列命令,记得重新运行第四步的命令:
1 | sudo apt - get install libssl - dev
|
第五步:编译构建:
第六步:验证安装版本
安装 cppzmq
下载 cppzmq
1 | git clone https: / / github.com / zeromq / cppzmq
|
这一步会卡很久,而且会提示 CMake libzmq package not found,多等一会儿就可以了
转到 demo 文件夹
编辑 demo 文件,添加 helloworld
编译 demo 文件
1 | root@ubuntu:~ / cppzmq / demo
|
demo 文件可以正常执行
1 2 | root@ubuntu:~ / cppzmq / demo
root@ubuntu:~ / cppzmq / demo
|
漏洞复现
分析POC
send 的第三个参数就是 msg_size,是可控的,这里传了一个非常大的数,应该是导致溢出的关键参数
1 2 3 4 5 | const uint8_t v2msg[] = {
0x02 , / * v2_decoder_t::eight_byte_size_ready * /
0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , / * msg_size * /
};
send(s, v2msg, sizeof(v2msg), 0 );
|
跟踪 whoami 在 POC 中的传递
大致了解了POC的流程后我们根据POC作者的指引找到 /root/libzmq/src/v2_deocder.cpp 文件查看源码,从而找到了其溢出的关键代码
也可以在 gdb 中动态调试一下,可以看到 msgsize = 0xffffffffffffffff
1 2 3 4 | break main
r
break zmq::v2_decoder_t::size_ready
c
|
1 2 3 4 5 6 7 8 9 10 11 | [ trace ]──────────────────────────────────────────────────────
[
[
[
[
[
[
[
[
[
[
|
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2023-3-12 19:27
被简单的简单编辑
,原因: