sql server配置管理器中, 为了安全设置.server 协议可以禁用固定的端口.采用随机端口运行 mssql

例如说绑定一个固定端口
Alt text

目的

在成功获取到一个 webshell 的前提下.服务器没有开放1433端口..怎么把数据库脱下来

想法1:

利用 socks5转发. 使用 navicat 连接服务器..但是发现使用 ashx 脚本 socks5丢失 udp 的数据包. 失败.继而使用了自用的 sock5的程序反向代理到 vps..但是还是失败.

想法2:

查找本地备份sql文件.失败

想法3:

使用aspx大马导出..发现能导出成功.但是文件缺失严重..数据不全..[可能是大马的问题]. 失败

想法4:

使用 sqlcmd 导出导入.成功


峰回路转

通过 tasklist 查看进程中 sql server 的信息发现两个 pid

1
2
3
4
tasklist /svc

  sqlservr.exe      6666 MSSQL$SQLEXPRESS 
  fdlauncher.exe    6667 MSSQLFDLauncher$SQLEXPRESS     

通过netstat发现存在端口开放情况

1
2
3
4
netstat -ano |findstr '6666'

  TCP  0.0.0.0:45392  0.0.0.0:0    LISTENING    6666
  TCP  [::]:45392     [::]:0       LISTENING    6666

利用常用的大马中 mssql 管理功能
server=localhost;UID=sa;PWD=;database=master;Provider=SQLOLEDB
变更为
server=localhost\SQLEXPRESS;port=45392;UID=sa;PWD=sapassword;database=dbname;Provider=SQLOLEDB

成功连接..但是发现利用导出 backup database 功能实在是不好用…导出继续失败
利用 set 查看到 mssql 有相关环境变量
这里我就不放图了.大家都懂.

使用sqlcmd备份还原sqlserver数据库

1
2
3
备份:

sqlcmd -S localhost\SQLEXPRESS,45392 -U sa -P sapassword -d  dbname -Q"BACKUP DATABASE dbname to disk='c:/backup/dbname.bak'"
1
2
3
还原:

sqlcmd -S localhost\SQLEXPRESS,45392 -U sa -P sapassword -d  dbname -Q"RESTORE DATABASE dbname FROM disk='c:/dbname.bak'"

至于其中的目录斟酌修改..


导入到本地发现又出现新的问题

问题1.1: RESTORE 无法处理数据库 ‘dbname’,因为它正由此会话使用。建议在执行此操作时使用 master 数据库。

问题1.2: 消息 3013,级别 16,状态 1,服务器 localhost\SQLEXPRESS,第 1 行
RESTORE DATABASE 正在异常终止。

sqlcmd -S localhost\SQLEXPRESS,45392 -U sa -P sapassword -d dbname -Q"use master; RESTORE DATABASE dbname FROM disk='c:/dbname.bak' with REPLACE"

如果还是不行
说明你的服务器sqlserver版本和对方的服务器版本不同.

解决办法: 升级同级别或者更高版本的环境


结语:

上面的步骤虽然失败.但是给我提供了很大帮助.server 及 port 的指定

例如 navicat 没有指定端口的选项.
就在 server 中填写localhost,port

连接 server 中使用 localhost 失败 ,localhost\SQLEXPRESS 成功 等等…

就这样