当前位置: 首页 > news >正文

Webug4.0靶场通关笔记20- 第25关越权查看admin

目录

一、越权原理

1. 水平越权

2. 垂直越权

二、第25关 越权查看admin

1.打开靶场

2.源码分析

(1)为何存在越权?

(2)如何利用越权?

3.源码修改

4.aaaaa账号登录

5.水平越权切换到mooyuan

6.垂直越权切换admin


本文通过《webug4靶场第25关 越权查看admin》来进行越权攻击渗透实战。

一、越权原理

本关卡虽然题目是越权查看admin也就是垂直越权,实际上也存在水平越权。

1. 水平越权

  • 定义:指相同权限级别的用户之间,非法访问或操作其他用户的资源。即攻击者尝试访问与自己具有相同权限级别的其他用户的信息或执行相关操作,而这些操作超出了其应有的访问范围。
  • 原理:Web 应用程序在处理用户请求时,通常依据用户的身份标识(如用户 ID)来识别和授权访问相应的资源。当应用程序对用户输入的参数(如 URL 中的用户 ID、表单中的数据等)没有进行充分的验证和过滤时,攻击者就可以通过修改这些参数,将目标用户的身份标识替换为自己的,从而访问到其他用户的资源。
  • 示例:在一个在线银行系统中,用户 A 和用户 B 都是普通客户,具有相同的权限。用户 A 通过修改 URL 中的用户 ID 参数,将其从自己的 ID 改为用户 B 的 ID,从而成功访问到了用户 B 的账户信息,如余额、交易记录等。

2. 垂直越权

  • 定义:指低权限用户非法访问或操作高权限用户的资源或执行高权限操作。即攻击者突破自身权限限制,访问到本应只有更高权限角色才能访问的功能或数据。
  • 原理:应用程序在进行权限验证时,可能存在不严格或不完整的情况。例如,仅验证用户是否登录,而没有对用户的具体角色和权限进行细致的检查。或者在权限判断过程中,存在逻辑处理不当,使得低权限用户能够绕过正常的权限控制,直接访问高权限的资源或执行高权限的操作。
  • 示例:在一个企业管理系统中,普通员工账户通常只能查看自己的考勤记录和个人信息。但通过分析应用程序的访问逻辑,攻击者发现可以直接在 URL 中输入特定的参数,绕过权限验证,访问到管理员页面,进而对系统中的所有员工信息进行修改、删除等操作。

二、第25关 越权查看admin

1.打开靶场

 点进去第25关越权关卡,进入到如下界面。

http://192.168.71.1/webug4/control/auth_cross/cross_find.php

2.源码分析

cross_find.php源码如下所示。

<?phprequire_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}if (isset($_POST['username']) && isset($_POST['password'])) {if (!empty($_POST['username']) && !empty($_POST['password'])) {$username = $_POST['username'];$password = $_POST['password'];$sql = "SELECT id, username, password FROM user_test WHERE username = '{$username}' AND password = '{$password}'";$res = $dbConnect->query($sql);while ($row = mysqli_fetch_assoc($res)) {$id = $row['id'];header("Location:/pt_env/control/auth_cross/cross_find2.php?id={$id}");}}
}
require_once TPMELATE."/cross_auth_passwd.html";

cross_find.php中在登录成功后跳转到的cross_find2.php源码这个代码的含义为基于id查询用户信息,显示当前是哪个用户。 并没有判断当前用户是否为该id,存在越权攻击的可能性,如下所示。

require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}
// 检查是否存在id参数
if (isset($_GET['id'])) {// 检查id参数是否非空if (!empty($_GET['id'])) {// 直接获取用户输入的id参数(未做任何过滤处理)$id = $_GET['id'];// 构造SQL查询语句(直接将用户输入拼接到SQL中,极其危险)$sql = "SELECT id, username, password FROM user_test WHERE id = {$id}";// 执行SQL查询$res = $dbConnect->query($sql);// 遍历查询结果while ($row = mysqli_fetch_assoc($res)) {// 输出用户名(存在XSS风险)$user = $row['username'];echo "I am :{$user}";}}
}

接下来对 cross_find.php源代码进行详细注释并分析,如下所示。 


// 检查是否通过 POST 方法提交了 'username' 和 'password' 字段
if (isset($_POST['username']) && isset($_POST['password'])) {// 检查 'username' 和 'password' 字段是否不为空if (!empty($_POST['username']) && !empty($_POST['password'])) {// 获取 POST 方法提交的 'username' 字段的值$username = $_POST['username'];// 获取 POST 方法提交的 'password' 字段的值$password = $_POST['password'];// 构造 SQL 查询语句,用于从 'user_test' 表中查询匹配的用户名和密码的记录$sql = "SELECT id, username, password FROM user_test WHERE username = '{$username}' AND password = '{$password}'";// 执行 SQL 查询语句,并将结果存储在 $res 变量中$res = $dbConnect->query($sql);// 遍历查询结果集while ($row = mysqli_fetch_assoc($res)) {// 从结果集中获取用户的 id$id = $row['id'];// 将用户重定向到 cross_find2.php 页面,并将用户的 id 作为参数传递header("Location:cross_find2.php?id={$id}");}}
}

(1)为何存在越权?

  • 缺乏权限验证:代码仅验证了用户名和密码,在用户登录成功后,直接将用户重定向到 cross_find2.php 页面,并传递用户的 id 参数,没有对用户是否具有访问该页面或执行特定操作的权限进行检查。不同用户角色通常具有不同的权限级别,例如普通用户和管理员用户,而代码没有区分这些角色,只要用户登录成功,就可以访问该页面,这就为垂直越权攻击提供了可能。
  • 依赖用户 ID 传递:页面的访问依赖于 id 参数,攻击者可以通过修改这个参数的值来尝试访问其他用户的资源或执行高权限操作。由于代码没有对 id 参数进行严格的权限验证,攻击者可以轻易绕过正常的权限控制。

(2)如何利用越权?

  • 假设场景:由于代码存在越权漏_洞,攻击者可以通过以下方式利用:
    • 修改 URL 参数:攻击者在登录自己的账号后,获取到自己的id 参数,然后手动修改 URL 中的 id 参数为管理员用户的 id或者其他用户id,再次访问 cross_find2.php 页面。由于代码没有对 id参数进行权限验证,攻击者就可以以管理员的身份访问该页面,执行只有管理员才能执行的操作,如删除用户、修改系统配置等。

3.源码修改

  使用用户名admin和密码admin登录。

登陆后报错如下,很明显是网址访问错误。

很明显URL链接地址出现错误,应该如下所示。

http://192.168.71.1/control/auth_cross/cross_find2.php?id=1

于是需要将源码修改为如下内容。

<?phprequire_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}if (isset($_POST['username']) && isset($_POST['password'])) {if (!empty($_POST['username']) && !empty($_POST['password'])) {$username = $_POST['username'];$password = $_POST['password'];$sql = "SELECT id, username, password FROM user_test WHERE username = '{$username}' AND password = '{$password}'";$res = $dbConnect->query($sql);while ($row = mysqli_fetch_assoc($res)) {$id = $row['id'];header("Location:cross_find2.php?id={$id}");}}
}
require_once TPMELATE."/cross_auth_passwd.html";

这个代码bug在docker版本的靶场中也存在,需要同样修改。

再次使用用户名admin和密码admin登录,如下所示。

4.aaaaa账号登录

进入正确的页面后,输入aaaaa用户名和密码点击GO登录。

http://192.168.71.1/webug4/control/auth_cross/cross_find2.php?id=2

如下所示登录成功提示我是aaaa。

5.水平越权切换到mooyuan

在aaaaa用户登录的前提下,直接将id修改为3,如下所示水平越权成功。

http://127.0.0.1//webug4/control/auth_cross/cross_find2.php?id=3

6.垂直越权切换admin

在mooyuan用户登录的前提下,直接将id修改为1,如下所示垂直越权成功。

http://192.168.71.1/webug4/control/auth_cross/cross_find2.php?id=1

相关文章:

  • Webug4.0靶场通关笔记19- 第24关邮箱轰炸
  • 限流算法学习笔记(一)Go Rate Limiter
  • 数据实验分析
  • RabbitMQ-springboot开发-应用通信
  • 精益数据分析(48/126):UGC商业模式的指标剖析与运营策略
  • JVM中类加载过程是什么?
  • node.js 实战——餐厅静态主页编写(express+node+ejs+bootstrap)
  • css识别\n换行
  • 安卓工程build.gradle中的Groovy的常见知识点
  • 【神经网络与深度学习】VAE 中的先验分布指的是什么
  • “胖都来”商标申请可以通过注册不!
  • Eclipse通过Tomcat启动web项目报错
  • 使用 AI 如何高效解析视频内容?生成思维导图或分时段概括总结
  • 基于 ISO 22301 与国产化实践的 BCM 系统菜单设计指南
  • 【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案
  • ✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师![特殊字符]♂️✨
  • EDU/EDU.CN教育邮箱的申请(申请成功可以免费使用一年CursorPro)
  • 【漫话机器学习系列】245.权重衰减(Weight Decay)
  • CentOS 系统升级失败的原因与排查
  • 理解网站导航文件:robots.txt、sitemap.xml与LLMs.txt的全面解析
  • 巴西总统卢拉抵达北京
  • 卢正已任上海市司法局党委委员、副局长
  • “一节课、两小时”,体育正在回归“C位”
  • 心相印回应官方旗舰店客服辱骂消费者:正排查
  • 新疆维吾尔自治区乌鲁木齐市米东区政协原副主席朱文智被查
  • 洛杉矶奥组委确认2028年奥运会和残奥会开闭幕式场地