VulnHub是一個面向所有人開放的安全靶場,裡面有很多安全環境,只要下載相關映像檔,在相關虛擬機器上面執行就可以練習相關靶場了。裡面設計了好多關,如果有耐心一定可以到達峰頂。許多考OSCP人員,也會利用Vulnhub靶場進行刷題。我們下載了一個經典漏洞靶場,給大家進行演示,希望讓初學者知道滲透測試的套路,可以更快的成長。
該題從匿名帳戶的FTP裡,發現個pcap封包檔,從該pcap檔裡分析出網站目錄後,得到帳號列表,接著使用hydra進行ssh爆破。該主機主要有兩個方式可以提權為root,一種是透過overlayfs,一種是該伺服器存在例行性工作排程,於是可透過該排程進行提權,成為root後得到Flag。
靶機:Tr0ll: 1
首先,先查詢自己本地的IP,可以透過 ifconfig查詢。
eth0 192.168.43.119 這是本地IP ,同時也是攻擊者端
使用Nmap工具掃描,參數 -sP ,透過ICMP方式快速查找標的端。
標的端為192.168.43.55
找到標的端後,同時間,我們另開個視窗,透過Dirb掃描該目錄
使用nmap -A 完整掃描該主機,並搭配 -p 0-65535 掃描該伺服器端口。
共開啟 21 port、22 port、80 port,而21 port 是FTP,根據顯示 FTP似乎可以透過Anonymous登入。
這將會是一個利用點。
嘗試登入該FTP,帳號Anonymous,密碼為空。
登入到該主機後,發現有個檔案lol.pcap,是個封包檔
可透過WireShark工具打開來。
透過WireShark打開後,有幾個訊息令我感興趣,
RETR secret_stuff.txt
點開來查看詳細資料,看看能不能在這封包看到些什麼,發現有一段文字,似乎再透漏些消息。
sup3rs3cr3tdirlol
<-- ??
根據以上消息,看起來是個檔案,說不定存在一些能夠利用的訊息,於是嘗試訪問該檔案http://192.168.43.55/secret_stuff.txt
可惜的是,沒有這檔案。
思考了很久,最後嘗試將 sup3rs3cr3tdirlol
訪問,很高興的竟然訪問成功了,
是一個檔案,立刻下載下來查看下。
在Linux環境下直接cat查看,發現噴出一大堆亂碼
當拿到一個檔案後,思路馬上轉換為CTF想法,嘗試各種binwalk、strings、foremost、ida等
先將檔案給他個權限,看看能不能執行,
chmod +x roflmao
執行後,噴出一句話
Find address 0x0856BF to proceed
看來沒辦法直接執行。
用Binwalk簡單分析下,是個ELF 32-bit的檔案,然後就沒然後了。
用foremost分析看看能不能分出個什麼檔案,結果也然後了。
使用strings查看該檔案,也是沒有可利用的資訊。
在這邊卡了很久,休息了一下,實在想不到接下來能幹嘛,於是就卡關了。
後來一直再思考這個檔案有什麼用處? 還有什麼沒看到的?
audit.txt嗎? 還是 ?
看著檔案顯示著 Find address 0x0856BF to proceed
尋找0x0856BF,丟IDA也沒頭緒,於是腦洞丟到網址列看看...
Surprised! 竟然跑出兩個驚喜出來。
good_luck目錄下有個which_one_lol.txt的檔案。
which_one_lol.txt裡邊看起來是一個帳號列表。或許是FTP? 或許是SSH?
不管怎麼樣,都是個好消息!
還有另外一個目錄,底下有個Pass.txt
Pass.txt只有顯示一句話
Good_job_:)
那麼廢話不多說,有了疑似帳號密碼的列表後,馬上就使用hydra來幫我們爆破下
最後顯示帳號為 overflow 密碼為 Pass.txt
於是我們登入SSH
登到該主機後,馬上查詢下該主機用戶 及 系統版本
id & whoami & uname -a
看到這個版本號與年份,讓我聞到了提權的味道。
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation
不過在提權之前,我們先簡單查看下該主機有什麼其他有趣的東西。
可以搜索下 /home /etc /var /var/www /data /tmp等目錄
最終,因為其他目錄都沒有看到其他東西,於是我們翻遍log,希望能夠看到些有趣的事情。
在cronlog裡,發現到有一個cleaner.py
為甚麼會想查詢cronlog呢?
因為在進行這台主機的操作時,大概固定每幾分鐘就會自動被踢出連線,於是想說可能是有個腳本會定時的例行性工作排程剔除用戶,所以查詢該cron的log。
因為不知道cleaner.py在哪個位置,於是直接上find指令
find / -name cleaner.py
結果顯示在/lib/log目錄下。
這個python腳本是由root執行的,主要是會刪除 tmp目錄下的檔案。
那麼,因為有root的權限,且又是例行性工作排程,那麼我們是否能夠在該py腳本內寫個提權的方法呢?
如何知道該腳本是 例行性工作排程 ? ,只要在tmp目錄下寫個檔案,然後等個幾分鐘就知道了。
在本題中,有兩個方向可以提權為root權限。
1. 使用 overlayfs
2. 更改cleaner.py
那麼下面,我們分別講解下各個提權姿勢。
在本地寫入個overlayfs的c檔,然後gcc編下,按照exploit-db的教學就可以完成了
gcc ofs.c -o ofs
執行該提權程式,就成為root了。接著就直接訪問/root 目錄,查看該Flag。
第二個方法是更改 cleaner.py腳本
我們將原本的os.system('rm -r /tmp/*')
改成
os.system('echo "overflow ALL=(ALL:ALL) ALL " >> /etc/sudoers')
接著保存。
保存後,我們只要等待例行性工作排程到來,就會直接該腳本。
過幾分鐘後,我們的連線被斷線了,也代表排程執行了。
於是重新連上去就行了。
接著直接sudo su後,即可成為root。
密碼 Pass.txt
結束。