ueditor的上传文件漏洞(c#)
项目中使用了ueditor,安全测试发现一个漏洞,涉及漏洞的文件名字为UploadHandler.cs,其中有一个方法:
private bool CheckFileType(string filename) { var fileExtension = Path.GetExtension(filename).ToLower(); return UploadConfig.AllowExtensions.Select(x => x.ToLower()).Contains(fileExtension); }
这个方法是存在漏洞的,虽然前端做了判断,但是通过中间人攻击方法,是可以绕过的。
改造该方法如下:
/// <summary> /// 检查文件类型 /// </summary> /// <param name="filename"></param> /// <returns></returns> private bool CheckFileType(string filename) { var fileExtension = Path.GetExtension(filename).ToLower(); // .jpg // .jpg.aspx bool result= Array.IndexOf(UploadConfig.AllowExtensions, fileExtension)>-1; return result; //return UploadConfig.AllowExtensions.Select(x => x.ToLower()).Contains(fileExtension); }
看看就应该明白了,虽然上传允许的为.jpg,但是由于判断方法的不严谨,仍然可以绕过上传其它任意类型文件,使用Array.IndexOf就可以有效避免了。