SQL注入绕过登录验证

最近测试发现一个登录处的SQL注入,不用密码即可登录系统。
首先在登录处输入“111'”,出现报错页面如图:判断可能存在注入
SQL注入绕过登录验证
进一步利用万能用户名测试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加上才能成功,如果不加是跑不出来的,如图:
SQL注入绕过登录验证
SQL注入绕过登录验证
感觉这样的话,需要知道一个正确得用户名才行,还是有一定得局限性,我利用别的万能账户都不行,比如'or '1'='1--直接提示用户名密码错误,'or '1'='1'--又会出现错误信息。
之前也有遇到注入的参数必须有值才可以进行注入想必和页面返回有关系?


当前名称:SQL注入绕过登录验证
网站路径:http://scyanting.com/article/joiicd.html