Webshell是一款基于WEB的应用程序,可以作为文件管理器进行文件上传和下载处理,使用用户名/密码方式进行认证,以suid root属性运行。 Webshell使用的flist()函数存在缓冲区溢出,远程攻击者可以利用这个漏洞覆盖堆栈中数据,可能以root用户权限在系统上执行任意指令。 flist.c包含如下flist()函数: char fname[256]; int esize=strlen(ext); int fsize; if ((cdir=opendir(dname))!=NULL) { while ((cfile=readdir(cdir)) != NULL) { if ((esize>=(fsize=strlen(cfile->d_name))) || (strstr(cfile->d_name+fsize-esize,ext)==NULL)) continue; strcpy(fname, dname); strcat(fname, \"/\"); strcat(fname, cfile->d_name); 其中接收外部参数拷贝到fname[]数组时缺少正确检查,可导致EIP覆盖,精心构建提交数据可能以root用户权限在系统上执行任意指令。
Webshell是一款基于WEB的应用程序,可以作为文件管理器进行文件上传和下载处理,使用用户名/密码方式进行认证,以suid root属性运行。 Webshell使用的flist()函数存在缓冲区溢出,远程攻击者可以利用这个漏洞覆盖堆栈中数据,可能以root用户权限在系统上执行任意指令。 flist.c包含如下flist()函数: char fname[256]; int esize=strlen(ext); int fsize; if ((cdir=opendir(dname))!=NULL) { while ((cfile=readdir(cdir)) != NULL) { if ((esize>=(fsize=strlen(cfile->d_name))) || (strstr(cfile->d_name+fsize-esize,ext)==NULL)) continue; strcpy(fname, dname); strcat(fname, \"/\"); strcat(fname, cfile->d_name); 其中接收外部参数拷贝到fname[]数组时缺少正确检查,可导致EIP覆盖,精心构建提交数据可能以root用户权限在系统上执行任意指令。