微网站开发平台,二维码的网站如何做,威联通做网站,广东 品牌网站建设文章目录 分析代码原理实现 分析代码
在安装的cms数据库目录C:\phpStudy\WWW\cms\admin下找到login.action.php文件#xff0c;查看第20行#xff0c;发现如下php代码#xff1a;
$user_row $db-getOneRow(select userid from cms_users where username 查看第20行发现如下php代码
$user_row $db-getOneRow(select userid from cms_users where username .$username. and password.md5 ( $password ) .);
if (!empty($user_row )) {setcookie (userid, $user_row [userid] ); header(Location: index.php);
}else{exit(scriptalert(用户名或密码不正确);window.history.go(-1)/script);这段代码先用select语句做了数据库的查询操作查询用户输入的用户名和密码密码做md5加密然后将查询的结果给if语句做判断如果根据用户名密码不为空且能查到userid就登录成功否则输出**“用户名或密码不正确”**。
如果我们能使用一个万能用户名使if语句的判断永远为真那么用任意密码就能成功登录数据库。
原理
将找到的这段select语句
select userid from cms_users where username .$username. and password.md5 ( $password ) .去除php格式改写为
select userid from cms_users where username admin or 11 and password*****或直接用#注释掉后面的语句
select userid from cms_users where username FUZZ or 11 # and password*****这段语句中有逻辑与和逻辑或以第一种方法为例第二种方法密码段被注释在逻辑运算中一般先做与运算再做或运算
11 and password***** falseadmin or false true也就是说这段代码如果由数据库中if语句判断它的结果永远为true这样就能实现用万能用户名登录数据库的目的。
实现
输入万能用户名和任意密码
FUZZ or 11 #
****FUZZ后面的分号是为了让该用户名在username $username’语句中与前一个分号共同组成完整的字符不能省略。
输入如下 登录成功