某通用教育系统任意文件上传+代码分析

系统:盈动信息发布系统
问题文件:/Admin/WebUpload.aspx
代码分析:
该系统在admin目录中已经建立了web.config并且限制了用户访问
但是代码如下:

<location path="WebUploaded.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="WebUpload.aspx">
    <system.web> 
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

却允许部分页面可访问
既然可访问那就看WebUpload.aspx的代码

protected void Ok_Click(object sender, EventArgs e)
		{
			string text = "";
			try
			{
				string upFileType = Globals.UpFileType;/*获取允许格式白名单*/
				string text2 = this.UploadFile.PostedFile.FileName;/*获取上传的文件名*/
				bool flag = text2 != string.Empty;
				if (!flag)
				{
					text = "没有选择文件!";
				}
				else
				{
					text2 = Path.GetExtension(text2);
					int contentLength = this.UploadFile.PostedFile.ContentLength;
					text2 = text2.Remove(0, 1);
					text2 = text2.Trim();
					text2 = text2.ToLower();
					if (flag)
					{
						/*这里判断文件大小  允许上传1M大小的文件*/
						flag = (Globals.MaxFileSize == 0 || (contentLength > 0 & contentLength <= Globals.MaxFileSize * 1024));
					}
					if (!flag)
					{
						text = "文件大小超过了限制,最大只能上传" + Globals.MaxFileSize.ToString() + "K的文件!";
					}
					else
					{
						flag = (upFileType.IndexOf(text2) >= 0);/*判断后缀名*/
						if (!flag)
						{
							/*设置错误信息*/
							text = "这个文件类型不允许上传,只允许上传" + upFileType + "类型文件!";
						}
					}
					if (flag)
					{
						Globals.UploadFileNum++;

						string str = "upfile" + Globals.UploadFileNum.ToString() + "." + text2;

						string text3 = string.Concat(new string[]

						{

							"/",

							Globals.ApplicationVRoot,

							"sites/",

							Globals.CurrentSiteVirtualDirectory,

							"/",

							Globals.SaveUpFilesPath

						});

						string text4 = base.Server.MapPath(text3);

						if (text4.EndsWith("\\"))

						{

							text4 = text4.Substring(0, text4.Length - 1);

						}

						text4 = text4 + "\\" + str;

						text3 = text3 + "/" + str;

						this.UploadFile.PostedFile.SaveAs(text4);/*保存文件*/

						string returnValue = this.GetReturnValue(text3);

						if (returnValue != "")

						{

							base.Response.Write(returnValue);/*输入文件名称以及路径*/

						}

					}

				}

			}

			catch (Exception)

			{

				text = "文件没有保存!";

			}

			finally

			{

				if (text != "")

				{

					base.Response.Write("<script>alert('" + text + "')</script>");

				}

			}

		}

	}

}

利用方式:
http://www.jgedu.net/Admin/WebUpload.aspx
选择要上传的文件,“确定”
上传完毕F12查看页面代码即可得到shell
如果遇到上传完毕页面关闭之类的问题请将浏览器JavaScript禁用之后再上传 如下图
2

1

发表评论