这是SerComm制造的路由器和家庭网关设备(Linksys,Netgear,Cisco)中存在的MIPS端口,用于固件升级。
这由scfgmgr
侦听端口32764的进程管理。
通过telnet访问时,似乎返回以ScMM
或为前缀MMcS
(取决于系统的字节序)的数据。
这是一个非常简单的二进制协议,带有标头(0xC字节),后跟有效载荷。
标题结构:
typedef struct scfgmgr_header_s {
unsigned long magic;
int cmd;
unsigned long len;
} scfgmgr_header;
这基于Cisco GPL源(例如,已停用的ftp-eng.cisco.com上的wap4410n_v2.0.1.0_gpl.tgz)。
有关实际信息,请参见elvanderb的描述和示例Python代码。
当前,它以基于堆的缓冲区溢出而闻名,可以使您完全访问设备(后门)。这是由Eloi Vanderbeken在2013年圣诞节发现的,但是它很可能在2008年被中国黑客所知道(cgi文件)。
这是工作方法。
基于堆的缓冲区溢出:
讯息:
因此,使用简单的溢出消息可以提供许多有趣的细节:
但是,这可能会导致配置被重置,因此请不要在家中进行配置。
这是路由器通过此端口执行的一些反向命令。
nvram
-转储配置。
get var
-获取配置变量
可能基于堆栈的缓冲区溢出(如果变量由用户控制)
set var
-设置配置变量
基于堆栈的缓冲区溢出,输出缓冲区(大小≈0x10000)在堆栈上。
commit nvram
-从/ tmp / nvram读取nvram / dev / mtdblock / 3并检查CRC
从/ tmp / nvram设置nvram(/ dev / mtdblock / 3); 检查CRC
将桥接模式设置为“开”(不确定,我没有时间对其进行测试)
nvram_set(“wan_mode”, bridgedonly)
nvram_set(“wan_encap”, 0)
nvram_set(“wan_vpi”, 8)
nvram_set(“wan_vci”, 81)
system(“/usr/bin/killall br2684ctl”)
system(“/usr/bin/killall udhcpd”)
system(“/usr/bin/killall -9 atm_monitor”)
system(“/usr/sbin/rc wan stop >/dev/null 2>&1”)
system(“/usr/sbin/atm_monitor&”)
显示测得的互联网速度(下载/上传)
cmd(是的,是一个外壳……)
特殊命令:
- 退出,再见,退出->退出...(有效= 0)
- cd:更改目录(有点WTF)
其他命令:
- stdout处理中的整数溢出(?)无法利用,但仍然...
- cmd输出上的缓冲区溢出(再次相同的缓冲区)…
写文件
- 有效负载中的文件名
- 根目录= / tmp
- 目录遍历是可能的(未经测试,但它是开放的(sprintf(“ / tmp /%s”,有效载荷))…)
返回版本
返回调制解调器路由器ip
恢复默认设置
- nvram_set(“ restore_default”,1)
- nvram_commit
读取/ dev / mtdblock / 0 [-4:-2]
在磁盘(/ tmp / nvram)上转储nvram并提交
资料来源:(幻灯片)Linksys如何拯救我的圣诞节!
通常,此类端口应由IANA正式授权。
这是unSpawn说在2007年LinuxQuestions与此相关的端口:
如果它是IANA正式分配的端口(介于0到30000之间的数字),则其编号应与/ etc / services中的服务(“ getent services portnumber”),扫描程序的服务文件(例如Nmap或在线)相对应像Sans的ISC这样的数据库。
请注意,可以使用本地配置临时端口的使用/proc/sys/net/ipv4/ip_local_port_range
sysctl
。旧的默认值是1024-5000,对于服务器,则使用32768-61000的值,而某些应用程序则需要1025-65535。
还要注意,这些是静态的数字到服务的映射,例如,/ etc / services会说TCP/22
匹配SSH,而在特定情况下并不一定如此,
否则,如果是其中的你不知道哪个进程做了绑定到它,然后,如果你有机会获得,您可以在使用查询主机的端口netstat -anp
,lsof -w -n -i protocol:portnumber
或fuser -n protocol portnumber
。这是最准确的方法,
否则,如果您无权访问主机,则可以通过远程登录来查询它。这不是一种准确的方法,如果主机受到感染,您可能会警告入侵者您的情况。
也可以看看: