'''
  __  __  ____         _    _ ____
 |  \/  |/ __ \   /\  | |  | |  _ \
 | \  / | |  | | /  \ | |  | | |_) |
 | |\/| | |  | |/ /\ \| |  | |  _ <
 | |  | | |__| / ____ \ |__| | |_) |
 |_|  |_|\____/_/    \_\____/|____/

'''

Abysssec Inc Public Advisory


  Title            :  IfNuke Multiple Remote Vulnerabilities
  Affected Version :  IfNuke 4.0.0
  Discovery        :  www.abysssec.com
  Vendor	   :  http://www.ifsoft.net/default.aspx

  Demo  	   :  http://www.ifsoft.net/default.aspx?portalName=demo
  Download Links   :  http://ifnuke.codeplex.com/


  Admin Page       :  http://Example.com/Login.aspx?PortalName=_default


Description :
===========================================================================================
  This version of IfNuke have Multiple Valnerabilities :

        1- arbitrary Upload file
	2- Persistent XSS



arbitrary Upload file
===========================================================================================

  using this vulnerability you can upload any file with this two ways:

  1- http://Example.com/Modules/PreDefinition/PhotoUpload.aspx?AlbumId=1   (the value of AlbumId is necessary)

     your files will be in this path:
           http://Example.com/Users/Albums/

     with this format (for example):
           Shell.aspx ---> img_634150553723437500.aspx

That 634150553723437500 value is DateTime.Now.Ticks.ToString() and will be built in this file :

           http://Example.com/Modules/PreDefinition/PhotoUpload.ascx.cs
           Ln 102 : fileName = "img_" + DateTime.Now.Ticks.ToString() + "." + GetFileExt(userPostedFile.FileName);



it's possible to do same thing here :

  2- http://Example.com/modules/PreDefinition/VideoUpload.aspx

   and the same vulnerable code is located here :

           http://Example.com/Modules/PreDefinition/VideoUpload.ascx.cs
           Ln 39 : string createdTime = DateTime.Now.ToString("yyyyMMddHHmmssffff");
                   string newFileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName) + "_" + createdTime;
          	   string uploadFilePath = Server.MapPath(VideoHelper.GetVideoUploadDirectory(CurrentUser.Name) + newFileNameWithoutExtension + Path.GetExtension(fileName));


Persistent XSS Vulnerabilities:
===========================================================================================

  In these Modules you can find Persistent XSS that data saves with no sanitization:

  1- Module name    : Article
     Fields         : Title , Description
     Valnerable Code: ...\Modules\PreDefinition\Article.ascx.cs
     ln 106:
            if (S_Title.Text.Trim() != string.Empty)
             {
            	parameters.Add("@Title", S_Title.Text.Trim());
            	parameters.Add("@Description", S_Title.Text.Trim());
            	parameters.Add("@Tags", S_Title.Text.Trim());
             }

     --------------------------------------------------------------------------------------

  2- Module name    : ArticleCategory
     Field          : Name
     Valnerable Code: ...\Modules\PreDefinition\ArticleCategory.ascx.cs
     ln 96:
           entity.Name = ((TextBox)lstSearch.Rows[lstSearch.EditIndex].FindControl("txtCategoryName_E")).Text.Trim();

     --------------------------------------------------------------------------------------

  3- Module name    : HtmlText
     Field          : Text
     Valnerable Code: ...\Modules\PreDefinition\HtmlText.ascx.cs
     ln 66:
           entity.Content = txtContent.Value.Trim().Replace("//",string.Empty);

     --------------------------------------------------------------------------------------

  4- Module name    : LeaveMessage
     Fields         : NickName , Content
     Valnerable Code: ...\Modules\PreDefinition\LeaveMessage.ascx.cs
     ln 55:
           entity.NickName = txtNickName.Text.Trim();
           entity.Content = txtContent.Text.Trim();

     --------------------------------------------------------------------------------------

  5- Module name    : Link
     Field          : Title
     Valnerable Code: ...\Modules\PreDefinition\Link.ascx.cs
     ln 83:
           entity.Title = ((TextBox)lstSearch.Rows[lstSearch.EditIndex].FindControl("txtTitle_E")).Text.Trim();

     --------------------------------------------------------------------------------------

  6- Module name    : Photo
     Field          : Title
     Valnerable Code: ...\Modules\PreDefinition\Photo.ascx.cs
     ln 280:
           entity.Title = txtTitle_E.Text.Trim();


===========================================================================================