MS - SQL에서 도스 명령어를 실행할 수 있습니다.

바로 xp_cmdshell 을 통해서죠.

간단히 말하면 xp_cmdshell는 도스 명령어를 실행할 수 있게 해주는 프로시저입니다.

다음은 디렉터리 명령을 실행하는 xp_cmdshell 확장 저장 프로시저를 보여 주는 예제입니다.
EXEC master..xp_cmdshell 'dir *.exe'

(참고, 기본적으로 디렉토리의 시작은 C:\WINNT\system32\ 입니다.
그러니 저 명령어는 C:\WINNT\system32\*.exe 파일을 찾겠네요.

또 다른 예를 볼까요?

xp_cmdshell 'del C:\TEST.CSV'
이렇게 하면 해당 파일을 찾아서 지워줍니다. 파일이 없으면 파일이 없다고 결과값을 반영하고,
별 에러없이 지워졌으면 NULL결과값을 반영합니다.

우와 잘못하다간 C를 통째로 날려 버릴수도 있겠네요.. 즉 QA랑 db계정만 알고 있으면
해킹은 간단합니다. 예전에 MS-SQL 7.0 일 경우에는 설치할 때 sa의 패스워드를 설치시 묻지도 않아서 ODBC를 통한 해킹도 쉽게 가능했습니다.

다음은 MSDN의 좀 더 실질적인 예제입니다.
사용자에게 net send를 사용하여 SQL Server가 곧 종료된다는 것을 알리고 net pause를 사용하여 서버를 일시 중지한 다음, net stop을 사용하여 서버를 종료합니다.

CREATE PROC shutdown10
AS
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down
in 10 minutes. No more connections allowed.', no_output
EXEC xp_cmdshell 'net pause sqlserver'
WAITFOR DELAY '00:05:00'
EXEC xp_cmdshell 'net send /domain: SQL_USERS ''SQL Server shutting down
in 5 minutes.', no_output
WAITFOR DELAY '00:04:00'
EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down
in 1 minute. Log off now.', no_output
WAITFOR DELAY '00:01:00'
EXEC xp_cmdshell 'net stop sqlserver', no_output



이런것 만들어 두면 편하겠죠?


xp_cmdshell 프로시저를 사용하면 다양하게 응용할 수 있습니다. 
2009/08/01 10:30 2009/08/01 10:30

Trackback Address :: https://youngsam.net/trackback/644