首页
社区
课程
招聘
[原创]ivanti CVE-2025-0282 漏洞复现
发表于: 2026-3-23 20:05 1255

[原创]ivanti CVE-2025-0282 漏洞复现

2026-3-23 20:05
1255

下载地址 :

7c7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3N6h3I4K6k6i4A6@1j5g2)9J5k6h3u0D9L8$3u0Q4x3X3g2U0L8%4u0W2i4K6u0W2N6$3W2F1k6r3!0%4M7#2)9J5k6h3&6W2N6q4)9J5c8X3N6S2N6r3g2%4j5i4W2Q4x3V1k6F1M7$3q4Q4x3V1k6u0f1@1q4Q4x3X3c8h3i4K6u0V1g2V1#2i4b7g2u0q4i4K6u0V1d9f1y4e0i4K6u0V1x3U0u0Q4x3X3f1%4f1U0u0Q4x3X3f1K6i4K6u0V1x3K6b7K6x3g2)9J5k6e0q4Q4x3X3g2*7K9i4l9`.

双击ovf,确定虚拟机导入位置,等待它的初始化,等待一段时间后按照要求填写即可。

最后设置管理员账号密码,最后即可在浏览器访问到登陆界面。(注意把虚拟机网络桥接改为NAT

然后如下就是配置好了,访问地址即可

如图就是访问成功了

直接对vmdk进行挂载,会发现被加密了,无法拿到文件系统,搜索相关文章。发现有两种提取固件的方式,一种方式是patch内存,还有一种是逆向启动流程分析解密算法进行文件系统解密

将虚拟机暂停后,会在虚拟机的目录下看到一个vmem的文件,这是该虚拟机的内存,如下:

我们将虚拟机挂起后,把该vmem文件拖到010 editor中对其进行修改,将所有内存文件中的/home/bin/dsconfig.pl字符串为///////////////bin/sh。(为什么是///////////////bin/sh,因为/home/bin/dsconfig.pl是21个字符,要保证/bin/sh也是21个字符所以前面添加 / 保证和/home/bin/dsconfig.pl一样长,这样才不会导致内存偏移发生改变。)

/home/bin/dsconfig.pl是控制台界面执行时需要调用的脚本文件,替换后启动虚拟机等待控制台界面超时后按“回车”,即可获取底层Shell。

修改完后启动虚拟机拿到shell

拿到shell后,我们要想办法拿到文件系统中的各个文件才能进行分析,由于ivanti里面不好操作,也不能粘贴复制,所以我们先反弹个shell远程操作,方便一点。

Ubuntu里面开两个窗口,分别监听88888889,8889用来输入命令,8888用来接收命令的返回。

然后在ivanti里面用telnet反弹shell

成功反弹shell,后面也方便操作了。

然后后面为了方便传输我们还是要开一个类似于FTP,方便后续文件的下载这些。

先查看当前服务器放行的端口

iptables -L -n

然后添加一个上面没有的,单独开一个端口来进行传输

iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

然后用python来启动一个http服务即可,然后即可访问。

python -m SimpleHTTPServer 8000

下载我们需要的文件即/home/bin下的web就可以获得我们所需要分析的文件了。

检查一下可以看到文件是i386的文件32位小端序。

为了方便后续的调试,我们还需要上传gdbserver到ivanti里面

下载地址:718K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5N6h3N6K6P5g2)9J5c8X3N6V1j5W2)9J5k6s2y4@1j5i4c8A6j5#2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6Y4k6r3u0K6k6i4u0$3k6i4u0Q4x3X3b7%4i4K6u0W2x3e0m8Q4x3X3f1I4i4K6u0V1P5o6R3$3i4K6g2X3x3K6t1`.

下载好了后选择在/tmp目录下使用python脚本来进行传输,下面脚本在ivanti里面执行

注意还是要开启:

iptables -A INPUT -p tcp --dport 8888 -j ACCEPT

这个在自己的机子里面执行,自己上传需要的文件

执行完上面两个脚本就能看到gdbserver已经上传到ivanti/tmp目录下了

记得赋执行权限,然后就能用/tmp/gdbserver-static执行gdb服务了,后面也就可以远程调试

将web程序拖入IDA进行分析。

根据网上的漏洞报告可知漏洞在,sub_e3540这个函数,我们跟进分析一下。

上面已经把部分代码的解析给了出来,这里还有个需要注意的就是。

DSWSTncTransportAgentdMessageListener 类有一个虚函数表,其中应该包含消息处理函数。

下面分析消息处理函数也就是漏洞函数。

该函数最后会调用int __cdecl sub_E4AD0(int a1, IftTlsHeader *a2, char *a3)直接跟进分析一下。

如上图红框框中的可以看出,clientCapabilities_len表示的是我们前面发送过去的clientCapabilities字符串的长度。

*(_DWORD *)(a1 + 148): 获取 clientCapabilities 字符串缓冲区当前的 容量。DSStr::reserve(...): 如果当前容量不足以容纳 clientCapabilities_len + 1 个字节,则调用 reserve 函数重新分配更大的内存空间给 a1 + 140 指向的字符串缓冲区。

然后经过值的传递,最后v23 = *(_DWORD *)(a1 + 144) + 1;,紧接着下面的 strncpy 会进行拷贝,因此这里会触发栈溢出,由于是 32 位系统地址的特殊性(很少会发生0截断),使得我们可以几乎随意地设置 gadget

使用openconnect来触发栈溢出,先配置一下环境

主要是为了编译openconnect,下载openconnect

git clone 02aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6G2M7r3g2F1j5$3!0F1L8X3g2U0N6q4)9J5c8X3!0H3k6h3&6U0L8$3&6F1k6h3y4@1i4K6u0W2k6$3W2@1

下载完后进入该目录,然后打开pulse.c文件,找到如下代码:

修改为:

完成之后开始编译

编译完成后我们就可以先测试一下:

./openconnect target_IP --protocol=pulse --dump-http-traffic -vvv

使用当前文件夹下也就是我们改版过的openconnect对目标站点(target_ip/需要根据自己IP进行修改)进行测试。--protocol=pulse指定使用Pulse Connect Secure协议,--dump-http-traffic显示所有HTTP请求和响应的原始数据。-vvv最高级别的调试。

这里解读一下输出信息:


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回