什么是未授权访问?
未授权访问漏洞可以理解为 需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。
接下来,我们通过搭建的靶机进行演示。
靶机搭建:
首先,我们需要准备几个php、html文件。
index.php(用于访问)
<?php
header("Content-type: text/html; charset=utf-8");
session_start();
if(@$_SESSION['username'] != "admin" and @$_SESSION['password'] != "123456"){
echo '<script language="javascript">
alert("非法访问!");
top.location="login.php";
</script>';
die;
}
echo '欢迎访问 CYWL.TEAM 后台主页!';
?
login.php(用于登录)
<?php session_start(); include("./moban/login.html"); ?>
action.php(登录处判定)
<?php session_start(); header("Content-type: text/html; charset=utf-8"); $username = $_POST['username']; $password = $_POST['password']; //第一个条件 if($username != "admin"){ echo "账户名错误!"; die; } //第二个条件 if($password != "123456"){ echo "账户名正确,但是密码错误!"; //die; } $_SESSION['username'] = $username; $_SESSION['password'] = $password; header("Location: ./index.php"); ?>
login.html(登录的界面)
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> CYWL.TEAM 后台登陆页面 </title> </head> <body> <center> <form action="action.php" method="POST"> </br> <h3>CYWL.TEAM 后台登陆</h3> 账户: <input type="text" value="admin" name="username" /> </br> </br> 密码: <input type="password" value="123456" name="password" /> </br></br> <input type="submit" value="登 陆"/> </form> </center> </body>
现在我们打开登陆界面:

点击登录,发现来到index.php界面,成功访问后台

现在重新回到登录界面,将url localhost/login.php 改为 localhost/index.php ,回车访问,界面会给我们提醒 非法访问:

为什么会出现以上情况呢?是因为session在保护我们网站的安全性,不可使后台进行非法的访问。
如果去掉index.php中对session的处理代码。会怎样呢?

注释掉之后,我们再次来到登录界面,在不输入密码的前提下,直接跳转到 localhost/index.php 界面,我们发现成功跳转:

Session的作用:
Session用于保存每个用户的专用信息,每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) 。
那当我们处理掉index.php界面关于session的代码后,index.php界面就不会对当前访问的请求进行session值的判断,从而产生了未授权访问的漏洞,导致任意用户都可以在不输入管理员账号密码的情况下进入后台管理系统。
这是我对此漏洞的理解,如有错误,请各位大佬及时指出,万分感谢!