xp_cmdshell MSSQL

agnusdei·2024년 7월 27일

xp_cmdshell은 Microsoft SQL Server에서 제공하는 확장 저장 프로시저로, SQL Server 인스턴스에서 운영 체제 명령을 실행할 수 있게 해줍니다. 이 기능은 강력하지만, 보안상 위험이 크기 때문에 신중하게 사용해야 합니다.

1. xp_cmdshell의 기능

  • xp_cmdshell을 사용하면 SQL Server 내에서 직접 운영 체제 명령어를 실행할 수 있습니다. 예를 들어, 파일 시스템의 파일을 읽거나, 프로그램을 실행하는 등의 작업을 수행할 수 있습니다.

2. SQL Injection과의 관계

SQL Injection 공격은 악의적인 사용자가 SQL 쿼리에 임의의 SQL 코드를 삽입하여 데이터베이스를 조작하는 공격 방법입니다. xp_cmdshell이 SQL Injection 공격에 노출될 수 있는 이유는 다음과 같습니다:

  • 명령어 실행: 공격자가 SQL 쿼리를 통해 xp_cmdshell을 호출하고, 그 매개변수로 악의적인 명령어를 삽입할 수 있습니다. 예를 들어, 사용자가 입력한 값이 SQL 쿼리의 일부로 사용되면, 공격자는 이를 통해 시스템 명령을 실행할 수 있습니다.

  • 권한 상승: 만약 SQL Server 인스턴스의 사용자가 충분한 권한을 가지고 있다면, 공격자는 xp_cmdshell을 통해 시스템에서 임의의 명령을 실행하고, 시스템에 대한 권한을 상승시킬 수 있습니다.

3. 예시

예를 들어, 아래와 같은 쿼리가 있다고 가정해보겠습니다:

DECLARE @cmd VARCHAR(100)
SET @cmd = 'dir ' + @userInput -- @userInput이 사용자의 입력값
EXEC xp_cmdshell @cmd

이 경우, 만약 @userInput에 사용자가 악의적인 명령어를 입력하면, 해당 명령어가 실행될 수 있습니다. 예를 들어, @userInput& del *.*와 같은 값이라면, 모든 파일을 삭제하는 명령을 실행할 수 있습니다.

4. 보안 조치

  • xp_cmdshell 비활성화: 기본적으로 xp_cmdshell은 비활성화되어 있어야 하며, 필요할 경우에만 활성화해야 합니다.
  • 입력 검증: 사용자 입력을 철저히 검증하여 SQL Injection 공격을 방지해야 합니다.
  • 최소 권한 원칙: SQL Server 인스턴스의 사용자에게 최소한의 권한만 부여하여, 공격자가 시스템에 미치는 영향을 줄여야 합니다.

결론적으로, xp_cmdshell은 매우 강력한 도구이지만, 적절한 보안 조치를 취하지 않으면 SQL Injection 공격에 악용될 수 있는 위험이 있습니다.

profile
DevSecOps Pentest🚩

0개의 댓글