SQL注入绕过登录验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入绕过登录验证相关的知识,希望对你有一定的参考价值。

最近测试发现一个登录处的SQL注入,不用密码即可登录系统。
首先在登录处输入“111‘”,出现报错页面如图:判断可能存在注入
技术图片
进一步利用万能用户名测试admin‘ or ‘1‘=‘1,不用输密码成功登录。
分析一下这个payload:
从报错信息可以看出查询语句是:

select * from  xxxx where username=‘ ‘ and pwd=‘ ‘

当我们输入payload之后就变成如下:

select * from  xxxx where username=‘ admin‘ or ‘1‘=‘1‘ and pwd=‘ ‘

这个查询语句执行之后的结果就是:username=‘admin‘ 是true(系统存在这个用户名),‘1‘=‘1‘是true(后面发现这里是否为true也不重要),pwd=‘‘是false。
true or true and false,由于and的优先级高于or,先运算true and false结果是false,再运算true or false结果是true(or运算:所有参数中的任意一个逻辑值为真时即返回TRUE(真))所以登录成功。
然后我利用sqlmap跑了一下,发现必须把admin加上才能成功,如果不加是跑不出来的,如图:
技术图片
技术图片
感觉这样的话,需要知道一个正确得用户名才行,还是有一定得局限性,我利用别的万能账户都不行,比如‘or ‘1‘=‘1--直接提示用户名密码错误,‘or ‘1‘=‘1‘--又会出现错误信息。
之前也有遇到注入的参数必须有值才可以进行注入想必和页面返回有关系?

以上是关于SQL注入绕过登录验证的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入漏洞测试(登录绕过)

SQL注入漏洞测试(登录绕过)

PHP代码审计5-实战漏洞挖掘-cms后台登录绕过

登录框Tricks

登录框Tricks

登录框Tricks