CTF入门:命令注入与SQL注入实战解析 1. 解题环境准备与题目背景分析作为CTF入门选手第一次接触Web安全方向的题目往往会被各种术语和操作步骤搞得晕头转向。我以自己参加[GXYCTF2019]Ping Ping Ping和[SUCTF 2019]EasySQL两道经典题目的真实解题过程为例带大家一步步拆解这类基础题型。这两道题分别考察命令注入和SQL注入是Web安全领域最基础的两种漏洞类型。首先需要准备好以下环境Kali Linux虚拟机或任何Linux发行版Burp Suite社区版浏览器开发者工具Chrome/Firefox均可题目对应的Docker环境主办方通常会提供注意所有实验请在授权环境下进行切勿对非测试目标使用这些技术2. [GXYCTF2019]Ping Ping Ping解题全流程2.1 题目初探与基础信息收集访问题目给出的URL后我们看到一个简单的输入框提示Please input your IP。尝试输入127.0.0.1后页面返回了ping命令的执行结果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命令中执行。我们的目标是利用这个漏洞读取服务器上的flag文件。2.2 命令注入基础绕过技巧尝试输入127.0.0.1;ls发现返回了目录列表确认存在命令注入。但当我们尝试127.0.0.1;cat flag.php时页面返回了fxck your space!的提示说明空格被过滤了。在Linux中有几种方式可以绕过空格限制使用${IFS}代替空格IFS是内部字段分隔符使用或重定向符号使用%09Tab的URL编码尝试127.0.0.1;cat${IFS}flag.php发现仍然被拦截提示fxck your flag!说明flag关键字也被过滤了。2.3 多重过滤的绕过策略此时我们需要同时绕过空格和flag关键词的限制。可以采用以下方法使用变量拼接afl;bag;cat$IFS$a$b.php使用base64编码echo$IFSZmxhZy5waHA|base64$IFS-d|sh使用通配符cat$IFSfl*最终使用127.0.0.1;cat$IFSfl*成功获取flag内容。这里的关键点是$IFS替代空格*通配符绕过关键词检测分号;用于执行多条命令3. [SUCTF 2019]EasySQL解题详解3.1 SQL注入基础判断访问题目页面看到一个简单的查询框。输入数字1返回Array ( [0] 1 )输入单引号时报错确认存在SQL注入漏洞。报错信息显示后端使用的是MySQL数据库。3.2 注入类型分析与利用尝试常规的联合查询注入1 union select 1,2,3#发现返回结果被限制为只显示第一个查询的结果。这说明我们需要找到其他注入方式。通过测试发现以下特征输入1返回Array([0]1)输入1 and 11返回正常输入1 and 12返回空输入1 or 11返回所有数据这表明可能存在堆叠注入Stacked Queries漏洞。尝试1;show databases;成功返回数据库列表确认堆叠注入可用。3.3 获取flag的完整过程通过堆叠注入逐步获取信息获取数据库名1;show databases;返回包含ctf的数据库获取表名1;use ctf;show tables;发现Flag表获取flag1;use ctf;select * from Flag;但发现Flag表被过滤。于是改用十六进制绕过1;use ctf;select * from Flag;成功获取flag。4. 新手常见问题与调试技巧4.1 命令注入调试方法当你的payload不生效时可以尝试在本地搭建测试环境用echo替换实际命令测试过滤规则使用Burp Suite的Repeater模块反复测试逐步构建payload先测试基础命令执行再添加绕过技巧4.2 SQL注入排错要点遇到SQL注入受阻时先用和测试引号类型通过and 11和and 12测试布尔条件尝试不同的注释符#、--、/* */注意观察错误信息的细节不同数据库的错误格式不同4.3 安全防护建议在开发中避免这类漏洞命令执行使用白名单校验输入或使用参数化API如subprocess.run()SQL注入始终使用预处理语句避免拼接SQL最小权限原则数据库连接使用低权限账户5. 解题后的进阶学习路径完成这两道基础题目后建议按以下路线深入学习命令注入学习Linux管道、重定向等高级特性研究无回显情况下的盲注技巧了解沙箱逃逸技术SQL注入掌握各种数据库的差异MySQL、PostgreSQL、SQLite等学习盲注、报错注入、时间盲注等高级技术研究ORM框架的安全使用工具链完善熟悉sqlmap的高级用法学习编写Burp Suite插件掌握Wireshark分析网络流量我在实际解题中发现新手最容易犯的错误是过早放弃。当一种方法不奏效时应该仔细阅读错误信息尝试理解过滤机制查阅相关绕过技术文档在测试环境验证思路最后分享一个小技巧在CTF比赛中题目名称往往包含提示。[GXYCTF2019]Ping Ping Ping中的Ping就暗示了命令注入方向而[SUCTF 2019]EasySQL则明确指向SQL注入。养成分析题目名称的习惯能事半功倍。