ZeroMQ(Zero Message Queue) 是一个 C++ 编写的高性能分布式消息队列,是一个非常简单好用的传输层,使得 Socket 编程更加简单、简洁和性能更高效。ZeroMQ 核心引擎是libzmq
系统环境 ubuntu18.04(64bit)
目标软件版本: libzmq 7302b9b8d127be5aa1f1ccebb9d01df0800182f3
下载目标软件
跳转到有漏洞的版本
安装 libtool
执行
执行
执行
执行
cppzmq 的编译需要版本较新的 Cmake
第一步:卸载原来的cmake版本:
第二步:自 https://cmake.org/download/ 下载cmake源码,cmake-3.26.0-rc5.tar.gz。
第三步:解压cmake源码。在cmake源码所在文件夹中打开命令终端,解压文件:
第四步:进入解压后的cmake文件,执行bootstrap。接下来的bootstrap、make、make install三个命令执行时间都很长,需要耐心等待。
出现以下错误可尝试依次使用下列命令,记得重新运行第四步的命令:
第五步:编译构建:
第六步:验证安装版本
下载 cppzmq
这一步会卡很久,而且会提示 CMake libzmq package not found,多等一会儿就可以了
转到 demo 文件夹
编辑 demo 文件,添加 helloworld
编译 demo 文件
demo 文件可以正常执行
复制 POC https://github.com/zeromq/libzmq/issues/3351
在 cmakelists.txt 文件第一行添加
复制到demo并重新编译
send 的第三个参数就是 msg_size,是可控的,这里传了一个非常大的数,应该是导致溢出的关键参数
跟踪 whoami 在 POC 中的传递
大致了解了POC的流程后我们根据POC作者的指引找到 /root/libzmq/src/v2_deocder.cpp 文件查看源码,从而找到了其溢出的关键代码
也可以在 gdb 中动态调试一下,可以看到 msgsize = 0xffffffffffffffff
Git clone https:
/
/
github.com
/
zeromq
/
libzmq.git
Git clone https:
/
/
github.com
/
zeromq
/
libzmq.git
git reset
-
-
hard
7302b9b8d127be5aa1f1ccebb9d01df0800182f3
git reset
-
-
hard
7302b9b8d127be5aa1f1ccebb9d01df0800182f3
sudo apt
-
get install libtool pkg
-
config build
-
essential autoconf automake
sudo apt
-
get install libtool pkg
-
config build
-
essential autoconf automake
.
/
autogen.sh
.
/
configure
make
sudo make install
sudo apt
-
get remove cmake
sudo apt
-
get remove cmake
tar
-
zxv
-
f cmake
-
3.26
.
0
-
rc5.tar.gz
cd cmake
-
3.26
.
0
-
rc5
tar
-
zxv
-
f cmake
-
3.26
.
0
-
rc5.tar.gz
cd cmake
-
3.26
.
0
-
rc5
.
/
bootstrap
sudo apt
-
get install g
+
+
sudo apt
-
get install libssl
-
dev
sudo apt
-
get install libssl
-
dev
make
sudo make install
cmake
-
-
version
git clone https:
/
/
github.com
/
zeromq
/
cppzmq
git clone https:
/
/
github.com
/
zeromq
/
cppzmq
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-3-12 19:27
被简单的简单编辑
,原因: