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