zoukankan      html  css  js  c++  java
  • NOE77101固件后门漏洞分析

    NOE77101固件后门漏洞分析

    固件获取

    最近学习vxworks固件的分析,尝试对noe77101固件的经典后门漏洞进行分析,就好比学习msf时练习经典的ms08-067一样。noe77101固件的下载地址在此。

    拿到固件之后,unzip noe77101_OS.bin_.zip解压固件,得到FLASH0文件夹和一个commandList.lst文件,FLASH0的文件目录如下:tree

    flash0/wwwroot/conf/exec/目录下找到了NOE77101.bin文件,这应该就是我们要分析的目标了。

    使用binwalk对.bin文件进行分析,binwalk NOE77101.bin,结果如图所示binwalk77101

    使用binwalk提取NOE77101.bin中的文件,binwalk -e NOE77101.bin,得到217和217.zlib两个文件。使用binwalk分析217,binwalk 217,分析结果如图,可以看到此固件使用vxworks内核,binwalk还在固件中识别出了符号表。binwalk217

    固件分析

    现在需要确定固件的cpu架构、大小端格式和固件加载地址,才能使用ida pro进行反汇编。

    使用binwalk的-A参数分析217文件,binwalk -A 217,结果如图所示,可知固件使用PowerPC架构,大端格式。(7.24更新:使用binwalk -Y更加方便)binwalka217

    接下来还要确定固件的加载地址,vxworks固件的常见加载地址是0x10000,但最好还是验证一下。strings 217搜索固件中的字符串,确定字符串表中的最后一个字符串应该是APP_STASTON_MODBUSstrings217

    在010 Editor中搜索字符串APP_STASTON_MODBUS,可知字符串表中的最后一个字符串的地址为0x298BD8。010zifuchuanbiao

    又因为字符串表中的最后一个字符串在符号表中第一个被引用,因此需要定位符号表的第一行,找到该字符串在内存中的地址。前文中已经使用binwalk发现符号表的位置,为0x31EED4。但是这个值不一定是准确的,还需要进一步验证。在010 Editor中定位0x31EED4位置附近,发现符号表真正的起始位置是0x31EEC4。fuhaobiaoneicundizhi

    确定了APP_STASTON_MODBUS字符串在固件中的位置和在内存中的位置,就可以计算得到固件的加载地址了,确实是0x10000。pythonjisuanjiazaidizhi

    函数名修复

    现在可以使用ida pro加载217文件了,处理器选择PowerPC big endian(PPC),固件加载地址填写0x10000。ppc217loadaddress217

    此时的ida pro并没有识别到函数。(mac版ida此时需要按c转为函数,windows的ida可以识别到少量函数)beforerepair

    需要编写脚本修复函数名,但是目前只知道符号表的起始地址,并不知道结束地址。在010 Editor中按照符号表规律往下寻找结束地址,确定是0x348114。fuhaobiaojieshuweizhi

    修复脚本repair.py如下:

    from idaapi import *
    from idc import *
    
    loadaddress = 0x10000
    eaStart = 0x31eec4 + loadaddress
    eaEnd = 0x348114 + loadaddress
    
    ea = eaStart
    eaEnd = eaEnd
    while ea < eaEnd:
        create_strlit(Dword(ea), BADADDR)
        sName = get_strlit_contents(Dword(ea))
        print sName
        if sName:
            eaFunc = Dword(ea + 4)
            MakeName(eaFunc, sName)
            MakeCode(eaFunc)
            MakeFunction(eaFunc, BADADDR)
        ea = ea + 16
    

    修复完成之后可以看到,ida pro成功识别到了8873个函数,可以进行进一步的分析了。repaired

    后门漏洞分析

    查找后门漏洞的一个入手点就是寻找与用户相关的函数的调用情况,注意到函数loginUserAddloginuseradd

    查看此函数的交叉引用情况,发现有三个函数对它进行了调用,分别是usrSecurityFTP_USER_ADDusrAppInituserxref1userxref2

    分别查看以上三个函数,在usrAppInit中发现疑似添加登录用户的操作。在PowerPC中,lis(立即数载入并左移)和addi(立即数加法)的组合是最常见的赋值操作,ida pro的注释中给出了经过赋值之后的结果。以第一次调用为例,实际上是执行了loginUserAdd(0x22DB7C,0x22DB84),这两个内存地址在固件中的实际地址应是再减去固件的加载地址。userappinit

    在010 Editor中定位固件的0x21DB7C(0x22DB7C-0x10000),发现此处的字符串出多次出现“user”字样,由此更加验证了前面的操作是添加多个后门账号。confirm

  • 相关阅读:
    ajax的post提交方式和传统的post提交方式哪个更快?
    请问具体到PHP的代码层面,改善高并发的措施有哪些
    TP为什么这个if判断什么都不显示?
    如何用正则匹配这段文本
    七牛上图片总是net::ERR_NAME_NOT_RESOLVED
    该如何来开发这个喜欢的功能呢?
    打包phar文件过大的问题。
    .map(function(item)...)这个是按hashcode自动遍历的,怎么才能按照我想要的顺序遍历呢?
    Java操作Kafka执行不成功
    webkit事件处理
  • 原文地址:https://www.cnblogs.com/yangmzh3/p/11231423.html
Copyright © 2011-2022 走看看