天天看点

[漏洞分析]NetLink GPON RCE

目录

        • 0x01 漏洞回顾
        • 0x02 固件下载及解包
        • 0x03 漏洞分析
        • 0x04 写在最后

0x01 漏洞回顾

漏洞描述:远程命令执行(Remote Code Execution)。

根据exploit-db显示,该漏洞是target_addr字段存在命令注入漏洞,漏洞poc传送门。

漏洞利用条件:需要身份认证。

该漏洞需要身份认证,部分设备的默认用户名/密码为:e8c/e8c。可利用此用户名密码成功登录设备。

漏洞影响:较大。

[漏洞分析]NetLink GPON RCE

0x02 固件下载及解包

Netlink Gpon设备固件可以在官网下载到,传送门。

下载后,直接通过binwalk解包固件即可。

$ binwalk -Me HG323RW_UPGRADE_NETLINK_1.0.35-200817.tar 
           

固件文件结构如下图所示(进查看三级目录结构)。

[漏洞分析]NetLink GPON RCE

0x03 漏洞分析

  1. 根据Poc可知,漏洞发生在提交数据给

    /boaform/admin/formPing

    时候。因此,对固件中的

    /bin/boa

    进行分析。

    当然,也可以通过命令

    grep ‘boaform/admin’ ./* -r

    来匹配看看哪个可执行文件匹配到,再简单分析一下,就可以确定要分析的目标程序。
    $ sudo grep 'boaform/admin' ./* -r
    Binary file ./bin/boa matches
    ...
               
  2. 先查看

    boa

    文件格式。可知,该可执行文件为MIPS架构,大端,32位。
    [漏洞分析]NetLink GPON RCE
  3. 用IDA打开

    boa

    文件。注意,在处理器类型里边,选择好相匹配的内容。本次选择是“MIPS big endian”。
    [漏洞分析]NetLink GPON RCE
  4. 有了前期对poc的阅读,我们清楚地知道,本次漏洞是在对

    boaform/admin/formPing

    提交非法参数引起。因此,我们可以直接打开字符串子窗口,搜索

    formPing

    [漏洞分析]NetLink GPON RCE
  5. 双击,可以在IDA View窗口看到该字符串所在的位置。接着,查看交叉引用, 跳转到引用该字符串的函数中。
    [漏洞分析]NetLink GPON RCE
  6. 阅读汇编代码,可知,获取参数的步骤大致如下:

    加载“formPing”字符串,从客户端提交的参数中获得“target_addr”,保存在"0xA30+var_9FC"中(

    sw $v0, 0xA30+var_9FC

    ),随后,获得"waninf"参数,保存在"0xA30+car_A00"中(

    sw 0xA30+var_A00($fp)

    )。

    0xA30+var_9FC —> target_addr;

    0xA30+var_A00 —> waninf.

    如果

    waninf

    等于0, 则跳转至

    loc_4D6A4C

    ,显然不会跳转过去。继续往下, 如果

    target_addr

    不为0,则跳转至

    loc_4D6BD8

    处。显而易见,此处会跳转分支。
    [漏洞分析]NetLink GPON RCE
  7. 此处似乎是对“target_addr"长度做一个保存。继续跳转至

    loc_4D6D1C

    [漏洞分析]NetLink GPON RCE
  8. 此处,完成一些提示输出,继续跳转至

    loc_4D6FB8

    [漏洞分析]NetLink GPON RCE
  9. 此处进行了一个比较,随后跳转至

    loc_4D6FD8

    [漏洞分析]NetLink GPON RCE
  10. 此处进行一些与用户输入无关的操作,生成并保存一些变量,随后跳转至

    loc_4D7044

    [漏洞分析]NetLink GPON RCE
  11. 此处,先加载写在固件里的bash语句:

    ping %s -c 4 -l %s -w 5 %s > /tmp/ping.tmp

    随后依次将参数“target_addr”等压入栈空间,补全命令语句,最后调用

    /bin/sh -c

    执行刚刚补全的命令语句。

    执行命令大致如下:

    /bin/sh -c 'ping target_addr -c 4 -l ...'

    [漏洞分析]NetLink GPON RCE
  12. 至此分析完毕。

0x04 写在最后

可分析可知,该漏洞形成的原因是:没有对用户输入的字符串进行过滤,接收到参数后,直接保存在内存中,最后在补全命令语句的过程中,直接从内存加载参数。

用户只需构造简单的语句(如添加

;

符号等)即可截断bash命令的前一部分,随后跟随任意命令即可达到任意命令执行,产生漏洞。

加载了恶意参数的最终执行命令如下:

/bin/sh -c 'ping ;/usr/bin/id; -c 4 -l ...'

备注:分析过程中,有些参数并非用户输入可控,乃是程序生成变量,因此未做深入分析。

继续阅读