萌约 MoeYork

一个普通的博客站点

0%

某光猫提权过程

今天研究家里的光猫(KD-YUN-811G),发现默认开了 telnet,用户名 telnetadmin, 密码 telnetadmin。结果登陆上去发现是个假 shell,里面什么命令都没有,也没有 sh 命令。

折腾一顿发现 http 界面可以开 ftp 服务器,登陆进 ftp 可以访问到光猫文件系统。

下载下来 /etc/telnetd, 拖进 ida 反编译找到登陆逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
// start -> _ftext:
/* read arguments */
/* cmsMsg_initWithFlags */
/* cmsMdm_initWithAcc */
/* initLoggingFromConfig */
/* make_new_session */ {
cmsCli_printWelcomeBanner();
if (!cmsCli_Telnetauthenticate(NetworkAccessMode_igd, 600)) {
cmsCli_run(msgHandle, 600);
}
}

这些函数都在 libcms_cli.so 中,这里重点关注 cmsCli_run: 参考网上的源码可知处理输入的逻辑在 processInput 中:

1
2
3
4
5
6
// processInput
if (input[0]) {
if ( cli_processCliCmd(input) != 1 && cli_processHiddenCmd(input) != 1 )
log_log(3, "processInput", 393, "unrecognized command %s", v3);
/* XXXXXX */
}

再看看 cli_processHiddenCmd:

1
2
3
4
// cli_processHiddenCmd
if ( strncasecmp(input, "muma@door", strlen(input)) ) {
prctl_runCommandInShellBlocking(input);
}

输入 muma@door,发现其实是 busybox,这样就可以正常使用命令了:
结果截图