千家信息网

SQL注入绕过登录验证

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,最近测试发现一个登录处的SQL注入,不用密码即可登录系统。首先在登录处输入"111'",出现报错页面如图:判断可能存在注入进一步利用万能用户名测试admin' or '1'='1,不用输密码成功登录。
千家信息网最后更新 2024年11月12日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'--又会出现错误信息。
之前也有遇到注入的参数必须有值才可以进行注入想必和页面返回有关系?

0