
1. 項目概述與核心價值最近在整理自己的滲透測試實戰筆記翻到了DC-9這個靶機。它不像某些靶機那樣上來就給你一個明顯的漏洞入口而是需要你像偵探一樣從零散的信息中拼湊出攻擊路徑。整個過程涉及了Web應用安全中非常經典的SQL注入漏洞以及一個相對少見的提權技巧——端口敲門。很多朋友在打這個靶機時要么卡在信息收集不全要么在提權環節找不到頭緒。今天我就把整個通關流程結合我踩過的坑和總結的技巧從頭到尾拆解一遍。無論你是剛接觸滲透測試的新手還是想鞏固Web滲透知識體系的朋友這篇指南都能讓你對“漏洞串聯”和“權限提升”有更深刻的理解。DC-9靶機模擬了一個存在多處安全缺陷的網站最終目標是獲取系統的最高權限。它的核心價值在于它不是一個孤立的漏洞點而是一個完整的攻擊鏈演練。你需要先通過前端的SQL注入拿到后臺訪問權限然后在后臺發現新的攻擊面最后利用系統層面的配置缺陷完成提權。這個過程完美復現了現實中攻擊者“由外到內、層層遞進”的滲透思路。接下來我們就從最基礎的環境搭建和信息收集開始。2. 環境準備與初步信息收集2.1 靶機環境搭建與網絡配置首先你需要一個虛擬化環境來運行DC-9。我通常使用VMware WorkstationVirtualBox也是完全可行的。將下載好的DC-9靶機OVA文件導入后最關鍵的一步是設置網絡。務必將靶機的網絡適配器設置為“NAT模式”或“僅主機模式”。我強烈推薦使用“僅主機模式”并在你的攻擊機通常是Kali Linux上也配置一個同網段的僅主機網絡適配器。這樣做的好處是你和靶機構成了一個封閉的、不受外界干擾的測試環境避免了外部網絡掃描的干擾也符合安全測試的倫理要求。啟動靶機后它通常不會顯示IP地址。我們需要找到它。在Kali Linux中打開終端使用netdiscover或nmap進行二層或三層發現。一個更穩妥的方法是先進行ARP掃描sudo netdiscover -r 192.168.56.0/24假設你的僅主機網段是192.168.56.0/24這條命令會列出該網段內所有活躍的IP和MAC地址。找到那個不屬于你已知設備的IP很可能就是DC-9。記下這個IP地址我們后續所有操作都將針對它。注意有些虛擬化環境特別是VirtualBox的僅主機網絡可能需要你手動配置一個靜態IP給Kali并確保它能ping通靶機網段。如果發現網絡不通檢查一下虛擬網絡的DHCP服務器是否已啟用或者手動設置IP地址。2.2 全面的端口與服務掃描拿到靶機IP假設為192.168.56.105后下一步就是摸清它的“家底”——開放了哪些端口運行著什么服務。這里我習慣分兩步走先快速掃描確認開放端口再針對性地進行深度探測。第一步快速全端口掃描使用Nmap的-p-參數進行全端口掃描但為了加快速度可以結合--min-rate。nmap -p- --min-rate 1000 192.168.56.105這個命令會相對快速地掃描所有65535個端口。等待片刻你會發現DC-9只開放了80端口。這很有意思一個只開Web服務的靶機往往意味著所有突破口都集中在網站應用本身。第二步深度服務與版本探測針對開放的80端口我們需要進行更細致的掃描獲取Web服務器類型、版本甚至可能的目錄信息。nmap -sV -sC -p 80 192.168.56.105 -oA dc9_web_scan-sV: 探測服務版本。-sC: 使用默認的Nmap腳本進行更全面的檢查。-oA: 將結果以所有格式普通、XML、可讀輸出到文件方便后續查閱。掃描結果會顯示運行的是Apache httpd以及一些基本的HTTP頭信息。至此我們確定了唯一的攻擊入口運行在80端口的Web應用。3. Web應用滲透與SQL注入突破3.1 網站枚舉與功能點分析在瀏覽器中訪問http://192.168.56.105我們會看到一個名為“Jetstream”的酒店搜索頁面。它的功能很簡單通過城市名搜索酒店。作為滲透測試者我們看待每個輸入框的眼光都應該是“懷疑的”。這個搜索框就是最典型的用戶輸入點也是SQL注入漏洞的高發區。首先進行常規的目錄枚舉看看有沒有隱藏的管理后臺、配置文件或備份文件。可以使用gobuster或dirb工具。gobuster dir -u http://192.168.56.105 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,bak這個掃描可能會發現一些如/admin、/config.php之類的目錄或文件但在DC-9中關鍵信息往往就在明面上。我們回到搜索功能嘗試輸入一個單引號‘進行最基本的注入測試。在搜索框輸入‘并提交觀察頁面反應。如果頁面返回了數據庫錯誤如MySQL、SQLite的錯誤信息或者頁面布局出現異常沒有結果、空白頁那么存在SQL注入的可能性就極大。在DC-9中你會看到頁面返回了錯誤這證實了我們的猜想。3.2 SQL注入漏洞的手動利用與信息提取確認存在注入點后我們需要判斷注入類型字符型還是數字型以及可用的查詢方式。通過輸入1‘ and ‘1’’1和1‘ and ‘1’’2并觀察結果差異可以判斷這是字符型注入。接下來使用union select語句來提取數據。但首先要確定當前查詢的列數。使用order by語句進行猜測輸入‘ order by 1 -- -頁面正常輸入‘ order by 2 -- -頁面正常輸入‘ order by 3 -- -頁面正常輸入‘ order by 4 -- -頁面報錯這說明原始查詢返回了3列。-- -是SQL注釋符用于注釋掉后續的SQL代碼確保我們的注入語句語法正確。現在我們可以構造union查詢來獲取數據庫信息。首先查看當前數據庫和用戶‘ union select 1, database(), user() -- -提交后在頁面的某個位置可能是城市名、酒店名或地址欄你應該能看到數據庫名和當前用戶。假設數據庫名為Staff。然后我們需要獲取數據庫中的表名。在MySQL中信息存儲在information_schema.tables里‘ union select 1, table_name, 3 from information_schema.tables where table_schema‘Staff’ -- -這條語句會列出Staff數據庫中的所有表。仔細查看結果你可能會發現兩個關鍵表StaffDetails和Users。Users表顯然更吸引人。接著獲取Users表的列名‘ union select 1, column_name, 3 from information_schema.columns where table_name‘Users’ -- -你會看到諸如id,Username,Password這樣的列名。勝利在望最后提取用戶名和密碼哈希‘ union select 1, Username, Password from Users -- -頁面上會顯示所有用戶的用戶名和密碼很可能是MD5哈希。將這些信息復制保存下來。實操心得在實際手動注入時頁面可能不會把所有數據都美觀地顯示出來。有時數據會擠在一列或者只顯示第一條。你可以使用group_concat()函數將多行數據合并到一個字段中顯示例如‘ union select 1, group_concat(Username), group_concat(Password) from Users -- -。另外注意觀察頁面源代碼CtrlU有時數據會藏在HTML注釋或者某個隱藏的標簽屬性里前端沒有渲染出來而已。3.3 密碼破解與后臺登錄拿到MD5哈希密碼后我們需要破解它們。可以使用在線破解網站如cmd5.com但如果哈希值加了鹽或者比較復雜在線網站可能無法破解。更通用的方法是使用john或hashcat在本地進行破解。首先將用戶名和哈希保存到一個文件中格式為用戶名:哈希值例如admin:856f5de590ef37314e7c3bdf6f8a66dc user1:5f4dcc3b5aa765d61d8327deb882cf99 ...然后使用john進行破解john hashes.txt --wordlist/usr/share/wordlists/rockyou.txt --formatraw-md5rockyou.txt是一個常用的密碼字典。運氣好的話john會很快破解出部分弱密碼。在DC-9中你很可能成功破解出admin賬戶的密碼。現在回想之前目錄掃描的結果或者嘗試常見的后臺路徑如http://192.168.56.105/admin.php或http://192.168.56.105/login.php。找到后臺登錄頁面使用破解得到的admin憑證登錄。成功進入后臺意味著我們突破了Web應用的第一道防線獲得了更高級別的權限。4. 權限提升與端口敲門技術4.1 后臺功能審計與新的攻擊面發現進入后臺管理界面后不要急于到處點擊。首先系統地瀏覽每一個功能菜單用戶管理、文件管理、系統設置、日志查看等等。在DC-9的后臺你可能會發現一個“文件管理”或“查看日志”的功能它允許你讀取服務器上的文件。這就是一個本地文件包含LFI或路徑遍歷的漏洞點。嘗試讀取系統關鍵文件例如/etc/passwd。在文件查看的輸入框里嘗試輸入../../../../etc/passwd。如果成功你將看到系統用戶列表。仔細查看/etc/passwd文件除了常規的root,bin等用戶留意那些有登錄shell如/bin/bash或/bin/sh的用戶。你可能會發現一個不常見的用戶名例如fredf。同時在讀取其他文件如Web應用配置文件、日志文件時可能會發現一些有趣的字符串或密碼提示。4.2 利用端口敲門技術開啟隱藏服務在審計后臺功能或讀取文件時你可能會發現一個關鍵的線索一段關于“端口敲門”的注釋或配置文件。端口敲門是一種通過向一系列特定端口發送連接請求“敲門”來觸發服務器打開另一個隱藏端口的技術。它本身是一種安全機制但配置不當或秘密泄露就會成為漏洞。假設你在某個文件里發現了這樣的序列7469, 8475, 9842。這意味著你需要按順序向靶機的這三個端口發送數據包如TCP SYN包之后一個原本關閉的端口比如SSH的22端口才會臨時打開。我們可以使用nmap或netcat來完成敲門。使用nmap的-p參數指定端口并用-Pn跳過主機發現因為端口是關閉的默認掃描會認為主機離線。nmap -p 7469,8475,9842 192.168.56.105 -Pn --max-retries 1 -T4這條命令會快速地向這三個端口發送探測包。或者使用netcatfor port in 7469 8475 9842; do nc -z 192.168.56.105 $port; sleep 1; done-z參數表示只進行掃描不發送數據。sleep 1是為了在兩次敲門之間稍有間隔符合一些敲門守護程序的預期。完成敲門序列后立即使用nmap掃描SSH端口22是否開放nmap -p 22 192.168.56.105如果發現22端口突然從filtered或closed狀態變為open那么恭喜你敲門成功現在你獲得了通過SSH連接靶機的機會。4.3 SSH登錄與系統內信息收集使用之前在/etc/passwd中發現的可能有shell的用戶名如fredf以及你在Web滲透階段通過文件包含找到的密碼可能藏在日志或配置里嘗試SSH登錄。ssh fredf192.168.56.105輸入密碼如果成功你就獲得了一個低權限的交互式shell。登錄后的第一件事是信息收集。查看當前用戶權限id sudo -lsudo -l命令至關重要它列出了當前用戶可以用sudo權限執行的命令。在DC-9中你可能會發現用戶fredf可以以root身份無密碼運行一個文本編輯器命令例如/usr/bin/vi或者/usr/bin/nano。4.4 利用sudo權限完成最終提權如果能以root身份運行某些編輯器提權就變得非常簡單。這是因為像vi、nano、vim、less這類編輯器通常可以在內部執行系統命令。以vi為例執行sudo /usr/bin/vi /tmp/test.txt。這會以root權限打開vi編輯器。在vi的命令模式下輸入:!bash或:sh然后按回車。這時vi會啟動一個新的shell。由于vi是以root權限運行的這個新啟動的shell也就擁有了root權限。輸入id命令確認你會看到uid0(root)。恭喜你已經拿到了DC-9靶機的最高權限你可以查看/root目錄下的flag文件通常命名為root.txt或proof.txt作為通關的最終證明。注意事項利用編輯器提權是Linux系統提權中非常經典的方法。除了vinano可以通過按下CtrlR然后輸入reset再按CtrlX來嘗試獲取shellless或more在查看文件時可以輸入!bash來執行命令。關鍵在于sudo -l的列表任何允許以root身份運行且能交互或執行外部命令的程序都可能成為提權的跳板。5. 完整攻擊鏈復盤與防御思考回顧整個DC-9的滲透過程它清晰地展示了一條從外部到內部、從Web到系統的完整攻擊鏈信息收集通過網絡掃描確定唯一入口80端口Web服務。漏洞發現與利用對Web搜索功能進行SQL注入測試手動利用注入漏洞提取后臺管理員憑證。橫向移動利用破解的密碼登錄后臺發現文件讀取功能。信息深度挖掘通過文件包含漏洞讀取系統文件/etc/passwd發現系統用戶名和端口敲門序列。權限提升準備利用端口敲門技術開啟隱藏的SSH服務。系統權限獲取使用發現的用戶名和密碼通過SSH登錄利用配置不當的sudo規則如可root運行的vi完成最終提權。這個鏈條上的每一個環節都對應著現實世界中一種常見的安全配置錯誤或漏洞SQL注入根本原因在于未對用戶輸入進行過濾和參數化查詢。弱密碼使用了強度不足或常見的密碼。不安全的文件操作后臺功能未對文件路徑進行嚴格校驗導致路徑遍歷。敏感信息泄露將端口敲門序列等敏感信息明文存儲在Web可訪問的位置。不當的sudo授權給普通用戶分配了不必要的、危險的sudo權限。對于防御者而言針對每個環節都有明確的加固措施使用預編譯語句Prepared Statements防御SQL注入強制實施強密碼策略并定期更換對所有用戶輸入進行嚴格的校驗和過濾避免在代碼或配置中硬編碼敏感信息遵循最小權限原則謹慎分配sudo權限并定期審計。6. 常見問題與排查技巧實錄在實戰和教學過程中我總結了一些大家容易遇到的問題和解決方法Q1: Nmap掃描不到靶機IP怎么辦A1: 首先確認靶機已啟動完成。檢查虛擬機的網絡設置確保攻擊機和靶機在同一網絡模式如僅主機模式且網段相同。可以嘗試在靶機控制臺手動輸入ip addr或ifconfig查看其IP。在Kali上也可以使用arp-scan -l進行更底層的發現。Q2: SQL注入時union查詢的數據不顯示在頁面上怎么辦A2: 這是非常常見的情況。首先檢查你的注入語句語法是否正確注釋符-- -后面是否有空格。其次嘗試改變union select后各個字段的位置因為頁面可能只渲染其中某一列。最重要的是一定要查看網頁源代碼。數據很可能被成功查詢出來但前端腳本沒有將其顯示在可視區域而是放在了HTML注釋、隱藏的input標簽value屬性或者某個div的>