天天看點

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就可以有效避免了。