Oopsie
解題流程
文件上傳
首先開啟機器后,我們先使用 nmap -sC -SV
來掃描一下IP地址:
-sC
:使用 Nmap 的默認腳本掃描(通常是 NSE 腳本,Nmap Scripting Engine)。這個選項會自動執行一系列常見的腳本,進行更為詳細的探測,比如檢查服務版本、漏洞掃描、系統信息等。
-sV
:探測服務版本。這會使 Nmap 在掃描時嘗試識別目標主機上運行的服務及其版本信息。
可以看到開放了兩個端口:22和80端口,既然開放了80端口,說明我們可以使用web瀏覽器進行訪問。
那么我們此時使用kali自帶的火狐瀏覽器進行訪問,訪問對應的IP地址,顯示頁面如下:
頁面繼續往下劃,我們看到了這樣的一段話,我們需要登錄才能訪問這個訪問:
那么此時我們就可以猜到這個頁面應該應該是存在子目錄能夠進行登錄操作的,那么此時我們就需要找到這個子目錄。此時我們我們使用burpsuit自帶的抓包功能進行看一下頁面的子目錄有哪些,由于burpsuit是kali自帶的,操作起來也方便。為了方便操作,這里我直接打開burpsuit自帶的瀏覽器:
輸入目標IP之后,burpsuit可以不進行攔截操作,因為burpsuit會自動收集打開過程中的數據包,就在旁邊的 HTTP history
中,抓到的數據包如下所示:
此時我們看到有個 cdn-cgi/login
的目錄,很像我們需要的登錄目錄,那么此時我們訪問一下這個目錄,顯示頁面如下,果真就是我們想要的登錄窗口:
嘗試了一些弱口令爆破之后,沒有成功,發現下方還有一個 Login as Guest
的選項,我們可以當做游客進行登錄:
進入之后,我們就可以看到游客界面的導航欄了
查看導航欄,發現有一個 uploads
的欄目,難道可以進行文件上傳嗎?我們點進去看看,發現需要超級管理員用戶才可以訪問:
那么我們就需要想辦法來提升用戶的權限,有一個方法就是右鍵頁面,然后打開檢查元素:
然后我們就可以查看用戶的cookie信息,我們觀察到,有role=guest 和 user=2233。我們可以假設,如果我們以某種方式知道超級用戶的數量admin 作為 user 變量,我們也許能夠訪問上傳頁面:
然后返回剛才的 Account
欄目信息,根據上面的url信息,發現此時發id=2
,那么我們嘗試一下id=1
會發生什么?
修改id=1
,我們成功知道了admin
的id
值,此時我們就可以嘗試修改一下cookie值來嘗試提高用戶的權限:
此時我們修改了cookie的值,然后刷新一下頁面,發現我們已經擁有了上傳文件的權限:
現在我們已經可以訪問上傳表單了,我們可以嘗試上傳 PHP 反向 shell。對于本題,我們將使用 /webshells/php/php-reverse-shell.php,這里提供了下載地址,然后將該PHP文件上傳:
好了到了這一步,現在我們需要找到剛剛上傳的php文件所在的目錄,我們可以自己猜測目錄位置,這里我使用gobuster來暴力破解一下目錄名:
gobuster一下子就找到了 uploads
目錄,然后嘗試看一下該目錄的內容,發現我們沒有查看該目錄的權限,但是我們可以嘗試訪問一下我們上傳到該目錄的文件:
反彈shell
首先,我們建立一個 netcat
的連接,如下圖所示:
然后我們在網頁中訪問我們上傳的文件的地址:
然后就可以發現我們成功監聽到了(這里需要注意的是,我們在此過程的每個頁面訪問到需要修改cookie值,包括上傳和重新訪問,否則監聽不到嗚嗚嗚,所以推薦上傳的過程中每次都使用burpsuit修改一下cookie值):
好,現在我們我們成功拿到shell了,現在為了使頁面看起來更加美觀,我們使用下述命令:
python3 -c 'import pty;pty.spawn("/bin/bash")'
提升權限
接下來,我們查看一下 .php
的文件后綴,看是否有敏感信息泄露,輸入命令 find / -type f -name *.php 2>/dev/null
:
作為用戶 www-data
,該角色對系統的訪問受到限制。由于網站正在使用 PHP 和 SQL,我們可以進一步枚舉可能泄露的 Web 目錄
或配置錯誤。經過一番搜索,我們可以在 /var/www/html/cdn-cgi/login
目錄下找到一些 php 文件。我們可以手動查看所有頁面的源代碼,也可以嘗試搜索使用 grep 工具可以得到有趣的字符串。輸入命令:cat * | grep -i passw*
:
我們確實得到了密碼:MEGACORP_4dm1n!!
。我們可以通過以下方式檢查系統上的可用用戶讀取 /etc/passwd
文件,以便我們可以嘗試重用此密碼,輸入 cat /etc/passwd
:
發現一個可用用戶robert,此時我們切換到robert用戶,結果發現登錄不上…:
怎么判斷用戶是否可用?
格式:用戶名:密碼:用戶ID:組ID:描述信息:家目錄:登錄Shell
檢查 UID 是否大于等于 1000。
檢查登錄Shell 是否有效(非
/sbin/nologin
或/bin/false
)。檢查用戶的家目錄是否存在。
那我們再找找,發現在db.php中找到了密碼:
趕緊使用這個密碼試一下,沒有問題,這個密碼是正確的:
然后我們在該用戶的主目錄找到了一個user.txt
文件,我們查看一下,發現了第一個flag:
好了現在還有一個flag應該是在root用戶中,我們嘗試提權來查看一下。
在運行任何權限提升或枚舉腳本之前,讓我們檢查一下用于提升權限的基本命令sudo
和 id
等權限:
我們觀察到用戶 robert
是 bugtracker
組的一部分。讓我們嘗試看看里面是否有任何二進制文件,輸入命令:find / -group bugtracker 2>/dev/null
:
我們發現一個名為 bugtracker
的文件。我們檢查它的權限和文件類型ls -la /usr/bin/bugtracker && file /usr/bin/bugtracker
:
該二進制文件上設置了一個 suid,這是一個很有用的利用路徑。
SUID 是一個強大的工具,它允許文件以文件所有者(通常是 root)身份執行,從而使某些需要特權的程序能夠由普通用戶執行。
當一個文件具有 SUID 權限時,無論哪個用戶執行該文件,該文件將以文件所有者的身份運行,而不是以執行文件的用戶身份運行。
如果文件的所有者是
root
用戶,那么任何人執行該文件時,都會以root
用戶的身份來執行。
然后我們運行該應用程序觀察其行為:
該工具接受用戶輸入作為將使用 cat
命令讀取的文件名,但是,它沒有指定文件 cat
的完整路徑,因此我們可以利用它。
我們將導航到 /tmp
目錄并創建一個名為 cat
的文件,其中包含以下內容:
/bin/sh
然后我們設置改文件的執行權限:
chmod +x cat
為了利用這一點,我們可以將 /tmp
目錄添加到 PATH
環境變量中,/tmp
目錄將被添加到 PATH
變量的最前面:
export PATH=/tmp:$PATH
然后我們檢查一下環境變量:
echo $PATH
然后我們再次執行一下該二進制文件,提權成功:
然后我們找到 /root
目錄下的 root.txt
,由于cat
查看不了,那我們使用more
來查看一下:
最后成功獲取root用戶的flag。
題目答案
task 1
With what kind of tool can intercept web traffic?(用什么工具可以攔截網絡流量?)
答案:proxy
task 2
What is the path to the directory on the webserver that returns a login page?(返回登錄頁面的網絡服務器上的目錄路徑是什么?)
答案:/cdn-cgi/login
task 3
What can be modified in Firefox to get access to the upload page?(可以在 Firefox 中修改哪些內容才能訪問上傳頁面?)
答案:cookie
task 4
What is the access ID of the admin user?(管理員用戶的訪問 ID 是什么?)
答案:34322
task 5
On uploading a file, what directory does that file appear in on the server?(上傳文件時,該文件出現在服務器上的哪個目錄中?)
答案:/uploads
task 6
What is the file that contains the password that is shared with the robert user?(包含與 robert 用戶共享的密碼的文件是什么?)
答案:db.php
task 7
What executible is run with the option “-group bugtracker” to identify all files owned by the bugtracker group?(使用選項“-group bugtracker”運行什么可執行文件來識別 bugtracker 組擁有的所有文件?)
答案:find
task 8
Regardless of which user starts running the bugtracker executable, what’s user privileges will use to run?(無論哪個用戶開始運行 bugtracker 可執行文件,都將使用什么用戶權限來運行?)
答案:root
task 9
What SUID stands for?(SUID 代表什么?)
答案:Set owner User ID
task 10
What is the name of the executable being called in an insecure manner?(以不安全方式調用的可執行文件的名稱是什么?)
答案:cat
task 11
Submit user flag(提交用戶flag)
答案:f2c74ee8db7983851ab2a96a44eb7981
task 12
Submit root flag(提交root的flag)
答案:af13b0bee69f8a877c3faf667f7beacf