某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

  • A+
所属分类:web安全 渗透实战

简要描述:
测试代码中,我给出了一个PoC代码用于测试验证漏洞,另外Exp需要根据目标系统版本调整linux下jmp esp地址

详细说明:

下载地址:http://**.**.**.**/download?page=linux
linux下需要对软件进行一下部署,我将简要介绍一下部署过程
1、软件部署
这是no-ip这个动态域名商开发的一个部署在服务器上的更新客户端,存在一处缓冲区溢出,下载此软件后需要在linux操作系统上进行编译,直接切换到文件目录下,用make指令编译即可。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

编译后执行,会报错,因为没有创建.conf配置文件

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

这时需要 -C命令来创建此文件的配置文件,这里需要一个**.**.**.**的帐号密码,我提供一个我申请的,也可以自行申请 帐号 ktesk123 密码 zaqxsw123

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

到此配置完成。
2、漏洞成因及fuzz过程
此漏洞问题出在接口参数-I,其实exploit-db曾爆出一个关于此软件IP地址设置的一个漏洞,但漏洞位置和成因完全不相同,接下来我先给出exploit-db和此漏洞触发点对比,用于证明漏洞并不重复。
exploit-db中,漏洞存在-i,这个参数是用于设置更新的IP地址的,而-I是用于调用接口

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

可以看到,当传入参数长度为300时,-i参数产生了segmentation fault错误,而-I没有,说明此时-i发生了指针错误或者溢出。
发现了这个问题后,我对noip更新客户端进行了一系列fuzz测试,主要还是在字符串长度上做文章,终于发现了-I参数存在的一处缓冲区溢出。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

我们通过gdb-peda回溯漏洞触发的关键位置。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

dynamic_update是漏洞函数,单步步过这个call调用后直接到达漏洞现场,步入这个函数,找到了存在问题的关键代码逻辑。

code 区域
.text:0804C037                 mov     dword ptr [esp+8], offset IPaddress
.text:0804C03F                 mov     dword ptr [esp+4], offset aIpS ; "&ip=%s"
.text:0804C047                 lea     eax, [ebp+s]
.text:0804C04D                 mov     [esp], eax      ; s
.text:0804C050                 call    _sprintf

call _sprintf之后,可以观察一下堆栈的变化情况。
call调用前,主要观察ebp寄存器

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

call调用之后

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

在call调用结束后,ebp的地址存放的值被我们构造的数据(AAAAAA)覆盖(证明数据可控),到dynamic_update函数末尾。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

这里执行了一个leave指令,该指令作用是将ebp的地址推给esp,而此时ebp已经被AAAA覆盖,交给esp后,esp地址对应的值也是AAAAA,之后执行ret就是返回到esp,esp被AAAAA覆盖,程序失去控制权。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

问题出现在dynamic_update函数中调用sprintf时没有对参数长度进行有效检查,从而导致缓冲区溢出。
3、exp构造
通过尝试构造不同长度的字符串来确认地址覆盖位置。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

通过这种方法,最后我们确定了覆盖位置。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

最后我们可以构造一个exp,将这个exp编译成一个elf文件,用户执行“更新文件”后,可以执行任意代码。

某动态域名厂商最新版更新客户端存在漏洞执行我“更新文件”可远程执行任意代码

发表评论

您必须才能发表评论!