윈도우 시스템에 내장된 파워쉘(Powershell)은 기본적으로 원격 명령어를 실행할 수 없도록 제한되어 있다.


하지만, 파워쉘의 목적은 원격 작업을 하기 위한 목적으로 내부 사용자들에게 정책을 내리거나 정보를 가져와야 하므로 원격 명령어를 실행할 수 있도록 설정한다.


액티브 디렉토리(AD, Active Directory), 단일 서버(Standalone)에서 원격 명령어를 실행하는 방법을 알아본다.

 

액티브 디렉토리 환경

invoke-command는 로컬, 원격 명령어를 실행하거나 여러개의 명령어를 일괄적으로 처리한다.


-scriptblock {get-process}은 로컬에서 실행중인 현재의 프로세스 정보를 가져오는 옵션으로 중괄호 안에 실행할 명령어를 적는다.


PS C:\Users\dazeuser\Desktop> invoke-command -scriptblock {get-process}

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     88       5     4340      10836    69     0.20   2912 conhost
     34       2      820       2836    30     0.03   3668 conhost
    569       6     1800       5052    52             316 csrss
    252       8     7804      14652   164             368 csrss
    195       8     2964       8924    36             308 dllhost
    126       7    64616      75020   132     2.61   3624 dwm
    125       6     3724       8688    74     0.42   1772 Everything

윈도우 클라이언트에서 invoke-command 명령어를 이용해 도메인 컨트롤러의 현재 실행중인 프로세스를 가져온다. 하지만, 명령어 실행 시 자격 증명(패스워드)를 입력해도 액세스가 거부되었다는 메시지가 출력된다.


○ -computername nyc-dc1 : 원격 컴퓨터 이름

○ -credential dazehack\dazeuser : 도메인\일반사용자


PS C:\Users\dazeuser> invoke-command -scriptblock {get-process} -computername nyc-dc1 -credential dazehack\dazeuser
[nyc-dc1] 다음 오류 메시지가 발생하여 원격 서버에 연결하지 못했습니다. 액세스가 거부되었습니다. 자세한 내용은 about_Rem
ote_Troubleshooting 도움말 항목을 참조하십시오.
    + CategoryInfo          : OpenError: (:) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionStateBroken

액세스가 거부된 이유는 dazeuser 사용자의 권한이 제한되어 있거나 원격 관리 서비스(WinRM)가 비활성화 된 것이다. dazeuser 사용자의 그룹을 Domain Users 그룹에 포함시킨다.


○ 도메인 컨트롤러에서 시작 > 관리 도구 > Active Directory 사용자 및 컴퓨터

○ Users > dazeuser 속성 > 소속 그룹에 Domain Admins를 추가



도메인 컨트롤러에서 Enable-PSRemoting 명령어를 입력하면 원격 관리 서비스가 활성화된다.


PS C:\Users\Administrator> Enable-PSRemoting

WinRM 빠른 구성
WinRM 서비스를 통해 원격 관리할 이 컴퓨터를 사용하도록 설정하는 "Set-WSManQuickConfig" 명령을 실행합니다.
 이 작업에는 다음과 같은 내용이 포함됩니다.
    1. WinRM 서비스 시작 또는 다시 시작(이미 시작된 경우)
    2. WinRM 서비스 유형을 자동 시작으로 설정
    3. 모든 IP 주소에 대한 요청을 허용하는 수신기 만들기
    4. WS-Management 트래픽에 대한 방화벽 예외 사용(http 전용)

계속하시겠습니까?
[Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "Y"임): Y
이 컴퓨터에서 요청을 수신하도록 WinRM이 이미 설정되었습니다.
원격 관리를 위한 WinRM이 업데이트되었습니다.
이 컴퓨터에서 모든 IP 주소로 WS-Man 요청을 수락하려면 HTTP://*에서 WinRM 수신기를 만드십시오.
WinRM 방화벽 예외를 사용합니다.


확인
이 작업을 수행하시겠습니까?
대상 "세션 구성 "Microsoft.PowerShell32"이(가) 없습니다. "Register-PSSessionConfiguration Microsoft.PowerShell32
-processorarchitecture x86 -force" 명령을 실행하여 "Microsoft.PowerShell32" 세션 구성을 만들면 WinRM 서비스가 다시
시작합니다."에서 "세션 구성 등록" 작업을 수행합니다.
[Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "Y"임): Y

dazeuser 사용자에게 Domain Admins 권한을 부여하고, 원격 관리 서비스를 활성화한 상태이다. 윈도우 클라이언트에서 invoke-command 명령어를 입력하면 도메인 컨트롤러의 현재 실행중인 프로세스를 가져온다.


PS C:\Users\dazeuser\Desktop> invoke-command -scriptblock {get-process} -computername nyc-dc1 -credential dazehack\dazeus
er

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                    PSComputerName
-------  ------    -----      ----- -----   ------     -- -----------                    --------------
     81       8     4856       8168    77     0.20   1676 conhost                        nyc-dc1
     30       4     1112       2796    41     0.00   2536 conhost                        nyc-dc1
    566      12     2096       5824   113     0.66    328 csrss                          nyc-dc1
    191      11     2252       9148   175     1.36    404 csrss                          nyc-dc1
    229      13    14944      15448   158     0.90   2364 csrss                          nyc-dc1

윈도우 클라이언트에서 enter-pssession 명령어를 입력하고, 도메인 컨트롤러의 이름을 입력하면 도메인 컨트롤러의 세션(쉘)을 로컬로 가져온다. 도메인 컨트롤러의 쉘에서 1.txt 파일을 생성한다.


PS C:\Users\dazeuser> enter-pssession

cmdlet Enter-PSSession(명령 파이프라인 위치 1)
다음 매개 변수에 대한 값을 제공하십시오.
ComputerName: nyc-dc1
[nyc-dc1]: PS C:\Users\dazeuser\Documents> ipconfig

Windows IP 구성


이더넷 어댑터 로컬 영역 연결:

   연결별 DNS 접미사. . . . :
   IPv4 주소 . . . . . . . . . : 10.10.0.20
   서브넷 마스크 . . . . . . . : 255.255.0.0
   기본 게이트웨이 . . . . . . : 10.10.0.2

터널 어댑터 isatap.{87D394AF-B114-4B26-AE4B-FBFC492F1C1D}:

   미디어 상태 . . . . . . . . : 미디어 연결 끊김
   연결별 DNS 접미사. . . . :
[nyc-dc1]: PS C:\Users\dazeuser\Documents> ls
[nyc-dc1]: PS C:\Users\dazeuser\Documents> 1 > 1.txt
[nyc-dc1]: PS C:\Users\dazeuser\Documents> ls


    디렉터리: C:\Users\dazeuser\Documents


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2019-12-27  오후 12:55         12 1.txt

윈도우 클라이언트에서 new-pssession 명령어를 이용해 도메인 컨트롤러의 세션을 가져와서 현재 실행중인 프로세스 정보를 가져온다.


PS C:\Users\dazeuser> new-pssession -computername nyc-dc1

 Id Name            ComputerName    State    ConfigurationName     Availability
 -- ----            ------------    -----    -----------------     ------------
  1 Session1        nyc-dc1         Opened   Microsoft.PowerShell     Available

PS C:\Users\dazeuser> $a = get-pssession
PS C:\Users\dazeuser> $a

 Id Name            ComputerName    State    ConfigurationName     Availability
 -- ----            ------------    -----    -----------------     ------------
  1 Session1        nyc-dc1         Opened   Microsoft.PowerShell     Available


PS C:\Users\dazeuser> invoke-command -scriptblock {get-process} -session $a

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                    PSComputerName
-------  ------    -----      ----- -----   ------     -- -----------                    --------------
     81       8     4856       8188    77     0.34   1676 conhost                        nyc-dc1
     30       4     1112       2796    41     0.00   2536 conhost                        nyc-dc1
    549      12     2096       5816   113     0.66    328 csrss                          nyc-dc1

단일 서버 환경

A_computer\bughunting에서 Enable-PSRemoting 명령어를 입력하여 원격 관리 서비스를 활성화 시킨다.


PS C:\Users\bughunting> enable-psremoting

WinRM 빠른 구성
WinRM 서비스를 통해 원격 관리할 이 컴퓨터를 사용하도록 설정하는 "Set-WSManQuickConfig" 명령을 실행합니다.
 이 작업에는 다음과 같은 내용이 포함됩니다.
    1. WinRM 서비스 시작 또는 다시 시작(이미 시작된 경우)
    2. WinRM 서비스 유형을 자동 시작으로 설정
    3. 모든 IP 주소에 대한 요청을 허용하는 수신기 만들기
    4. WS-Management 트래픽에 대한 방화벽 예외 사용(http 전용)

계속하시겠습니까?
[Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "Y"임): y
이 컴퓨터에서 요청을 수신하도록 WinRM이 이미 설정되었습니다.
이 컴퓨터의 원격 관리에 사용할 WinRM이 이미 설정되었습니다.

확인
이 작업을 수행하시겠습니까?
대상 "이름: microsoft.powershell SDDL: O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD). 선택된 사용자가 이
컴퓨터에서 Windows PowerShell 명령을 원격으로 실행하도록 허용합니다."에서 "Set-PSSessionConfiguration" 작업을
수행합니다.
[Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "Y"임): y

B_computer\Administrator에서 B_computer와 연결된 모든 컴퓨터를 신뢰할 수 있도록 설정한다.


PS C:\Users\Administrator> get-service winrm

Status   Name               DisplayName
------   ----               -----------
Stopped  winrm              Windows Remote Management (WS-Manag...

PS C:\Users\Administrator> Set-Item WsMan:\localhost\Client\Trustedhosts -Value "*" -Force
PS C:\Users\Administrator> get-Item WsMan:\localhost\Client\Trustedhosts


   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client

Name                      Value                                                             Type
----                      -----                                                             ----
TrustedHosts              *                                                                 System.String


PS C:\Users\Administrator> get-service winrm

Status   Name               DisplayName
------   ----               -----------
Running  winrm              Windows Remote Management (WS-Manag...

B_computer\Administrator에서 invoke-command 명령어를 입력하면 원격 컴퓨터(A_computer\bughunting)에서 실행중인 프로세스 정보를 가져온다.


PS C:\Users\Administrator> invoke-command -scriptblock {get-process} -computername "10.10.0.29" -credential bughunting

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                    PSComputerName
-------  ------    -----      ----- -----   ------     -- -----------                    --------------
     61       3      776       3092    33     0.00   1360 armsvc                         10.10.0.29

▶ UAC(User Account Control) 우회 - PowerShell

▶ 파워쉘 난독화 (Powershell)

▶ WMI 개념 (Windows Management Instrumentation)

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유