띵유로그

[SQL Server] xp_cmdshell오류 해결 방법과 보안 취약점 본문

데이터베이스

[SQL Server] xp_cmdshell오류 해결 방법과 보안 취약점

띵유 2022. 2. 9. 12:05
반응형

xp_cmdshell을 통해 BCP 명령어를 실행해서 대량의 데이터를 가져올 일이 있었습니다만 여러 오류를 만났습니다. 

오류 해결 과정을 기록해둡니다.

 

1. xp_cmdshell 이 activate 되어있는지 확인합니다.

EXEC sp_configure 'show advanced options', 1
go
RECONFIGURE
go
EXEC sp_configure 'xp_cmdshell', 1
go
RECONFIGURE
go

 

 

2. SQL Server 구성관리자에서 TCP/IP를 사용중인지 확인합니다.
=> SQL Server 네트워크 구성 -> MSSQLSERVER에 대한 프로토콜 -> TCP/IP 사용으로 변경

 

3.   . 을 찍기.... 
소유한 데이터베이스 앞에 .를 찍습니다.

xp_cmdshell는 시스템데이터베이스인 master 데이터베이스의 시스템확장 저장프로시져입니다.

 따라서 EXEC .master..xp_cmdshell 'dir C:\' 와 같이 실행하면 정상 실행됩니다.

그냥 EXEC .xp_cmdshell 'dir C:\'  로 실행해도 됩니다.

(추측컨데, 현재 접속한 server 의 SP라고 명시적으로 지정해주는 것같습니다... 누가 제발 알려주세요..)

 

https://stackoverflow.com/questions/27744071/xp-cmdshell-transport-level-error에서 참고했습니다.

 

아래 오류 메세지를 반환했다면 3번 방법으로 해결될 확률이 높습니다.

서버로부터 결과를 수신하는 동안 전송 수준 오류가 발생했습니다. (provider: TCP Provider, error: 0 - 세마포 제한 시간이 만료되었습니다.)

 

 

xp_cmdshell 취약점

 

mssql 의 가장 큰 보안 취약점은 xp_cmdshell 을 이용한 injection 해킹입니다. 

xp_cmdshell을 사용한다면 cmd창에서 날릴수 있는 모든 명령어를 날릴 수 있다보니, 암호를 변경하고 사용자 활성화를 할 수 있습니다. 따라서 xp_cmdshell은 되도록이면 비활성화 해두는 것이 좋습니다.

참고 : https://iseogs.tistory.com/74 / http://ankyu.entersoft.kr/lecture/security/05_security_01.asp

 

반응형
Comments