Powershell简介
PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能,并且powershell存在于诸多系统中。
Powershell编写脚本
很多人不太了解powershell,包括它内置了很多的命令,假如你想写一个powershell脚本,那么可以通过定义函数,然后调用这些命令(因为本人有点小菜,所以就想到一个小小的方法,那就是用后面介绍的ise)。
我们可以通过Get-Command命令 。
Get-Command使您可以一次显示所有可用的PowerShell命令。
当然了我们还可以通过poweshell ise。
可以看到在右面是命令并且还可以筛选你想要的命令!
那么如何熟悉这些命令呢?
我们看一下powershell的命名规则,可以看出来命令都包含一个动词和一个名词,由连字符分隔。比如关机命令Stop-Computer 在ise中还可看相应的参数!
科普就到这里了 我们要进入重点了!
利用powershell做渗透用
那么我们今天就从第一步入手powershll做信息收集
端口扫描器大家都知道nmap,但是有没有想过用powershell做一个简单的端口扫描器呢?
首先我们了解一下,
TCP(Transmission Control Protocol传输控制协议)三次握手:
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)。
三次握手建立一个连接
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
· 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
· 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
· 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
当计算机将SYN发送到另一台计算机时,远程计算机通常会回答SYN + ACK或RST。通过这个事实,我们可以测试端口是否打开。
(不太会画图,可能不太好看)
要测试端口是否打开,可以使用不同的端口扫描程序。当然我们要用Test-NetConnection和自制脚本。
Test-NetConnection:
Baidu.com的端口80是开放的(SYN + ACK)。
测试代码
到PowerShell或PowerShell ISE运行,然后命令Test-Port变为可用。
这时如果无误就可以看到有自动补齐!
我们来解释一下这个代码。
Function Test-Prot是定义了一个powershell函数这是我们自己命名的!
然后分别调用了powershell内置的模块(使用Get-Module -ListAvailable命令可查看所有模块)。
我们一步一步来解释。
通过图片可以看出来通过调用test-netconnection命令进行的扫描。
命令详情(https://docs.microsoft.com/de-de/previous-versions/windows/powershell-scripting/dn372891(v=wps.640))
简简单单的。
通过用户输入赋值给我们所定义的参数然后带入的命令中去执行!
然后整个命令内容给了$a.
If进行判断当我们的Test-NetConnection命令执行。
判断返回的TcpTestSucceeded是否为true 也就是端口开放。
如果测试端口为开放那么。
Write-host输出$a的computername的内容和remoteport的内容为绿色!
如果端口关闭则是红色!
假如我们入侵一个服务器要进行内网渗透,但是服务器上的工具有限,powershell可以是一个不错的选择,就像python黑客编程一样!
本文转载:https://www.4hou.com/technology/16192.html
作者: lionhoo