DD-WRT是一个供无线路由器使用的嵌入版Linux,可以在普通的家用无线路由器实现商用无线路由器功能。 DD-WRT的httpd.c文件中存在多个安全漏洞: 859 if (containsstring(file, \"cgi-bin\")) { 860 861 auth_fail = 0; 862 if (!do_auth 863 (conn_fp, auth_userid, auth_passwd, auth_realm, 864 authorization, auth_check)) 865 auth_fail = 1; ......... (snip)............ 899 900 } 901 exec = fopen(\"/tmp/exec.tmp\", \"wb\"); 902 fprintf(exec, \"export REQUEST_METHOD=\\"\\%s\\"\n\", method); 903 if (query) 904 fprintf(exec, \"/bin/sh \\%s/\\%s</tmp/exec.query\n\", 905 server_dir != NULL ? server_dir : \"/www\",file); 906 else 907 fprintf(exec, \"/\\%s/\\%s\n\", 908 server_dir != NULL ? server_dir : \"/www\", file); 909 fclose(exec); 910 911 if (query) { 912 exec = fopen(\"/tmp/exec.query\", \"wb\"); 913 fprintf(exec, \"\\%s\n\", query); ........................ 这里存在两个问题: 1) 没有处理元字符。 2) 未经认证便执行了命令。 如果没有通过认证就不会给出任何输出。 ....................... 914 free(query); 915 fclose(exec); 916 } 917 918 system2(\"chmod 700 /tmp/exec.tmp\"); 919...
DD-WRT是一个供无线路由器使用的嵌入版Linux,可以在普通的家用无线路由器实现商用无线路由器功能。 DD-WRT的httpd.c文件中存在多个安全漏洞: 859 if (containsstring(file, \"cgi-bin\")) { 860 861 auth_fail = 0; 862 if (!do_auth 863 (conn_fp, auth_userid, auth_passwd, auth_realm, 864 authorization, auth_check)) 865 auth_fail = 1; ......... (snip)............ 899 900 } 901 exec = fopen(\"/tmp/exec.tmp\", \"wb\"); 902 fprintf(exec, \"export REQUEST_METHOD=\\"\\%s\\"\n\", method); 903 if (query) 904 fprintf(exec, \"/bin/sh \\%s/\\%s</tmp/exec.query\n\", 905 server_dir != NULL ? server_dir : \"/www\",file); 906 else 907 fprintf(exec, \"/\\%s/\\%s\n\", 908 server_dir != NULL ? server_dir : \"/www\", file); 909 fclose(exec); 910 911 if (query) { 912 exec = fopen(\"/tmp/exec.query\", \"wb\"); 913 fprintf(exec, \"\\%s\n\", query); ........................ 这里存在两个问题: 1) 没有处理元字符。 2) 未经认证便执行了命令。 如果没有通过认证就不会给出任何输出。 ....................... 914 free(query); 915 fclose(exec); 916 } 917 918 system2(\"chmod 700 /tmp/exec.tmp\"); 919 system2(\"/tmp/exec.tmp>/tmp/shellout.asp\"); ........... (snip).......... 926 if (auth_fail == 1) { 927 send_authenticate(auth_realm); 928 auth_fail = 0; ------------ 3) httpd以root用户权限运行。 结合以上三个问题,任何能够连接到Web管理接口的未经认证的攻击者都可以在浏览器中通过类似于以下的URL获得对设备的root访问: http://routerIP/cgi-bin/;command_to_execute