返回顶部
首页 > 资讯 > 数据库 >如何实现mssql注入躲避IDS
  • 719
分享到

如何实现mssql注入躲避IDS

2024-04-02 19:04:59 719人浏览 独家记忆
摘要

本篇内容主要讲解“如何实现mssql注入躲避IDS”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现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,这样你的命令就无法执行了。 唯一的办法就是 
inserttablevalues('日至内容'....'temp')execxp_cmdshell'dir c:\'-- ') 

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

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

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

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

您可能感兴趣的文档:

--结束END--

本文标题: 如何实现mssql注入躲避IDS

本文链接: https://lsjlt.com/news/61203.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何实现mssql注入躲避IDS
    本篇内容主要讲解“如何实现mssql注入躲避IDS”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现mssql注入躲避IDS”吧! ...
    99+
    2024-04-02
  • 如何避免sql注入
    避免sql注入的方法:在发布前,进行SQL注入检测。严格限制Web应用的数据库的操作权限。使用正则表达式过滤传入的参数。对进入数据库的特殊字符进行转义处理,或编码转换。使用 PreparedStatement方法,参数化查询方式,避免SQL...
    99+
    2024-04-02
  • c#如何避免sql注入
    c#避免sql注入的方法:在Web.config文件中,下面增加一个标签,例如:  < appSettings>  < add key="safeParameters"&n...
    99+
    2024-04-02
  • python如何避免SQL注入
    python避免SQL注入的方法:python中的pymysql在执行sql前,会对sql中的特殊字符进行转义,如:def escape_string(value, mapping=None):"""escape_string escape...
    99+
    2024-04-02
  • 如何避免表单sql注入
    避免表单sql注入的方法:将所有独立的单引号替换成双引号。删除用户输入内容中的所有连字符。限制表单或查询字符串输入的长度。检查用户输入的合法性,确信输入的内容只包含合法的数据。将用户登录名称、密码等数据加密保存。检查提取数据查询所返回的记录...
    99+
    2024-04-02
  • 如何实现MSSQL转MYSQL
    本篇内容主要讲解“如何实现MSSQL转MYSQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现MSSQL转MYSQL”吧! ...
    99+
    2024-04-02
  • Java中如何避免sql注入实例详解
    目录前言造成sql注入的原因:预防sql注入方法:java 有效的防止SQL注入总结前言 sql注入是web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息、利用数据库的特...
    99+
    2024-04-02
  • jdbc如何避免sql注入漏洞
    jdbc避免sql注入漏洞的方法:使用PreparedStatement来避免SQL注入,PreparedStatement继承了Statement接口,执行SQL语句的方法无异,例如://预编译SQL语句PreparedStatement...
    99+
    2024-04-02
  • thinkphp如何避免SQL注入攻击
    本文小编为大家详细介绍“thinkphp如何避免SQL注入攻击”,内容详细,步骤清晰,细节处理妥当,希望这篇“thinkphp如何避免SQL注入攻击”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、什么是 SQL...
    99+
    2023-07-05
  • web开发如何避免表单sql注入
    web开发避免表单sql注入的方法:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users wher...
    99+
    2024-04-02
  • 如何在Java项目中避免sql注入
    这篇文章给大家介绍如何在Java项目中避免sql注入,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、普通用户与系统管理员用户的权限要有严格的区分。如果一个普通用户在使用查询语句中嵌入另一个Drop ...
    99+
    2023-05-31
    java ava 目中
  • c++ 如何实现线程注入
    目录简单编写DLL文件:x86 实现远程线程注入:x64 实现远程线程注入:实现普通消息钩子注入:实现全局消息钩子注入:APC应用层异步注入:ZwCreateThreadEx强力注入...
    99+
    2024-04-02
  • AngularJS如何实现依赖注入
    小编给大家分享一下AngularJS如何实现依赖注入,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介:首先我们需要理解什么是依...
    99+
    2024-04-02
  • sql注入如何实现脱库
    sql注入实现脱库的方法:借助Navicat for MySQL软件实现,下载并安装运行。打开Navicat for MySQL,点击连接,输入数据库相关信息进行连接,例如数据库ip地址,端口号,用户及密码等。当使用Navicat连接上数据...
    99+
    2024-04-02
  • 如何避免数据库被sql注入攻击
    避免数据库被sql注入攻击的方法:采用PreparedStatement预编译语句集,它内置了处理sql注入的能力,使用它的setXXX方法传值即可。使用正则表达式过滤传入的参数,例如:要引入的包:import java.util.rege...
    99+
    2024-04-02
  • JSP中如何实现防SQL注入
    JSP中实现防SQL注入的方法:1.采用PreparedStatement预编译语句集,它内置了处理SQL注入的能力,使用它的setXXX方法传值即可。2.使用正则表达式过滤传入的参数。JSP中实现防SQL注入的方法:采用PreparedS...
    99+
    2024-04-02
  • 如何实现sql防注入问题
    sql防注入的实现方法:设置目录权限,系统管理员应为信息系统的每个目录或文件设置相应权限,授予每个文件能正常运行的权限,比如静态页面文件所在的目录,应只授予“读取”权限,包含活动脚本的文件授予“纯脚本”权限就足够了。隐藏错误信息,把服务器设...
    99+
    2024-04-02
  • ASP.NET MVC如何实现依赖注入
    这篇文章主要介绍了ASP.NET MVC如何实现依赖注入,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在java的spring中有自动注入功能,使得代码变得更加简洁灵活,...
    99+
    2023-06-28
  • 在SpringBoot中如何实现注入值
    在SpringBoot中如何实现注入值?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一,字段直接注入 @Value("${example.url}") p...
    99+
    2023-05-31
    springboot bo 注入值
  • SpringBoot中如何实现注入依赖
    SpringBoot中如何实现注入依赖?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天给大家介绍一下SpringBoot中是如何实现依赖注入的功能。在以往spring使用...
    99+
    2023-05-31
    springboot bo 依赖注入
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作