这个是一个某海外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