項目中使用了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就可以有效避免了。