본문 바로가기

ETC

xp_cmdshell

반응형

수업중에 xp_cmdshell에 대해서 짤막하게 나온 내용이 있었습니다.

평소에 MSSQL을 거의 다뤄보지 못해서 이번 기회에 xp_cmdshell이 뭔지 한번 알아보고 정리해 보기로..


======================================================

xp_cmdshell 

정의 : Windows 명령 shell을 생성하고 실행하기 위해서 사용되는 시스템 SP

구조 : xp_cmdshell { 'command_string' } [, no_output] 

예제 : EXEC xp_cmdshell 'ping smishing.kr';

적용 대상 : SQL Server (현재도 사용되고 있다고 합니다)

======================================================


처음 이 SP를 봤을 때에는 XP에서만 되는건가..? 라고 했는데 그건 아니라고 하네요.. (역시 ㅋㅋ)


MSSQL 2000에서는 이 SP 가지고 새로운 계정도 만들수도 있다고 했었다네요

(지금 현재는 관리자인 systemadmin만 이것을 사용할 수 있도록 MS에서 개선했다고 합니다.)


근데? 이것이 왜 위험한건가요?


--> 일반적으로 웹 서비스 DB 같은 경우에는 DB를 연결할때 root(systemadmin, 관리자) 권한으로 연결을 합니다. (뭐 저도 물론 그렇.. 이제 안그럽니다)

--> 그렇게 되면 웹 서비스 사용자는 관리자가 아니지만 사용자가 DB에 쿼리를 요청하게 되면 DB 상에서는 관리자 권한으로 쿼리를 날리게 됩니다. (사실 사용자 하나하나 관리하고 연결하는게 귀찮고, 하나하나 권한 줘야 하는것이 그렇게 간단..한 일은 아니니깐요)

--> MS가 이 SP를 관리자만 사용할 수 있도록 수정했지만 DB 상에서 웹 서비스 사용자와 관리자를 구분하지 못하기 때문에 그냥 OK 해버리고 쿼리의 결과값을 요청자에게 보여줍니다.

--> GAME SET!


이 취약점을 통해서 뭘 할수 있을까요?


수업에서는 ping을 날리고, netcat listening을 했지만 실체적으로 더 많은걸 할 수 있습니다.

Visual Basic Script를 작성하고 저장하고 execute 한다거나 하면..

거기다가 ABS라면.. 왔더풔X

그리고 관리자에게 악감정을 가지고 파일들을 삭제하는 del 명령을 내린다거나 shutdown 명령을 사용하면..

게임은 끝나게 됩니다.


해결법 - 물론 모든 해결법은 아니지만 막을수는 있음요

웹 서비스 시에 systemadmin으로 연결하시면 안됩니다. 따로 권한을 가진 유저를 생성해 주세요!


참고 

http://msdn.microsoft.com/ko-kr/library/ms175046.aspx

http://joshua95.net/365


자소서 쓰러 가야지




반응형