【权限维持技术】PowerShell网络探测

admin 2023年11月28日22:56:16评论14 views字数 2840阅读9分28秒阅读模式



【权限维持技术】PowerShell网络探测

免责声明

【权限维持技术】PowerShell网络探测

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。



【权限维持技术】PowerShell网络探测

存活探测

【权限维持技术】PowerShell网络探测

Ping 全称“Packet Internet Groper”,是一个网络诊断工具,用于检测计算机是否能够访问网络中的其他计算机或服务器,并且能够测量数据包从源计算机到目标计算机所需的时间。

Ping 工具发送一个特殊类型的数据包(称为 ICMP Echo Request) 到目标 IP 地址,然后等待接收 ICMP Echo Reply。如果接收到回复数据包,Ping 就会输出关于数据包往返时间和是否成功收到回复的信息。
Ping 有一些常用参数和概念:
  • IP 地址/主机名:你想要 Ping 的远程计算机或服务器的 IP 地址或主机名。
  • 包大小:发送的 ICMP 请求数据包的大小。默认大小通常为 32 字节。
  • 超时:等待 ICMP 回复的最长时间。如果在此时间内没有收到回复,那么就会认为 Ping 测试失败。
  • 计数:Ping 测试的次数。根据需要,你可以进行一次或多次 Ping 测试。
在 PowerShell 中,可以使用 Test-Connection cmdlet 来执行 Ping 测试。使用此 cmdlet,你可以指定要 Ping 的计算机,Ping 测试的次数和包大小,以及等待回复的超时时间。
Test-Connection -Count 1 -ComputerName 127.0.0.1

那么,我们可以写一个脚本,参数为扫描范围,来批量进行存活探测。这个脚本接受一个参数 -ScanRange,这个参数可以是一个 C 子网(例如:192.168.1.0/24),一个单独的 IP 地址(例如:192.168.1.10),或者一个 IP 地址范围(例如:192.168.1.0-192.168.1.255)。

param(    [Parameter(Mandatory=$True)]    [string]$ScanRange)
function Ping-IPRange { param ( [Parameter(Mandatory=$True)] [string]$Range ) if($Range -match "/") { # 检测是否为C段子网地址 $subnet = $Range.Substring(0, $Range.IndexOf("/")) $subnetPrifixLength = $Range.Substring($Range.IndexOf("/") + 1) $ipStart = $subnet.substring(0, $subnet.lastIndexOf(".")) 1..254 | ForEach-Object { Test-Connection -ComputerName "$ipStart.$_" -Count 1 -ErrorAction SilentlyContinue| Format-Table -Property ProtocolAddress, ResponseTime} } elseif($Range -match "-") { # 检测是否为IP范围 $start = $Range.Split('-')[0] $end = $Range.Split('-')[1] $ipStart = $start.substring(0, $start.lastIndexOf(".") + 1) $ipStartNum = $start.substring($start.lastIndexOf(".") + 1)
$ipEndNum = $end.substring($end.lastIndexOf(".") + 1)
$ipStartNum..$ipEndNum | ForEach-Object { Test-Connection -ComputerName "$ipStart$_" -Count 1 -ErrorAction SilentlyContinue | Format-Table -Property ProtocolAddress, ResponseTime } } else { # IP地址 Test-Connection -ComputerName $Range -Count 1 -ErrorAction SilentlyContinue | Format-Table -Property ProtocolAddress, ResponseTime }}
Ping-IPRange -Range $ScanRange

【权限维持技术】PowerShell网络探测



【权限维持技术】PowerShell网络探测

端口扫描

【权限维持技术】PowerShell网络探测

端口扫描同样使用使用PowerShell的Test-NetConnection cmdlet。

这个命令将发起一个到指定IP地址的网络连接,在指定端口进行监听。如果连接成功,我们可以得知这个端口是开放的;否则,这个端口可能是关闭或者被过滤的。使用示例和完整代码如下:

Test-NetConnection -ComputerName 192.168.171.21 -Port 80
param(    [Parameter(Mandatory=$True)]    [string]$ScanRange,    [Parameter(Mandatory=$True)]    [int]$StartPort,    [Parameter(Mandatory=$True)]    [int]$EndPort)
function Scan-PortRange { param( [Parameter(Mandatory=$True)] [string]$IpAddress, [Parameter(Mandatory=$True)] [int]$StartPort, [Parameter(Mandatory=$True)] [int]$EndPort ) $StartPort..$EndPort | ForEach-Object { $Port = $_ try{ $Connection = Test-NetConnection -ComputerName $IpAddress -Port $Port -WarningAction SilentlyContinue if ($Connection.TcpTestSucceeded){ Write-Output "Port $Port is open on $IpAddress" } else { Write-Output "Port $Port is closed on $IpAddress" }
} catch { Write-Output "An error occurred testing port $Port on $IpAddress" } }}
#调用Scan-PortRange函数即可开始扫描指定IP地址的端口范围Scan-PortRange -IpAddress $ScanRange -StartPort $StartPort -EndPort $EndPort

【权限维持技术】PowerShell网络探测



【权限维持技术】PowerShell网络探测

总结

【权限维持技术】PowerShell网络探测

本文讲述了如何使用PowerShell的Test-NetConnection进行存活探测和端口扫描。实际上脚本还有很多可以优化的地方,后文将深入讲述如何利用PowerShell进行更多精细化的探测。

【权限维持技术】PowerShell网络探测


原文始发于微信公众号(赛博安全狗):【权限维持技术】PowerShell网络探测

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月28日22:56:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【权限维持技术】PowerShell网络探测http://cn-sec.com/archives/2248325.html

发表评论

匿名网友 填写信息