新手必看:BUUCTF ACTF2020 Exec 1命令注入漏洞实战解析(附详细步骤)

张开发
2026/4/19 13:46:52 15 分钟阅读

分享文章

新手必看:BUUCTF ACTF2020 Exec 1命令注入漏洞实战解析(附详细步骤)
从零实战BUUCTF ACTF2020 Exec 1命令注入漏洞深度剖析第一次接触CTF比赛时看到那些眼花缭乱的漏洞利用技巧总让人既兴奋又迷茫。作为过来人我清楚地记得自己第一次成功利用命令注入漏洞时的成就感——那感觉就像拿到了打开新世界大门的钥匙。今天我们就以BUUCTF平台上的ACTF2020新生赛Exec 1题目为例手把手带你体验这个看似简单却极具教学意义的命令注入漏洞。1. 环境准备与初步侦察在开始之前我们需要先理解题目环境的基本情况。Exec 1题目模拟了一个常见的网络服务场景一个提供PING功能的小型Web应用。当你访问题目提供的URL时会看到一个简洁的输入框旁边标注着请输入要PING的IP地址。关键侦察步骤基础功能测试首先输入127.0.0.1页面正常返回了PING的结果这说明服务的基本功能是正常的。查看页面源码右键查看网页源代码寻找可能的提示或隐藏信息——但这次并没有发现特别的内容。理解题目名称题目名为Exec这强烈暗示了可能与命令执行相关的漏洞。提示在CTF比赛中题目名称往往是重要的线索来源。Exec通常指代命令执行(Command Execution)类漏洞。2. 漏洞原理与识别命令注入漏洞的本质是应用程序将用户输入不加处理地传递给系统shell执行。在这个题目中当我们输入IP地址时后端可能使用了类似如下的PHP代码?php $ip $_GET[ip]; system(ping -c 3 . $ip); ?这种代码结构极其危险因为它直接将用户控制的$ip变量拼接到了系统命令中。如果用户输入的不是单纯的IP地址而是包含特殊字符的恶意输入就能实现命令注入。漏洞验证方法尝试输入127.0.0.1; ls——分号在Linux中是命令分隔符如果返回结果中除了PING信息还显示了当前目录文件列表就确认存在命令注入3. 漏洞利用实战步骤确认漏洞存在后我们就可以开始系统的利用过程了。以下是详细的步骤解析3.1 基础命令执行首先验证最基本的命令注入输入127.0.0.1; ls 预期输出 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq1 ttl64 time0.037 ms [...ping结果...] index.php style.css这里的分号;是关键它告诉系统前一个命令结束了开始执行下一个命令。3.2 目录遍历探索知道能执行命令后我们需要寻找flag文件的位置。通常CTF题目会把flag放在意想不到的位置输入127.0.0.1; ls ../ 输入127.0.0.1; ls ../../ 输入127.0.0.1; ls ../../../../通过不断尝试你可能会发现flag存放在根目录或某个深层目录中。3.3 定位并读取flag文件经过多次尝试后最终定位到flag文件输入127.0.0.1; cat ../../../../../../flag 输出 flag{bda3a63d-74e3-4e9f-8dab-c5c6ea0c1bd9}为什么是6个../这是因为Web应用通常部署在类似/var/www/html的目录中需要向上回溯多层才能到达根目录。4. 防御措施与学习延伸虽然这道题目相对简单但它完美展示了命令注入漏洞的核心原理。在实际开发中我们应该使用安全的API如PHP的escapeshellarg()函数输入白名单验证只允许预期的字符模式如纯数字IP地址最小权限原则运行Web服务的用户应只有必要的最小权限进阶练习建议尝试使用|、等其他命令连接符探索如何在没有分号的情况下实现命令注入研究如何绕过简单的过滤机制

更多文章