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),就判定登录成功。于是不需要正确的密码,直接进来了。
相关推荐
HackTwoHub7 小时前
REA逆向一切!渗透逆向新利器、MCP 驱动全栈逆向方案,解析原生二进制、EXE、APK,高效挖掘程序底层漏洞
网络·安全·web安全·网络安全·系统安全
小趴菜一只7 小时前
SIEM-wazuh安装过程
运维·windows·安全·网络安全
看着博客敲代码7 小时前
searchsploit illegal option -- - 与 Exploit-DB 本地漏洞检索排查
安全·网络安全·系统安全
躺柒8 小时前
读数据安全架构设计与实践03身份认证(上)
网络安全·信息安全·数据安全·安全架构·身份认证
刘婉晴9 小时前
【Metasploit渗透测试魔鬼训练营】初识Metasploit
网络安全
孙克旭_9 小时前
信息收集-域名和端口信息
网络安全
QZ1665609515921 小时前
金融数据流转监测排行:从看见到拦截的距离
网络·安全·网络安全·金融
看着博客敲代码1 天前
WorkBuddy 接上 Kali MCP 做自动化渗透:信息收集到初步验证的落地记录
linux·人工智能·安全·网络安全·自动化
学逆向的1 天前
C 突破编译器限制
c语言·开发语言·网络安全