今天分析固件 NAP871。
品牌:Netcore(磊科)
固件名称:_NAP871升级固件.bin(Web 页面标注 Netcore(NAP871)CN-V1.2.31207,2014.11.24,运行时 CGI 上报 V1.2.31209)
下载地址:https://www.netcoretec.com/service-support/download/firmware/312.html
0x00 信息收集:
先解包固件:
binwalk -Me NAP871升级固件.bin


查看 busybox 架构:
file ./squashfs-root/bin/busybox

ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked,
interpreter /lib/ld-uClibc.so.0, no section header
得知架构是 MIPS 32 位大端,uClibc 库,ELF 无节头。
看一下 web 目录和 etc 下的配置:




发现 Web 服务是 boa(/bin/boa,Boa/0.94.14rc21),配置文件 /etc/boa.conf,监听 80 端口,页面根目录 /web。
看启动脚本 /bin/webs,了解 Web 服务是怎么起来的:

#!/bin/sh
...
eval `flash get SUPER_NAME`
eval `flash get SUPER_PASSWORD`
eval `flash get USER_NAME`
eval `flash get USER_PASSWORD`
echo "${USER_NAME}:${USER_PASSWORD}" > /tmp/passwd
echo "${SUPER_NAME}:${SUPER_PASSWORD}" >> /tmp/passwd
...
/bin/boa -p /web -f /etc/boa.conf &
关键信息:boa 是厂商补丁版,用 /tmp/passwd 做 HTTP Basic 认证,账号口令由 webs 脚本从 flash 读出后写入。这个文件后面模拟时要手工 mock。
/web 下只有一个 CGI:/web/cgi-bin/cgitest.cgi,strings 看一下:



导入表里有 apmib_get / apmib_set / system / exec_sh,是典型的 Realtek 方案 AP 配置 CGI,所有业务请求都走它。
前端页面全是预 gzip 的(.htm/.js 都是 gzip 文件,boa 直接返回 Content-encoding: gzip),zcat 解压后分析 JS,在 script/netcore.js 里找到前端调后端的协议:
