靶機地址
難度:簡單
工具及漏洞信息#
- netdiscover
- nmap
- dirb
- dirsearch
- gobuster
- 命令執行
- SUID 權限 find 命令提權
0x00 信息收集#
掃描靶機信息#
使用netdiscover
掃描當前網段,看見主機名是PCS Systemtechnik GmbH
的一般就是靶機了:
nmap -sS -sV -n -T4 -p- 192.168.1.8
- -sS: TCP 同步掃描,也稱為半開放掃描
- -sV: 探測開放端口以確定服務 / 版本信息
- -n: 不進行 dns 解析節約時間
- -T4: 時序模板設置為 4 級
- -p-: 掃描所有端口
- -A: 啟用操作系統檢測,版本檢測,腳本掃描和跟蹤路由,-A 選項包含 - sV 選項
可以看到只開了一个apache
服務和ssh
掃描路徑#
dirb 默認掃描了只顯示返回狀態碼為 200 的地址,還是很不錯的:
dirb http://192.168.1.8 -X .php,.txt,.zip,.html
相比之下,dirsearch
默認顯示所有返回的狀態碼的路徑,使用-x
執行不顯示的狀態碼:
python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8
掃描工具還有gobuster
,字典我們可以使用star
了 2w 多星的一個安全字典
kali
可直接使用命令apt install seclists -y
安裝,安裝完默認字典位置在
/usr/share/seclists
然後我們掃描一下
gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -w /usr/share/seclists/Discovery/Web-Content/big.txt -x .php,.txt,.html,.zip
這個工具也挺好用的
0x01 反彈 shell#
接著訪問一下robots.txt
,發現是一串base64
編碼的字符,解碼後發現靶機作者在開玩笑
訪問首頁,源代碼最後有一行註釋
嘗試使用base64
解碼三次,得到一個文件名字workinginprogress.php
:
訪問該路徑:
提示讓我們執行ping
命令,嘗試多次後發現是cmd
命令注入:
這也就意味著這裡能執行shell
命令
在kali
上執行nc
監聽:
nc -lvp 4444
在剛才的命令注入處反彈 shell:
獲取到shell
後從python
的pty.spawn
獲取標準 pty,從 python 命令提示符到交互式 shell
python -c 'import pty;pty.spawn("/bin/bash")'
可以看到我們現在以當前命令注入的身份www-data
獲取到了網站根目錄下的一個shell
find 命令本身具有此權限。 這使我們的工作變得容易一些。
使用find
命令查找居於 SUID 權限可執行文件,我們使用命令
find / -perm -u=s -type f 2>/dev/null
- /: 在根目錄下查找
- perm: 查找指定權限的文件,/u=s 或者 - u=s 參數列出系統中所有
SUID
的檔案 - type: 找符合指定的文件類型的文件,-type f: 查找指定目錄下所有普通文件
- 2>/dev/null: 2 > 部分的意思是 “重定向文件通道號 2”- 映射到標準錯誤文件通道 stderr,這是程序經常將錯誤寫入其中的位置,/dev/null 是一種特殊字符設備,只允許向其中寫入任何內容;閱讀時,它不會返回任何內容,因此 2>/dev/null 讓 shell 將標準錯誤從正在運行的程序重定向到 /dev/null,從而有效地將其忽略。
- SUID: SUID (Set owner User ID up on execution) 簡單來說。suid,它會出現在文件擁有者權限的執行位上,具有這種權限的文件會在其執行時,使調用者暫時獲得該文件擁有者的權限。所以我們去找一個文件擁有者為 root,而且其執行位上有 s 的執行文件,那麼即使我們用普通用戶運行這個文件時,這個文件的執行權限就是 root
- 為什麼使用 find 命令呢?原因:在 find 的後面,是可以帶入命令的,而我們要的就是執行其他命令。也就是說,當我們調用 find 命令時,因為 find 命令有 s 權限,所以 find 在執行時的權限就是 root 命令,而在 find 後面的帶入的命令也就是在 root 權限下執行的命令了
參考文章:
發現/usr/bin/find
,也就是當前我們正在使用的find
命令是具有SUID
權限的
0x02 find 命令提權#
嘗試使用 find 命令調用 /bin/sh 執行 shell
find . -exec /bin/sh -p \; -quit
- exec: 來對每一個找到的文件或目錄執行特定命令。它的終止是以
;
為結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所以前面加反斜杠轉義。 - quit: 表示命令執行完了就退出
成功獲得root
的shell
,查看/root
目錄下的root.txt
文件,完成!
本文完。
參考文章: