-
系统或应用程序的访问控制机制不严格,例如,使用默认的用户名/密码进行登录或者没有限制用户对数据和资源的访问权限。 -
应用程序在用户提交的请求时未能正确地检查身份验证令牌或会话ID等标识符,并相信它们提供的内容是真实的。 -
应用程序缺乏安全性设置或不足的加密机制。
-
strstr(str1,str2)函数 — 判断字符串str2是否是str1的字串。
(1) 判断特定字符串后缀
strstr(data,".jpg")
strstr(data,".gif")
strstr(data,".png")
(2) 字符串截断%00
#无需认证网页
update-setting.htm
....
BRS_top.html
BRS_full_tcn.htm
#需认证网页
index.htm
ping.htm
Qos.htm
#判断方式
char *url = "index.htm%00update-setting.htm";
char *list[] = {"update-setting.htm","BRS_top.html","BRS_full_tcn.html",NULL};
for (int i = 0;data[i],++i){
if(strstr(data[i],url) != NULL){
printf("This url in this data list!");
}
}
-
strcmp、strlen 判断字符串相等与计算字符串长度。
char *username = "admin";
char *password = "admin";
int length = strlen(password);
if(!strncmp(password,configPasswd,length)){
... #登录之后
}
(3) 逻辑问题
-
默认配置为空
(4) 接口认证
-
api接口没有认证
(5) 其他
-
多漏洞利用绕过登录
CVE-2021-32030
漏洞分析
int __fastcall sub_59588(const char *a1)
{
const char *v2; // r0
const char *v3; // r0
int result; // r0
v2 = nvram_get_1("ifttt_token");
if ( !strcmp(a1, v2) )
{
if ( isFileExist("/tmp/IFTTT_ALEXA") > 0 )
Debug2File("/tmp/IFTTT_ALEXA.log", "[%s:(%d)][HTTPD] IFTTT/ALEXA long token success.n", "check_ifttt_token", 761);
result = 1;
}
else
{
if ( isFileExist("/tmp/IFTTT_ALEXA") > 0 )
Debug2File("/tmp/IFTTT_ALEXA.log", "[%s:(%d)][HTTPD] IFTTT/ALEXA long token fail.n", "check_ifttt_token", 767);
if ( isFileExist("/tmp/IFTTT_ALEXA") > 0 )
Debug2File(
"/tmp/IFTTT_ALEXA.log",
"[%s:(%d)][HTTPD] IFTTT/ALEXA long token is %s.n",
"check_ifttt_token",
768,
a1);
if ( isFileExist("/tmp/IFTTT_ALEXA") > 0 )
{
v3 = nvram_get_1("ifttt_token");
Debug2File("/tmp/IFTTT_ALEXA.log", "[%s:(%d)][HTTPD] httpd long token is %s.n", "check_ifttt_token", 769, v3);
}
result = 0;
}
return result;
}
4.1 某运营商光猫设备存在未授权访问漏洞
-
设备无线密码
-
设备信息
-
重启设备
4.2 某款无线AP设备存在逻辑绕过漏洞
4.3 某国产路由器绕过登录获取设备SHELL
-
登录模块功能 – 查看是否可伪造、可绕过 -
网页静态文件 – 查看是否单独处理 -
设备Web功能函数 – 查看未授权访问接口 -
中间件漏洞 – boa、lighttpd、uhttpd是否采用开源版本 -
敏感函数 – strstr、strncmp…
原文始发于微信公众号(山石网科安全技术研究院):路由器漏洞挖掘系列之未授权访问漏洞及常见绕过技巧