万能用户名,顾名思义,即在未知账密的情况下也可登录的用户名
万能用户名前提:1.字符拼接
2.后端未过滤
如该代码即可实现万能用户名登录
漏洞点:
("select userid from cms_users where username = ' ".$username." ' and password=' ".md5( $password ) ." ' ")
select userid from cms_users where
查询符合限定条件的值
username = '"$username."' and password= '".md5 ( $password ) ."'
将要查询的值 前端将输入的变量 与运算 将要查询的值(2) 前端将要输入的值
万能用户名(1):admin or '1'='1'
将万能用户名插入该语句,即:
username = 'admin' or '1'='1' and "‘.md5( $password)"'
原理:在已知用户名的前提下,因and'为与运算符,or为或运算符,且and优先级高于or,故计算机会首先计算1=1 and $password,由于不知道正确的password,故该计算语句结果必定为false;因admin为正确用户名,计算结果为true;且true or false计算结果必定为true,该用户名可在密码不知情的情况下成功登录后台。
万能用户名(2):** or 1=1 #
将万能用户名插入该语句,即:
username = '**' or 1=1 #"'.md5( $password)'"
原理:在未知用户名的前提下,**为任意自定义用户名,#表注释,其后的代码不运行,即$password将不被运行,故该语句只剩下'**' or 1=1;因1=1必定为true,即该或运算结果必定为true,故可在账户与密码均不知情的情况下登录后台。