首页 > 其他分享 >一个简单的容器(CTF)

一个简单的容器(CTF)

时间:2024-11-12 12:16:51浏览次数:3  
标签:尝试 容器 flag 提权 CTF 简单 txt root

这个是一个某海外CTF中的题目,给的提示比较明显,过程思路清晰,较于简单,容易理解。

一、查看环境,制定大致思路

首先创建实例后访问地址,发现是一个仿 Linux 终端的交互式 shell 环境,根据自己的做题经验,那我们的思路就大致是在Linux环境中查找类似于 flag.txt 的文件

二、根据自己的思路先摸索尝试(非常重要!!!)

先使用基本的 Linux 命令搜集信息

使用 ls 发现是空,再使用 pwd 查看当前目录显示 /home/user

cd ..  退格后再使用 ls 发现有2个文件夹 admin 和 user

由于刚刚再 user 文件夹下什么也没有发现,cd admin 进入到 admin 文件夹

ls 发现有 docker-compose.yml 文件,这个是 Docker Compose 配置文件,,通常用于定义和运行多容器 Docker 应用

cat docker-compose.yml 查看文件,发现这个文件只定义了一个名为 app 的服务,并且指定其Docker 镜像为 app

根据题目《一个简单的容器》,并结合目前已经找到的线索分析猜测可能暗示flag或相关信息与这个容器服务有关

那接下来的方向就试看看能不能进入这个容器!!!

三、思路确定并执行 

1、尝试进入容器

首先要做的就是搜集这个容器的相关信息:

doeker ps -a  查看所有运行和停止的容器

docker images  查看可用镜像

发现一个名叫 admin-app-1 的容器,使用了 app 镜像,并运行了一个保持运行状态的命令 "sleep infinity"。这意味着容器本身应该是空闲的,并没有其他操作在执行

还发现了这个容器ID 是632197a166cf ,有了容器ID,那就可以尝试进入容器了

使用 docker exec -it 632197a166cf /bin/sh 尝试进入容器,不出意外的成功进入容器内部

继续使用 ls、cd、pwd 等命令查找 flag.txt 文件

最后发现当退到 root 目录底下时,使用 ls 发现 flag.txt 文件

2、尝试查看 flag.txt

此时感觉胜利在握,只要查看 flag.txt 文件内容即可,但是当我使用 cat、head、tail、less、more、tac 等命令都毫无作用,总是显示“命令不存在”或者“权限不够”等提示

使用 ls -la flag.txt  直接查看目标文件的权限,发现该文件只能由它的所有者 root 可读

3、尝试提权

(1)sudo cat flag.txt 尝试直接切换为 root 用户读取文件,可是结果却显示该命令不存在

(2)使用 su 提权至 root

需要输入密码,显然我根本不知道密码,只能先猜猜看 root、toor、root123 这种弱口令,结果不尽人意,全都失败了

(3)使用正经的提权方式,最先想到的就是 SUID 提权(这种提权的靶场我打得比较多,而且这种提权相较于其它提权方式我个人感觉更加方便、直接)

使用命令 find / -type f -perm -4000 2>/dev/null 列出所有的 SUID 程序,发现收获不少

那么接下来就一个一个的试,不是要输入 root 密码,就是没有权限,直到试到最后一个

运行python ,尝试通过系统命令执行来获取 root 权限

/usr/bin/python3.10 

在打开的python环境中运行以下代码,以 root 权限打开一个 bash shell

import os
#将当前进程用户ID(UID)设置为0,即超级用户root
os.setuid(0)
os.system('/bin/bash')

提权成功

四、收获结果

最后成功提升至 root 权限,直接 cat flag.txt ,即可拿到 flag


 

五、总结

在做CTF 题目的时候,首先需要自己敢于不断尝试,在这个过程中不断理清思路,知道每一个过程、每一步自己想要什么,其次就是要结合题目已知线索和自己的经验,在尝试的过程中不断地调整思路和方法,最后通过一次次地改进和完善,层层递进,明确目标,拿到 flag

标签:尝试,容器,flag,提权,CTF,简单,txt,root
From: https://blog.csdn.net/2301_81517733/article/details/143694194

相关文章

  • ceph的部署与简单使用
    OSD(ObjectStorageDaemon,守护进程ceph-osd)是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等。通常至少需要3个OSD来实现冗余和......
  • 使用 PostScript 实现简单的 OCR 处理
    PostScript并不直接支持图像处理,因此我们将展示如何通过一些基本图像绘制和简单字符检测来模拟文字识别的概念。读取图像并转换为灰度图由于PostScript并不原生支持读取图像,这里假设我们可以将图像以数据的形式加载,并通过PostScript的逻辑来绘制出图像的灰度形式。posts......
  • LeetCode【0011】盛最多水的容器
    本文目录1中文题目2求解思路2.1基础解法:暴力算法2.2优化解法:分治法2.3最优解法:双指针法3题目总结1中文题目给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的......
  • leetcode算法题-有效的括号(简单)
    有效的括号(简单)leetcode:https://leetcode.cn/problems/valid-parentheses/description/前言防止脑袋生锈,做一下leetcode的简单算法题,难得也做不来哈哈。大佬绕道,小白可看。题目描述给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:......
  • 在华为开发者空间,简单几步带你实现AI风格化编程
    摘要:通过调用ModelArts上的动漫头像制作应用,将头像图片转化为动漫风格的头像图片。本文分享自华为云社区《【开发者空间实践指导】基于FunctionGraph的AI风格化编程》,作者:开发者空间小蜜蜂。一、案例介绍本实验基于FunctionGraph和ModelArts的智能头像动漫化处理应用。......
  • 模态内重叠优化,简单有效的CLIP微调方法 | BMVC'24 Oral
    来源:晓飞的算法工程笔记公众号,转载请注明出处论文:CLIPAdaptationbyIntra-modalOverlapReduction论文地址:https://arxiv.org/abs/2409.11338创新点提出一种基于轻量级适配的新方法,直接在图像空间中减少CLIP中的模态内重叠(IMO)。新特征与任何利用缓存模型的无训练......
  • 写程序实现线性回归模型及其简单的方法
    以下是一个使用Python实现线性回归模型的示例代码:importnumpyasnpclassLinearRegression:def__init__(self,learning_rate=0.01,num_iterations=1000):self.learning_rate=learning_rateself.num_iterations=num_iterationsself......
  • Qt读写文件简单示例
    voidtestReadWriteFile(){//当前程序所在文件夹QStringdirPath=QCoreApplication::applicationDirPath();QStringpath=QDir::cleanPath(dirPath+QDir::separator()+"test.txt");qDebug()<<"Filepath:"<<path;......
  • 学习笔记(三十五):[email protected] (线性容器ArrayList)
    概述:一种线性数据结构,底层基于数组实现 一、导入import{ArrayList}from'@kit.ArkTS'; 二、定义letarrayList:ArrayList<string|number>=newArrayList(); 三、常用函数1、add,在ArrayList尾部插入元素 2、insert,在长度范围内任意位置插入指定元素......
  • 学习笔记(三十六):[email protected] (非线性容器HashMap)
    概述:HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value一、导入import{HashMap}from'@kit.ArkTS' 二、定义lethashMap:HashMap<string,number>=ne......