NOE77101 vxworks后门账户分析

首先在github上找到noe77101固件,下载到本地,主要用的固件文件是noe77101.bin

使用binwalk -Me命令将noe固件解包

得到两个文件 217  217.zlib

使用binwalk分析文件217,可以看到有很多固件中包含很多信息,HTML、路径、xml、copyright、symbol table等

接下来需要提取固件的加载地址base address

针对elf封装的固件文件,在elf头中有特定数据位记录了固件的加载地址,通过读取elf头,可以直接获取固件加载地址。

使用binwalk -A 命令获取目标固件CPU架构等信息

能确定架构powerpc big endian

根据binwalk分析的bin文件,存在vxworks的符号表,地址在0x31EED4,查看此地址处数据,红框内容分别表示符号表名地址,符号表地址和符号表类别

据此,实际上符号表起始位置在0x31EED4-0x10 = 0x31EEC4处

使用strings命令查看217,预测APP_STATION_MODBUS是最后一个符号表名

地址位于0x298BD8处

这样就计算出偏移为 0x002A8BD8 – 0x00298BD8 = 0x10000

继续查找符号表函数末尾,结束地址为0x00348114

根据以上分析,就可以写出解码函数的代码了

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

idapro载入的时候,需要选择架构和基址

注意修改两个地址值为0x10000

分析的代码是这样的,也没分析出有用的函数名

选择执行script,执行python脚本,运行后看到idapro分析出8909个函数

或者用Ghidra工具载入217文件,选择不分析

选择vxhunter插件针对ghidra的脚本文件,右键run

主版本选5.0

成功分析出各种函数

以上两种方法都可以得到vxworks固件的函数名,接下来就是分析默认添加的后门用户了

在idapro中,看到loginUserAdd函数的交叉引用

在usrAppInit中可以看到多出loginUserAdd调用,地址位于0x22DBxx处

根据偏移0x10000,在winhex中查看0x21DBxx处数据,存在好多硬编码字符,这些都是预留的后门账户和密码

在ghidra中,也可以根据还原的伪代码看到loginUserAdd添加的账户和密码

参考资料

https://github.com/ameng929/NOE77101_Firmware/

https://paper.seebug.org/613/

https://github.com/dark-lbp/vxhunter

https://www.cnblogs.com/yangmzh3/p/11214451.html

您可能还喜欢...