提前声明:最近越来越不爱解释代码了,如果哪些代码你看着很奇怪,可以找我要固件自己分析,东西都不难的。
设备配好后扫了一下发现22和23端口是开放的,那就先不拆了。默认用户名密码 admin/admin提取固件,可以看到这里有很多分区。一般来说直接提取rootfs就行了。这里我选择提取Image_ALL,看看有没有别的好玩的。dd if=/dev/mtd16 of=/tmp/image.img不过/tmp的空间不够用,会导致设备重启,这里可以直接用nc读出。解包binwalk就行。整个web服务是使用goahead实现的。所有的功能api也都是在里边实现的。先来分析下goahead权限管理,因为这个权限管理也是花我时间最多的,反正最后没绕过。这里是典型的权限认证。 if ( strcmp(a6, "/adm/syscmd.asp")
|| (memset(v30, 0, sizeof(v30)), sprintf(v30, "pwd=%s", passwd_for_syscmd), *a7) && !strcmp(a7, v30) )
v16 = 0;
if ( strcmp(a6, "/")
&& strcmp(a6, "/index.asp")
&& strcmp(a6, "/robots.txt")
&& strncmp(a6, "/style/", 7)
&& strncmp(a6, "/js/", 4)
&& strcmp(a6, "/title.gif")
&& strncmp(a6, "/lang_pack/", 11)
&& strcmp(a6, "/goform/websLogin")
&& strcmp(a6, "/goform/setLanguage")
&& strcmp(a6, "/goform/updateCaptchaimg")
&& (strncmp(a6, "/reboot", 7) || !strcmp(a6, "/reboot.asp")) )
if ( strcmp(a6, "/adm/reboot.asp") || (v16 = 0, !cmd_reboot) )
if ( g_need_update == 1 )
nvramUpdate(0);
acl_obj_destroy();
acl_obj_init();
g_need_update = 0;
if ( (a1[78] & 0x40) != 0 )
if ( (a1[78] & 0x100) != 0 )
updateMenu(a6, a7, 3);
v16 = 0;
if ( a7 && !strcmp(a7, "NeedReboot") )
setNeedReboot();
else
v19 = nvram_bufget(0, "WebIdleTimeout");
v21 = atoi(v19);
RequestIpaddr = websGetRequestIpaddr(a1);
v22 = (_DWORD *)dword_4D7D48;
v23 = RequestIpaddr;
if ( !dword_4D7D48 )
goto LABEL_49;
v24 = a1[70];
while ( !v24 || strcmp(v23, v22) || !strstr(v24, v22 + 18) )
v22 = (_DWORD *)v22[29];
if ( !v22 )
goto LABEL_49;
a1[88] = v22[16];
if ( 60 * v21 )
v22[17] = time(0);
if ( (a1[78] & 0x100) != 0 )
updateMenu(a6, a7, a1[88]);
if ( a7 && !strcmp(a7, "NeedReboot") )
setNeedReboot();
v16 = 0;
if ( sub_413898(a1[88], a6, a1[89], a1) != 1 )
LABEL_49:
websRedirect(a1, "/index.asp");
return 1;
else
websError(a1, 404, "Page Not Found");
return 1;
}有以下大概几个重点:/adm/syscmd.asp页面单独列出来了, 肯定有东西/index.asp,/robots.txt,/style/,/js/,/title.gif,/lang_pack/,/goform/websLogin,/goform/setLanguage,/goform/updateCaptchaimg,/reboot,/reboot.asp 这些是属于不用登陆可以访问的。可惜的是这几个文件夹下都是js文件和sh文件,无法调用。除了这些,正常的请求都在这里这里不赘述了,东西很简单,授权漏洞出了很多。主要是下面几个重点的内容。刚才说的syscmd.asp,在adm目录下,正常登录后请求返回也是404。这里请求后边有个pwd参数,刚开始以为是硬编码,发现不是。这里后续其实进行修改了,具体修改函数。简单点来说就是生成一个基于当前日期的固定格式字符串。这里不写脚本来生成key了,我嫌麻烦。这里直接吧/adm/syscmd.asp复制一份/adm/syscmd1.asp,直接绕过goahead中的校验。这里遇到第二个问题,权限不足。这里一共有两个结局方案,先说第一个,很直观的方法,绑定挂载技术。# cp -r
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289875.htm
[原创]某个设备的流水账
405 浏览
3 回复
大佬,求固件下载链接
大佬,最后一张图是啥插件的输出吗?
天
大佬,最后一张图是啥插件的输出吗?
vulfi,github就有
大佬,最后一张图是啥插件的输出吗?
vulfi,github就有