
대상 내 C# 기반 Microsoft SQL Server (MS SQL / MSSQL) 사후 침투 도구로, 모든 깊이의 연결된 서버 체인을 탐색하며 각 홉에서 연쇄적인 로그인 가장을 수행합니다.
마치 비즈니스 클래스 비행에 샴페인 잔을 손에 들고 도착하는 것처럼, 대상 Microsoft SQL Server (MS SQL) DBMS에 우아하게 착륙하세요. 🥂

MSSQLand는 레드팀 운영자를 위해 제작된 C# Microsoft SQL Server (MSSQL / MS SQL) 포스트 익스플로잇 도구입니다. 비콘(예: Cobalt Strike 또는 Havoc에서 execute-assembly 사용, 또는 dotnet 명령)을 통해 대상 환경 내에서 직접 실행되도록 설계되었으며, 연결된 서버 체인을 탐색하고, 그 과정에서 만나는 모든 로그인을 가장하며, 마지막 홉에서 원하는 작업을 수행할 수 있습니다. 최소한의 OPSEC 발자국과 외부 종속성 없이 모두 가능합니다.
OPENQUERY / EXEC AT 래핑EXECUTE AS LOGIN을 사용한 계단식 다중 사용자 가장cm-* 액션[!TIP] MSSQLand는
.NET Framework 4.8로 빌드되었으며, 현재 컨텍스트를 사용하여 어셈블리 실행을 염두에 두고 있습니다. NT/LM 해시 또는 Kerberos 티켓을 사용하여 연결해야 하는 경우 Pass-the-Hash를 참조하세요.
[!NOTE] 기본을 잊지 마세요. 보안 평가 중에는 SQL Server Management Studio (SSMS)를 사용하는 것이 더 쉬운 경우가 있습니다.
MSSQLand.exe [options] <host> [options] <action> [action-options]
MSSQLand.exe <host> --probe
전역 플래그 (-c, -l, --debug 등)는 액션 이름 뒤를 포함하여 어떤 위치에서든 허용됩니다. 액션 이후의 인식되지 않은 토큰은 그대로 액션에 전달됩니다.
[!NOTE]
<action>을 생략하면 연결 테스트만 수행합니다. 인증 후 쿼리 없이 종료합니다. 최소한의 OPSEC 발자국으로 자격 증명 검증에 이상적입니다.
[!TIP] 모든 RPC Out 또는 OPENQUERY 호출을 수동으로 입력하지 마세요.
-l인수로 연결된 서버 체인을 도구가 처리하도록 하여 큰 그림에 집중하세요.
형식: server:port/user@database 또는 모든 조합 server/user@database:port.
server (필수) - SQL Server 호스트 이름 또는 IP:port (선택 사항) - 포트 번호 (기본값: 1433, 일반적: 1434, 14333, 2433)/user (선택 사항) - 이 서버에서 가장할 사용자 ("execute as login")
/user1/user2/user3는 EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3';을 실행합니다./user는 보안 스택에 새로운 가장 컨텍스트를 푸시합니다.@database (선택 사항) - 데이터베이스 컨텍스트# 연결 프로브: 인증 없이 서버가 살아 있는지 확인
MSSQLand.exe localhost --probe
# 연결 테스트 전용 (액션 실행 안 함, 인증 후 종료)
MSSQLand.exe localhost -c token
# 특정 액션 실행
MSSQLand.exe localhost -c token info
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
-l 플래그와 세미콜론(;)을 구분자로 사용하여 여러 SQL 서버를 연결합니다:
-l SQL01;SQL02/user;SQL03@database
구문:
;) - 체인에서 서버 구분/) - 가장할 사용자 지정 ("execute as login")
/user1/user2는 순차적 가장 실행@) - 데이터베이스 컨텍스트 지정[...]) - 서버 이름이 구분자로 인해 분할되지 않도록 보호하는 데 사용됨예시:
# 간단한 체인
-l SQL01;SQL02;SQL03
# 가장 및 데이터베이스 포함
-l SQL01/admin;SQL02;SQL03/manager@clients
# 계단식 가장 (SQL01에서 user1, 그다음 user2 가장)
-l SQL01/user1/user2;SQL02;SQL03
# 혼합 계단식 (SQL01: user1→user2, SQL03: user3→user4→user5)
-l SQL01/user1/user2;SQL02;SQL03/user3/user4/user5@database
# 서버 이름에 하이픈, 점 포함 가능 (대괄호 불필요)
-l SQL-01;SERVER.001;HOST.DOMAIN.COM
# 대괄호는 서버 이름에 구분자 문자가 포함된 경우에만 필요
-l [SERVER;PROD];SQL02;[SQL03@clients]@clientdb
[!NOTE] 포트 지정(
:port)은 초기 호스트 연결에만 적용됩니다. 연결된 서버 체인(-l)은hostname:port조합이 아닌sys.servers에 구성된 연결된 서버 이름을 사용합니다.
이 모드들은 인증이 필요 없으며 자격 증명을 얻기 전에 작동합니다.
SQL Server Browser 서비스는 UDP 1434에서 수신 대기하며 검색 요청에 응답하여 호스트에서 실행 중인 SQL Server 인스턴스 목록(이름, 버전, TCP 포트 포함)을 반환합니다. 대상이 동적 포트의 명명된 인스턴스를 실행 중이고 추측하거나 스캔할 필요가 없을 때 유용합니다.
# 특정 호스트의 SQL Browser 서비스 쿼리 (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
Active Directory는 컴퓨터 및 서비스 계정에 저장된 Service Principal Names (SPNs)를 통해 SQL Server 등록을 노출합니다. MSSQLand는 LDAP를 통해 AD를 쿼리하여 MSSQLSvc/* SPN을 찾아 도메인 전체 또는 글로벌 카탈로그를 통해 포리스트 전체의 SQL Server 인스턴스를 열거합니다.
# Active Directory에서 LDAP를 통해 SQL Server 찾기 (현재 도메인)
MSSQLand.exe --findsql
# 특정 도메인 대상
MSSQLand.exe --findsql pgd.lab
# 글로벌 카탈로그를 통한 포리스트 전체 검색 (포트 3268)
MSSQLand.exe --findsql pgd.lab --gc
검색은 다중 계층으로 이루어집니다. 자세한 내용은 FindSqlServers.cs를 참조하세요.
SQL Server Browser는 또한 UDP 브로드캐스트 패킷에 UDP 1434에서 응답하여 로컬 서브넷에서 자신을 광고하는 모든 SQL Server 인스턴스를 검색할 수 있게 합니다.
# 로컬 네트워크에서 브로드캐스트 검색 (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] 이는 SQL Server가 도메인에 가입되지 않은 컴퓨터에서 실행 중이며 LDAP 또는 SPN 쿼리에 나타나지 않을 때 특히 유용합니다. 독립 서버, 개발자 머신, 내부 VLAN에 생성된 무단 인스턴스를 생각해보세요.
TDS 프로토콜 핸드셰이크(TCP SYN만이 아님)를 사용하여 라이브 SQL Server 인스턴스에 대해 열린 포트를 검증합니다. TDS 사전 로그인 패킷에 응답하는 경우에만 포트가 보고됩니다.
MSSQLand.exe LAB-SQL03 --portscan
MSSQLand.exe LAB-SQL03 --portscan --all # 모든 인스턴스 찾기 (전체 임시 포트 범위)
MSSQLand.exe LAB-SQL03 --portscan 65184 # 단일 포트
MSSQLand.exe LAB-SQL03 --portscan 65180-65190 # 포트 범위
MSSQLand.exe LAB-SQL03 --portscan 1433,5000,65184 # 쉼표로 구분된 목록
MSSQLand는 비콘 내에서 .NET 어셈블리로 실행되며 항상 현재 실행 컨텍스트 (-c token)를 사용하여 인증합니다. 해시가 있는 경우, 올바른 접근 방식은 먼저 비콘 수준에서 토큰을 위조한 다음 MSSQLand를 정상적으로 실행하는 것입니다. System.Data.SqlClient는 해당 토큰을 투명하게 상속하며, 사용자 지정 TDS 구현이 필요하지 않습니다.
MSSQLand 내에서 NTLMv2를 처음부터 구현하려면 다음이 필요합니다:
System.Data.SqlClient를 수제 TDS 7.x 스택으로 교체 (너무 많은 소켓, TLS, NTLM 코드 라인)외부 위치에서 Kerberos 티켓 또는 NT/LM 해시로 인증해야 하는 경우, mssqlclient-ng가 적합한 도구입니다. 이는 Unix 측 접근을 위해 구축된 Python 3 클라이언트로, 비콘에서 설정된 SOCKS5 프록시와 쉽게 페어링할 수 있습니다.
Windows 호스트에서 MSSQLand를 실행 중이지만 Linux 환경(Hyper-V VM, VMware 또는 WSL)을 통해 SQL Server 대상에 액세스해야 하는 경우, socat을 사용하여 쉽게 연결을 전달할 수 있습니다:
sudo socat TCP4-LISTEN:1433,fork,reuseaddr TCP:10.10.11.90:1433
이 명령은 Linux 머신의 포트 1433에서 수신 대기하고 모든 트래픽을 대상 SQL Server 10.10.11.90:1433으로 전달합니다. 그런 다음 Windows 호스트에서 MSSQLand를 Linux VM의 IP로 연결할 수 있습니다.
-h 또는 --help - 사용 가능한 모든 액션 표시-h search_term - 액션 필터링 (예: -h adsi는 모든 ADSI 관련 액션 표시)localhost -c token createuser -h - 특정 액션에 대한 자세한 도움말 표시MSSQLand는 Microsoft Configuration Manager (이전 SCCM / MECM) 익스플로잇 및 정찰에 대한 포괄적인 지원을 포함합니다. ConfigMgr 데이터베이스 서버에 접근할 수 있는 경우, 장치 인텔리전스(예: cm-devices) 또는 인프라 매핑을 위한 특수 액션을 활용할 수 있습니다.
모든 ConfigMgr 액션은 Microsoft의 공식 PowerShell cmdlet 명명 규칙(Get-CM*, Set-CM* 등)에 맞추기 위해 cm- 접두사를 사용합니다(예: cm-scripts, cm-package).
타임스탬프와 유용한 컨텍스트 정보로 보강된 도구의 출력은 시각적으로 매력적이고 전문적인 결과를 제공하도록 설계되어, 보고서(예: 고객 납품물, 내부 보고서, 레드팀 평가)를 위한 고품질 스크린샷을 캡처하는 데 이상적입니다.
모든 출력 테이블은 Markdown 친화적이며 형식 지정 문제 없이 메모에 직접 복사하여 붙여넣을 수 있습니다.
[!TIP]
--format csv옵션을 사용하여.csv호환 출력을 얻을 수도 있습니다:MSSQLand.exe localhost -c token --format csv --silent procedures > procedures.csv
기여는 환영하며 감사드립니다! 버그 수정, 새로운 기능 추가, 문서 개선, 피드백 공유 등 여러분의 노력은 가치 있고 변화를 만듭니다. 오픈소스는 협업과 인정을 통해 번성합니다. 크거나 작은 기여는 도구와 커뮤니티 개선에 도움이 됩니다. 여러분의 시간과 노력은 진정으로 가치 있습니다.
여기에서는 Git 역사에서 누구도 지워지지 않습니다. 두려워할 필요 없습니다. 오픈소스의 협업 정신을 지키지 않고 여러분의 코드를 복사-붙여넣기하는 사람은 없을 것입니다.
시작하는 방법에 대한 자세한 지침은 CONTRIBUTING.md를 참조하세요.
이 도구가 왜 존재하며 다른 SQL Server 프로젝트에 기여하지 않는지 궁금하다면 ORIGIN.md를 참조하세요.
이 도구는 엄격히 방어적 보안 연구, 교육, 그리고 승인된 침투 테스트를 위해 제공됩니다. 소유하지 않은 시스템에 대해 이 소프트웨어를 실행하기 전에 명시적인 서면 승인이 있어야 합니다.
이 도구는 교육 목적으로만 설계되었으며, 보안 전문가가 승인된 작업에서 SQL Server 환경의 보안을 이해하고 테스트하는 데 도움을 주기 위한 것입니다.
허용되는 환경은 다음과 같습니다:
이 프로젝트의 오용은 법적 조치로 이어질 수 있습니다.
실제 환경에서 또는 시스템 소유자의 명시적 허가 없이 이 도구를 무단 사용하는 것은 엄격히 금지되며 법적 및 윤리적 기준을 위반할 수 있습니다. 이 도구의 제작자와 기여자는 오용이나 발생한 손해에 대해 책임을 지지 않습니다.
책임감 있고 윤리적으로 사용하세요. 항상 법을 존중하고 적절한 승인을 받으십시오.