未授权访问是系统对用户限制不全,或者无限制,可以让任意用户或者限制访问用户,访问到需要权限认证的地址。未授权访问通常是会泄露用户信息,系统信息。某些服务和系统中,未授权访问还可以执行系统命令,操作系统文件,导致系统的整体安全遭到破坏。就好比:未经过主人家授权偷偷进去这种方式就叫做未授权。
未授权原理:主要基于系统或资源的安全配置不当、认证机制的缺陷或者用户行为的疏忽。当系统未能正确实施访问控制策略,或者用户能够以某种方式绕过这些策略时,就可能发生未授权访问。
下面利用PHP代码进行原理解释
先创建3个文件
用户要想进入后台的操作 (admin.php, user.php), 必须经过 login.php 登录之后才能进去。
登录页面核心代码:
<?php
header("Content-type:text/html;charset=utf-8");
session_start();
if ($_SERVER['REQUEST_METHOD'] == "POST"){
// 说明是登录的post请求
// 模拟登录
// 默认数据
$adminName = "admin";
$adminPwd = "123123";
$userName = isset($_POST['userName']) ? $_POST['userName'] : "";
$userPwd = isset($_POST['userPwd']) ? $_POST['userPwd'] : "";
if ($adminName == $userName && $adminPwd == $userPwd){
// 登录成功
// 存放session
$_SESSION['login'] = true;
// 跳转到后台
header("location:admin.php");
exit;
}
}
?>
admin.php 核心代码:
<?php
header("Content-type:text/html;charset=utf-8");
// 开启session
session_start();
// 判断是否有对应的session
if (!isset($_SESSION['login'])){
// 跳转到登录页面
header("location:login.php");
}
if (isset($_GET['action']) && $_GET['action'] == 'logout'){
// 表示退出系统
unset($_SESSION['login']);
header("location:login.php");
}
echo "<h1>进入了后台管理!!</h1>";
echo "<hr>";
echo "<h2><a href='user.php'>用户管理</a></h2>";
echo "<h3><a href='admin.php?action=logout'>退出登录</a></h3>";
常见的未授权访问有:
- Jboss 未授权访问
- vnc未授权访问
- Jenkins 未授权访问
- ldap未授权访问
- Redis未授权访问
- elasticsearch未授权访问
- MenCache未授权访问
- Mongodb未授权访问
- Rsync未授权访问
- Zookeeper未授权访问
- Docker未授权访问
redis 未授权访问
redis 是什么之前已经介绍过了,这里就不多介绍了。
漏洞产生的原因
默认情况下 Redis 是绑定在 0.0.0.0: 6379 上的,且默认是没有密码的,如果运维没有在上线服务的时候限制访问端口与配置密码则会使我们从外网直接连接 redis 服务器进行操作。具体表现在Redis绑定在 0.0.0.0:6379 上 , redis未设置密码,防火墙没有严格过滤到达 redis 的流量。
漏洞危害
1. 攻击者连接服务器操作服务器数据 ( 危险操作 ) 。
2. 在受害端留下后门 (webshell)
3. 通过 ssh 密钥直接登录受害者系统