BugKu——Simple SQL injection

一、题目

二、方法

  • 打开服务器,显示登录界面。登录界面是 SQL 注入题的经典场景,核心就是绕过登录验证 。
  • 使用sql注入,绕过登录验证。
  • 构建用户名:
bash 复制代码
' or 1=1--+
  • 密码不输入,成功登录,拿到flag。

原理:' or 1=1--+ 为什么能绕过登录?

  • 正常登录时的 SQL
bash 复制代码
username = admin
password = 123
  • 拼出来的 SQL:
bash 复制代码
SELECT * FROM users WHERE username='admin' AND password='123'
  • 数据库会去找:用户名是 admin 且 密码是 123 的记录。
  • 找到 → mysqli_num_rows() > 0 → 登录成功,找不到 → 登录失败。
  • 注入后的 SQL:
bash 复制代码
username = ' or 1=1--+
password = 123
  • $username 的值被原样拼进去,SQL 变成:
bash 复制代码
SELECT * FROM users WHERE username='' or 1=1--+' AND password='123'

现在逐段拆解:
1. username=''
单引号 ' 先把原来的字符串闭合了,username='' 表示"用户名等于空字符串"。

2. or 1=1
or 是"或者",1=1 恒为真。
整个 WHERE 条件变成:(username='') OR (1=1)
因为 1=1 永远成立,所以整个条件永远为真。

3. --+
-- 是 SQL 的单行注释,+ 在 URL 编码里代表空格(在 POST body 里也常这么用)。
它的作用是:把后面的 ' AND password='123' 全部注释掉。
所以最终实际执行的 SQL 是:SELECT * FROM users WHERE username='' or 1=1
后面的密码判断被完全忽略了。
  • 查询语句执行:SELECT * FROM users WHERE username='' or 1=1
  • 因为 1=1 恒真,这条查询会返回表里所有用户记录(至少一条),所以只要结果集有记录(哪怕不是 admin),就判定登录成功。于是不需要正确的密码,直接进来了。
相关推荐
kingx315 小时前
Bugku WEB 题解总集:文件包含 / SQLi / 反序列化 / SSTI / 反爬 / 组件漏洞
web安全·网络安全·ctf·bugku
我爱学习_zwj20 小时前
IP 地址与子网划分
网络协议·网络安全
重生之我在番茄自学网安拯救世界1 天前
AI 开发者日报 第1期(本周精选)| 插件市场投毒、智能体搞出“官僚饥荒村”,十年前的 CNN 打赢大模型
人工智能·网络安全·大模型·ai编程·智能体
m0_738120722 天前
JWT 安全从入门到实战:六种典型攻击场景解析
前端·网络·python·安全·网络安全
重生之我在番茄自学网安拯救世界2 天前
AI开发者日报 第2期 | Anthropic零 Rust 团队靠Claude重写核心 API,CPU 降 40–50%
人工智能·网络安全·大模型·ai编程·claude
五萝卜2 天前
AI 供应链 RAG 安全
人工智能·网络安全·ai编程
自由彩虹3 天前
靶场通关15--bossplayersctf
linux·服务器·网络·安全·web安全·网络安全
武雄(小星Ai)3 天前
Cursor市场Claude Code扩展被植入SSH后门:一次供应链投毒的完整拆解与自查手册
安全·网络安全·供应链攻击
~央千澈~3 天前
优雅草新产品2026 年 10 月 31 日公测完毕v1.0.0 优雅草人机盾正式运营上线
安全·网络安全·安全防御
山川绿水3 天前
DeepSeek-DSH安装报错[deploy] 命令失败:npx -y pnpm install --prefer-offline
人工智能·网络安全