CNVD-2018-01084 漏洞复现

发布时间 2023-11-16 16:35:40作者: 何思泊河

CNVD-2018-01084 漏洞复现

前言

最近摆大烂,好像什么也没干,简单复现下这个漏洞

固件下载

之前想要复现 D-link 的漏洞时,去官网找附件不是没有就是小版本不对,zikh26 师傅给我说了一个网址这个上面 D-link 的附件基本都有 https://ftp.dlink.ru/pub/Router/

漏洞复现

查看了一下官方文档发现漏洞是 /htdocs/cgibin 程序中的 service.cgi

二进制文件静态分析

既然都锁定了漏洞函数就是直接分析一下怎么调用的

这个漏洞是命令注入大概率是通过 system ,结合漏洞在 service.cgi 中通过交叉应用查看调用关系

image-20231115171445021

servicecgi_main函数

进入 servicecgi_main 函数,发现需要给 REQUEST_METHOD 赋值为 POSTGET 都可以

image-20231115172023471

cgibin_parse_request函数

下面就会进入 cgibin_parse_request 函数,通过分析下面的调用流程发现 cgibin_parse_request 的返回值大于零

进入这个函数发现还需要对 CONTENT_TYPE , CONTENT_LENGTH , REQUEST_URI 赋值,具体是什么往下面分析一下。

发现首先会将 REQUEST_URI?进行字符串分割

image-20231116161854199

sub_402B40 函数中会以 = 进行分割然后再以 & 进行分割 格式大概是 aaa?bbb=ccc&ddd

在下面将 CONTENT_TYPE 的前 0xcoff_42C014中的application/ 进行比较,第三个参数 v7 其实就是 CONTENT_LENGTH

image-20231116161843229

如果成功了就会调用 &off_42C014)[3 * v16 - 1] 其中 v161 ,最后调用的是 sub_403B10

image-20231116161827849

进入 sub_403B10 发现首先就是一个比较,也就是说 application/ 后面需要跟 x-www-form-urlencoded ,因为 cgibin_parse_request 函数的返回值必须为非负数,进入 sub_403B10 调试一下发现因该是对发送数据的处理,我没有发送数据,调试发现返回值不为零就没有细看

image-20231116161813786

然后就返回到 servicecgi_main 函数中进入 sess_ispoweruser 在里面会进入 sess_validate 在进入 sub_407660 中,在这个函数中会打开一文件,我是 qemu 模拟的没有这些文件,就直接 patch 掉或着用 set 修改寄存器的值

image-20231116160016350

继续向下走发现是在匹配字符串的,具体这个字符串在哪里控制就调试看看

脚本

qemu-mipsel-static -g 1234 -L . \
    -0 "service.cgi" \
    -E REQUEST_METHOD="GET" \
    -E REQUEST_URI="aaa?bbb=ccc&ddd" \
    -E CONTENT_LENGTH=10 \
    -E CONTENT_TYPE="application/x-www-form-urlencoded" \
    ./htdocs/cgibin

image-20231116160146229

发现是 bbb 也就是 ? 后面 = 前面

image-20231116160509842

至于问什么选着 EVENT 因为他拼接的字符串 event %s > /dev/nullevent不是命令,这样就可以直接输入 ;cmd;

下面就进入 lxmldbc_system 函数了,但是 ida 上面显示的有点错错误,参数显示的不正确

ida

image-20231116161011557

调试发现还有一个参数位置在 =& 中间

image-20231116161306743

看看伪代码因该是拼接到 event %s > /dev/null 中最后被 system 执行

image-20231116161456060

修改改本如下

qemu-mipsel-static -g 1234 -L . \
    -0 "service.cgi" \
    -E REQUEST_METHOD="GET" \
    -E REQUEST_URI="aaa?EVENT=;ls;&ddd" \
    -E CONTENT_LENGTH=10 \
    -E CONTENT_TYPE="application/x-www-form-urlencoded" \
    ./htdocs/cgibin

成功执行

image-20231116161748054