“感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友。您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!🚀✨
登录情况下的万能密码构造闭合是这样的,有些数据库判断是使用 用户名 and 密码 形式和数据库做比较,虽然是逻辑与,账户和密码都要登录相同的,但是由于SQL语句中逻辑运算符具有优先级
a'or 1=1 # // 具体前面如何构造还是看闭合情况,SQL就是看是否带入然后看如何闭合然后正常语句爆破
假设后端对账户密码是这样处理,后半部分是我们所输入的,原本的单引号后续语句被#
注释,那么数据库语句这样输入就会是下面这段
Select user_id,user_type,email From users Where user_id='admin' And password='a'or 1=1'#'
SQL
语句优先级别是 = > and >or
并且具有传递性,利用这个上方语句其实被拆分为了两端,or
为逻辑 这样or
是一边为真就为真,我们构造1=1
传入到数据库就会是恒真的,所以整个登录流程就会变成true
从而实现万能密码
Select user_id,user_type,email From users Where user_id='admin' And password='a'
or
1=1'#
测试代码为单引号报错实际上是因为多出来了单引号,因为和闭合是一样的,所以在基础上构造闭合语句,剩下真正的单引号我们就会在最后利用#
去注释 这样我们真正的就不会报错 我们也可以插入新的sql
语句