filter tb64 { [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($_)) } - przydatny filtr do kodowania Base64
Zacznijmy od prostego przykładu:
PS /Users/drg> filter tb64{[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($_))}
PS /Users/drg> whoami
drg
PS /Users/drg> whoami | tb64
ZAByAGcA
PS /Users/drg>
Tworząc ten filtr, w wygodny sposób możemy mieć pod ręką szybki sposób na kodowanie danych do base64. Jedno z zastosowań to przygotowanie danych do eksfiltracji. Koklejnym jest przygotowanie payloadu do uruchomienia przez Powershella z wykorzystaniem opcji -enc, czyli np:
PS C:\Users\Administrator> echo "whoami"|tb64
dwBoAG8AYQBtAGkA
PS C:\Users\Administrator> powershell -enc dwBoAG8AYQBtAGkA
win-rvm4fv5tv8u\administrator
PS C:\Users\Administrator>
Co jest istotnego w filtrach?
Różnica między filtrem a chociażby funkcją polega na tym, że filtr przetwarza pojedyńczo każdy element wejściowy, zobaczcie:
PS C:\Users\Administrator> ls C:\Users\
Directory: C:\Users
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 6/14/2020 4:03 PM Administrator
d-r--- 2/10/2020 9:19 AM Public
PS C:\Users\Administrator> ls C:\Users\|tb64
QQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgA=
UAB1AGIAbABpAGMA
PS C:\Users\Administrator>
Generalnie to jest duży plus filtrów, natomiast warto o tym pamiętać, że jeśli byśmy chcieli zakodować całe wyjście poprzedniego polecenia w jeden duży string base64, jednym ze sposobów byłoby zamienienie całego wyjścia polecenia na string z użyciem Out-String, a następnie to przekazać do naszego filtra:
PS C:\Users\Administrator> ls C:\Users\|out-string|tb64
DQAKAA0ACgAgACAAIAAgAEQAaQByAGUAYwB0AG8AcgB5ADoAIABDADoAXABVAHMAZQByAHMADQAKAA0ACgANAAoATQBvAGQAZQAg
ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAEwAYQBzAHQAVwByAGkAdABlAFQAaQBtAGUAIAAgACAAIAAgACAAIAAgACAA
TABlAG4AZwB0AGgAIABOAGEAbQBlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg
ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAADQAKAC0ALQAtAC0AIAAgACAAIAAgACAAIAAgACAAIAAgACAA
IAAgACAAIAAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtACAAIAAgACAAIAAgACAAIAAgAC0ALQAtAC0ALQAtACAALQAtAC0ALQAg
ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAA
IAAgACAAIAAgACAAIAAgAA0ACgBkAC0ALQAtAC0ALQAgACAAIAAgACAAIAAgACAANgAvADEANAAvADIAMAAyADAAIAAgACAANAA6
ADAAMwAgAFAATQAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIAIAAgACAA
IAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAANAAoAZAAt
AHIALQAtAC0AIAAgACAAIAAgACAAIAAgADIALwAxADAALwAyADAAMgAwACAAIAAgADkAOgAxADkAIABBAE0AIAAgACAAIAAgACAA
IAAgACAAIAAgACAAIAAgACAAIABQAHUAYgBsAGkAYwAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAg
ACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAADQAKAA0ACgANAAoA
PS C:\Users\Administrator>