1433 - mssql

MSSQL(Microsoft SQL Server)는 마이크로소프트에서 개발한 관계형 데이터베이스입니다. 다른 데이터베이스 서비스와 다르게 Windows 사용자 계정이나 AD 계정으로 인증이 가능한 통합 인증 모드를 지원합니다.

XP_CMDSHELL

xp_cmdshell은 사용자가 SQL 콘솔에서 해당 SQL 서비스가 실행되는 Windows 시스템에 원격으로 명령을 실행할 수 있도록 지원하는 프로시저입니다.

이 기능은 기본적으로 비활성화 상태이며 활성화와 실행에는 각각 sysadmin 권한이 필요합니다.

# 활성화 여부 확인
SELECT value FROM sys.configurations WHERE name = 'xp_cmdshell';

# XP_CMDSHELL 프로시저 활성화 및 저장
EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;

# 원격 명령 실행
EXEC xp_cmdshell 'whoami';

# XP_CMDSHELL 프로시저 비활성화 및 저장
EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;
EXEC sp_configure 'Show Advanced Options', 0; RECONFIGURE;

RID Cycling

mssql 내장 함수 중 SUSER_SID는 NetBIOS를 포함한 도메인 계정 이름을 입력했을 때 SID를 반환하며, SUSER_SNAME은 SID를 입력했을 때 계정 이름을 반환합니다.

SUSER_SID 함수는 mssql 서버에 등록된 도메인 계정에 한해서만 조회 가능합니다.

이 두가지 함수를 이용하여 mssql 연결이 가능한 상태에서 도메인 객체의 sid 조회를 통해 RID Cycling 공격으로 연계가 가능합니다.

NTLM 탈취

xp_dirtree는 mssql 콘솔에서 서버의 시스템 디렉토리를 열거할 수 있는 dir 명령입니다. Windows는 공유 폴더에 접근 시 자동으로 현재 세션으로 ntlm 인증을 하기 때문에 xp_dirtree를 이용하여 대상의 ntlm 챌린지를 탈취하고 이를 크랙할 수 있습니다.

Linked Server

mssql은 다른 SQL 서버와 연결을 통해 원격 쿼리 및 명령 실행을 지원합니다. 원격 쿼리 및 명령을 실행할 때 최종 권한 검증은 목적지 서버를 실행하는 주체로부터 발생합니다.

따라서 출발지 서버인 A 서버에서 xp_cmdshell 실행 권한이 없는 일반 사용자 계정이라 하더라도 sa 권한으로 실행되는 B 서버에 대한 원격 쿼리를 통해 xp_cmdshell 실행이 가능합니다.

User Impersonation

관리자가 명시적으로 각 사용자에게 특정 사용자의 권한을 위임받을 수 있는 객체를 설정했다면, 공격자는 해당 세션에서 설정된 위임 구성을 통해 다른 사용자의 권한으로 활동할 수 있습니다.

SeImpersonatePrivilege

최신 mssql 설치 시 기본적으로 서비스는 SeImpersonatePrivilege 권한을 가진 NT Service/MSSQLSERVER로 실행됩니다.

공격자는 이 사용자 권한을 이용한 로컬 권한 상승 기법으로 시스템 권한 탈취가 가능합니다.

TRUSTWORTHY

TRUSTWORTHY에 대한 자세한 설명은 TRUSTWORTHY를 참고하세요.

Decrypting Linked Server Passwords

이제 세가지 정보를 가지고 CyberChef에서 AES 복호화를 할 수 있습니다.

Decrypting Linked Server Passwords에 대한 자세한 정보는 Link Server Passwords를 참고하세요.

References

Last updated