在登录网站后台时,有一个比较古老的“万能密码”漏洞,即利用一个我们精心构造的用户名,即使不用输入密码,也可以登录后台,其原理仍属于SQL注入的范畴。
假设数据库中存放用户信息的表是admin,其中存放用户名的字段是username,存放密码的字段是password,在用户验证页面中用来接收用户所输入的用户名和密码的变量也分别是username和password,当用户在用户验证页面输入用户名和密码后,会提交给如下的语句进行处理:
select * from admin where `username` = ‘$userrname’ and `password` = ‘$password’
这样,当用户输入用户名'or '' = '时,相应的语句就变成了
select * from admin where `username` = ‘’ or ‘’ =‘’and `password` = ‘’
在这个语句中,where后面所指定的条件永久成立,因而就可以绕过身份验证,也就成为了所谓的万能密码。
万能密码中开头和结尾的单引号,主要是为了将查询语句中引用变量的单引号闭合。因而掌握了这个特点之后,我们就可以来任意构造万能密码,比如下面的几种形式:
' or 'a'='a'or'a'='a
' or ‘a’ = ‘a’ or ‘
' or 1=1 or ‘
下面我们就搭建一个实验环境来验证万能密码