로컬 시스템 계정으로 CMD.exe를 어떻게 실행합니까?


144

현재 Vista를 실행하고 있으며 Windows 서비스와 동일한 작업을 수동으로 완료하려고합니다. Windows 서비스가 로컬 시스템 계정으로 실행 중이므로 동일한 동작을 에뮬레이션하고 싶습니다. 기본적으로 로컬 시스템 계정으로 CMD.EXE를 실행하고 싶습니다.

DOS 작업 스케줄러 AT 명령을 사용하여 CMD.exe를 라우 칭하는 정보를 온라인에서 찾았지만 "보안 향상으로 인해이 작업은 제외되었지만 대화식으로는 수행되지 않습니다."라는 Vista 경고를 받았습니다. 다음은 샘플 명령입니다.

AT 12:00 /interactive cmd.exe

또 다른 솔루션은 CMD.exe 만 시작하는 서비스 제어 (sc.exe)를 통해 보조 Windows 서비스를 만들 것을 제안했습니다.

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

이 경우 서비스가 시작되지 않고 다음과 같은 오류 메시지가 나타납니다.

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

세 번째 제안은 예약 된 작업을 통해 CMD.exe를 시작하는 것입니다. 다양한 계정으로 예약 된 작업을 실행할 수 있지만 로컬 시스템 계정이 그 중 하나라고 생각하지 않습니다.

Runas도 사용해 보았지만 예약 된 작업을 실행할 때와 동일한 제한을 받고 있다고 생각합니다.

지금까지 나의 각 시도는 실패로 끝났다. 어떤 제안?

답변:


221

개인적으로 테스트하지는 않았지만 위에서 언급 한 AT COMMAND 솔루션이 XP, 2000 및 Server 2003에서 작동 할 것이라고 믿을만한 충분한 이유가 있습니다. 내 Bryant의 테스트에 따르면 Vista와 동일한 접근 방식이 작동하지 않는 것으로 나타났습니다. 또는 Windows Server 2008-추가 된 보안 및 / interactive 스위치가 더 이상 사용되지 않기 때문일 수 있습니다.

그러나이 기사 를 통해 SysInternals (2006 년 7 월 Microsoft에 인수 됨) 의 PSTools 를 사용하는 방법을 보여주었습니다 . 다음을 통해 명령 줄을 시작했으며 갑자기 로컬 관리자 계정에서 마술처럼 실행되었습니다.

psexec -i -s cmd.exe

PSTools가 잘 작동합니다. 내 문제에 대한 적절한 해결책을 제공하는 가볍고 잘 문서화 된 도구 세트입니다.

도움을 주신 분들께 감사드립니다.


11
나는 이것을 -d추가하는 것이 더 좋아서 내가 시작한 콘솔을 계속 사용할 수 있습니다.
SamB

1
방금 Vista x64에서 "PsExec 서비스가 실행 중입니다 ... 호환되지 않는 버전입니다." \\ live.sysinternals.com \ tools \ psexec 및 최신 바이너리에서 직접 시도했습니다. x64 버전이없는 것 같습니다
ZXX

52
  1. Sysinternals에서 psexec.exe를 다운로드하십시오 .
  2. C : \ 드라이브에 넣으십시오.
  3. 표준 또는 관리자로 로그온하고 다음 명령을 사용하십시오 cd \.. psexec가있는 드라이브의 루트 디렉토리에 위치합니다.
  4. 다음 명령을 사용하십시오. psexec -i -s cmd.exe여기서 -i는 대화 식용이고 -s는 시스템 계정 용입니다.
  5. 명령이 완료되면 cmd 쉘이 시작됩니다. 유형 whoami; 그것은 '시스템'이라고 말할 것입니다
  6. 작업 관리자를 엽니 다. explorer.exe를 종료하십시오.
  7. 관리자 권한 명령 셸 유형 start explorer.exe.
  8. 탐색기가 시작되면 시작 메뉴 표시 줄에 "system"이라는 이름이 표시됩니다. 이제 system32 디렉토리에서 일부 파일을 삭제할 수 있습니다. 관리자는 삭제할 수 없거나 관리자 권한으로 파일을 삭제하기 위해 권한을 변경해야합니다.

Windows의 보호 된 디렉토리에서 시스템 파일의 이름을 바꾸거나 삭제하려는 사용자는 파일 이름을 바꾸는 동안 모든 Windows 파일이 DACLS에 의해 보호된다는 것을 알아야합니다. 소유자를 변경하고 파일을 소유 한 TrustedInstaller를 바꾸고 모든 사용자를 파일의 소유자로 관리자 그룹에 속하고 권한을 변경 한 후 이름을 바꾸려고하면 작동하며 커널 권한으로 Windows 탐색기를 실행하는 동안 보안상의 이유로 네트워크 액세스 측면에서 다소 제한적이며 여전히 연구 주제입니다. 다시 접근 할 수 있도록


이 트릭을 사용하여 고급 사용자로 탐색기를 자주 시작합니다. 특히 VNC를 통해 PC에 연결하는 경우 예를 들어 네트워크 설정을 설정해야합니다. +1
TPAKTOPA

이 트릭은 현재 유효하지 않은 것 같습니다. 내 OS는 Windows 7 SP1입니다. 시작 메뉴 표시 줄에서 "시스템"을 보았습니다. 그러나 여전히 system32 폴더의 파일 이름을 바꿀 때 권한이 거부되었다고 말합니다. system32 폴더는 이제 TrustedInstaller가 소유하며 로컬 시스템 계정도 특별한 권한 만 갖습니다.
Shaohua Li

TrustedInstaller가 소유 한 보호 된 Windows 디렉토리에있는 파일의 이름을 바꾸거나 삭제하려고하면 현재 사용자가 권한을 변경하여 파일을 소유해야하며 파일 이름을 바꾸거나 삭제할 수 있습니다. 이는 종종 slmgr을 삭제하는 데 사용됩니다. exe 및 기타 시스템 파일을 사용하여 비용을 지불하지 않고 트레일 버전의 윈도우에 무제한 액세스 할 수 있습니다.
raven

10

찾을 답변 여기에 /를 k binPath 매개 변수에 시작 추가하여 문제를 해결하는 것 같다. 그래서 그것은 당신에게 줄 것입니다 :

sc create testsvc binpath= "cmd /K start" type= own type= interact

그러나 Ben은 그에게 효과가 없으며 Windows Server 2008에서 시도했을 때 로컬 시스템에서 cmd.exe 프로세스를 만들었지 만 대화식이 아니 었습니다 (창을 볼 수 없음).

나는 당신이 요구하는 것을 할 수있는 쉬운 방법이 없다고 생각하지만 왜 당신이 그것을하고 있는지 전혀 궁금합니다. 서비스를 실행할 때 무슨 일이 일어나고 있는지 보려고합니까? exe를 로컬 시스템으로 실행하는 대신 로깅을 사용하여 무슨 일이 일어나고 있는지 확인할 수있는 것 같습니다 ...


안녕하세요 브라이언트. 이 솔루션은 본질적으로 질문에 요약되어 있습니다. 실제로 당신을 위해 작동합니까? 그것은 나에게 실패를 초래합니다. 감사.
Ben Griswold

Bryant, 다른 구성 요소의 설치 및 제거를 관리하는 서비스가 있습니다. 서비스가 작업을 수행하지 못하는 경우 지원 그룹에 구성 요소를 "강제로"제거하는 쉬운 방법을 제공하려고합니다. 테스트하는 동안 제거를 "강제로"할 수 있기를 원합니다. 도움을위한 Thx ..
Ben Griswold

1
@Ben : "대화식 서비스 감지"서비스 시작 유형이 "수동"또는 "사용 안 함"으로 설정되어 있습니까?
Hello71

1
Server 2012의 대화 형 서비스를 허용하려면 HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices0으로 설정해야합니다 (기본값 1)
Ivan Chau


6

너무 특권이있는 로컬 시스템 컨텍스트가 아니라 서비스에서 실제로 필요한 최소 권한 세트를 해결하는 것이 좋습니다. 예를 들어, 로컬 서비스 입니다.

세션 0 격리 로 인해 대화식 서비스가 더 이상 작동하지 않거나 Windows Vista 및 Windows Server 2008에서 더 이상 UI를 표시하지 않습니다 .


4
마이크, 답변 주셔서 감사합니다. 귀하의 권장 사항에 동의하고 모든 사람이 귀하의 답변으로부터 혜택을받을 것이라고 생각하지만, 귀하가 그 질문에 답변 한 것으로 생각하지 않습니다.
Ben Griswold

@Ben Griswold : 그러나 그는 비스타에서 기존 방식이 실패하게 만드는 것이 무엇인지 정확히 지적합니다. +1.
SamB

1
문제는 "로컬 시스템 계정으로 CMD.exe를 어떻게 실행합니까?"입니다.
Jaco Pretorius 2016 년

2
@SamB, 그리고 그것이 실제로 답변 이 아닌 기여할 무언가가있을 때 의견의 내용 입니다.
Synetech

6

실행 보안 데스크톱을 사용 cmd.exe으로system

CMD디버거를 연결하여 Windows XP / Vista / 7 / 8.1에서 커널 액세스를 쉽게 얻을 수 있습니다 .

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. CMD관리자 권한 으로 실행

  2. 그런 다음 Elevated에서이 명령을 사용하십시오.

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. 그런 다음 osk(화면 키보드)를 실행하십시오 . 프로세스 탐색기를 통해 확인하면 여전히 시스템 무결성 수준으로 실행되지 않지만 서비스 세션에서 OSK를 사용할 수 있으면 다음과 같이 실행됩니다.NT Authority\SYSTEM

Secure Desktop에서 실행해야한다는 생각이 들었습니다.

모든 파일을 관리자로 시작하십시오. UAC 프롬프트가 나타나면 바로 키를 눌러 Win+ U와 시작 OSK과 시작됩니다 CMD대신. 그런 다음 상승 프롬프트에 whoami당신은 얻을 것이다 NT Authority\System. 그런 다음 시스템 명령 셸에서 Explorer를 시작하고 시스템 프로필을 사용할 수 있지만 보안상의 이유로 SYSTEM 권한을 통해 네트워크에서 수행 할 수있는 작업이 다소 제한되어 있습니다. 나는 1 년 전에 그것을 발견하면서 나중에 더 많은 설명을 추가 할 것입니다.

이것이 어떻게 일어나는지에 대한 간략한 설명

Cmd.exe사용하지 않고 로컬 시스템 계정으로 실행PsExec. 이 방법은 이전에 발견 된 디버거 트랩 기술을 실행합니다.이 기술은 디버거에 교묘하고 악의적 인 웜이나 맬웨어를 포착하고 다른 exe를 실행하여 확산이나 일시적인 손상을 막는 데 사용할 수있는 고유 한 이점이 있습니다. 이 레지스트리 키는 Windows 기본 디버거에서 화면 키보드를 트랩하고 대신 cmd.exe를 실행하지만 cmd는 여전히 로그온 한 사용자 권한으로 실행되지만 session0에서 cmd를 실행하면 시스템 셸을 얻을 수 있습니다. 그래서 우리는 여기에 또 다른 아이디어를 추가합니다. 안전한 데스크탑에서 cmd를 확장합니다. 시스템 계정의 세션 0에서 안전한 데스크탑 실행을 기억하고 시스템 쉘을 얻습니다. 따라서 상승 된 것을 실행할 때마다 대화 형이 아닌 어두운 바탕 화면에서 UAC 프롬프트와 UAC 프롬프트에 응답해야합니다. 일단 표시되면 Win+ U를 누른 다음OSK당신은 얻을 것이다 CMD.exe로컬 시스템 권한으로 실행. 로 로컬 시스템 액세스를 얻는 더 많은 방법이 있습니다CMD


NT NT 권한으로 상승한 것처럼 cmd를 실행하는 더 많은 방법이 있습니다
raven

이것은 매우 좋군요. 아주 좋아요 나는 무언가를 끝내기 위해 타사 애드온에 의존하는 것을 싫어합니다. 이것은 매우 빠르고 쉽습니다. 영구 : :) 유일한 문제는 UAC 창에서 모든 명령을 실행해야하며 일부 응용 프로그램 만 열린다는 것입니다. 예를 들어 Explorer.exe가 열리지 않습니다. 이것을 유발하는 다른 방법이 있는지 실험하고 싶습니다. UAC가 특정 앱을 제한하지 않고 기본 Windows 환경에서 다른 앱을 실행할 수 있기를 원합니다. 멋진 물건 까마귀!
KonaRin

3

이에 대한 대안은 다음과 같이 실행하면 프로세스 해커입니다 (대화식은 보안 강화 기능이있는 사람들에게는 작동하지 않지만 중요하지 않습니다). 상자가 열릴 때 서비스를 상자 유형에 넣고 시스템을 사용자 상자에 넣고 C : \ Users \ Windows \ system32 \ cmd.exe 나머지는 확인을 클릭하고 cmd가있는 창을 가져 와서 시스템으로 실행하면 시스템을 실행할 때 다른 단계를 수행합니다.


2

다른 방법이 있습니다. 상승 된 cmd를 실행할 수있는 PowerRun이라는 프로그램이 있습니다. TrustedInstaller 권한이있는 경우에도 마찬가지입니다. 콘솔 및 GUI 명령을 모두 허용합니다.


1

대화식 일 필요가없는 배치 파일을 작성할 수 있으면 해당 배치 파일을 서비스로 실행하여 수행해야 할 작업을 수행하십시오.


0

RunAsTi 유틸리티를 사용하여 TrustedInstaller (높은 권한) 로 실행 합니다. 이 유틸리티는 심지어 윈도우 (당신이 수행하여 입력 모드 복구 모드에서 사용할 수있는 Shift+를 Restart)는 psexec에 유틸리티가 작동하지 않습니다 있습니다. 하지만 당신은 추가해야 C:\Windows하고 C:\Windows\System32(하지 X:\WindowsX:\Windows\System32받는 사람) 경로를PATH , 그렇지 않으면 환경 변수 RunAsTi가 복구 모드에서 작동하지 않습니다, 그냥 인쇄됩니다 : 호출자에게 할당 된 참조 된 모든 권한 또는 그룹 : SeImpersonateName에 대한 AdjustTokenPrivileges는 .


0

작업 스케줄러를 사용하여 적절한 / add : / user : 및 / pass 인수를 사용하여 SYSTEM에서 실행중인 CMDKEY 실행을 예약하십시오.

아무것도 설치할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.