1. pikachu靶场搭建

如果你在之前已经使用过phpstudy了,参考pikachu 靶场环境搭建

如果在靶场搭建中遇到一些问题,参考皮卡丘靶场搭建遇到的问题大全

2. 水平越权简介

水平越权是指攻击者通过获取与自己拥有相同权限级别的其他用户的访问权限,从而访问或操作这些用户的资源。通常发生在权限控制不足的场景中,例如,攻击者在登录系统后,通过修改请求参数或URL,绕过身份验证机制,访问他人账户的数据。

3. pikachu靶场水平越权黑盒思路

以下为pikachu靶场水平越权的界面,点一下提示,可以看到三个人的用户名与密码。

不妨假设这么一个情境:我的名字叫kobe,我拥有一个该网站的账号,我希望利用该网站存在的水平越权漏洞来查看lucy和lili的信息。



先登陆我(kobe)的账号,点击查看个人信息,可以看到我(kobe)自己的信息。



再点一下查看个人信息,并使用burpsuite抓包。可以看到,该网站通过get方式向后端查询了username=kobe的资料。

GET /pikachu-master/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF HTTP/1.1
Host: pikachu
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: http://pikachu/pikachu-master/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
Cookie: PHPSESSID=os55u46tgc0km87ksvmp3iisal
Upgrade-Insecure-Requests: 1
Priority: u=0, i

修改包为username=lucy并发包,尝试探测网站是否存在水平越权。此时,lucy的信息被我(robe)给越权查看了。

4. pikachu靶场水平越权白盒原理

在后端代码中,未对用户身份进行校验,而是直接接收了username并构造sql查询语句,使得可以通过篡改数据包中的username参数来水平越权查看其他人的数据。

if(isset($_GET['submit']) && $_GET['username']!=null){
    $username=escape($link, $_GET['username']);
    $query="select * from member where username='$username'";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)==1){
        $data=mysqli_fetch_assoc($result);
        $uname=$data['username'];
        $sex=$data['sex'];
        $phonenum=$data['phonenum'];
        $add=$data['address'];
        $email=$data['email'];         $html.=<<<A
<div id="per_info">
   <h1 class="per_title">hello,{$uname},你的具体信息如下:</h1>
   <p class="per_name">姓名:{$uname}</p>
   <p class="per_sex">性别:{$sex}</p>
   <p class="per_phone">手机:{$phonenum}</p>    
   <p class="per_add">住址:{$add}</p>
   <p class="per_email">邮箱:{$email}</p>
</div>
A;
    }
}

5. 防护建议

要解决这个问题,可以使用session会话进行身份验证,并确保只能获取当前登录用户的个人信息,而不是依赖于传入的用户名参数。

// 启用会话
session_start(); // 检查用户是否已登录,并使用会话中的用户名,而不是通过GET参数传递
if(isset($_SESSION['username'])){
// 获取当前登录用户的用户名
$username = $_SESSION['username']; // 进行数据库查询,确保只能获取当前登录用户的信息
$username = escape($link, $username);
$query = "SELECT * FROM member WHERE username='$username'";
$result = execute($link, $query); if(mysqli_num_rows($result) == 1){
$data = mysqli_fetch_assoc($result);
$uname = $data['username'];
$sex = $data['sex'];
$phonenum = $data['phonenum'];
$add = $data['address'];
$email = $data['email']; $html .= <<<A
<div id="per_info">
<h1 class="per_title">Hello, {$uname}, 你的具体信息如下:</h1>
<p class="per_name">姓名: {$uname}</p>
<p class="per_sex">性别: {$sex}</p>
<p class="per_phone">手机: {$phonenum}</p>
<p class="per_add">住址: {$add}</p>
<p class="per_email">邮箱: {$email}</p>
</div>
A;
}
} else {
// 如果没有登录,则重定向到登录页面
header("Location: login.php");
exit();
}

宇宙安全声明

本博客所提供的内容仅供学习与交流,旨在提高网络安全技术水平,谨遵守国家相关法律法规,请勿用于违法用途,博主不对任何人因使用博客中提到的技术或工具而产生的任何后果负责。如果您对文章内容有疑问,可以留言私信。

基于pikachu靶场的水平越权详解的更多相关文章

  1. 基于H5的微信支付开发详解

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  2. ****基于H5的微信支付开发详解[转]

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  3. ***PHP基于H5的微信支付开发详解(CI框架)

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  4. 基于JavaSE阶段的IO流详解

    1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...

  5. 基于Memcache的分布式缓存系统详解

    文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...

  6. 转:基于科大讯飞语音API语音识别开发详解

    原文来自于: http://www.52wulian.org/android_voice/ 最近项目需要用到android语音识别,立马就想到科大讯飞,结合官方实例及阅读API文档,初步的完成了And ...

  7. ThinkPHP框架下基于RBAC的权限控制模式详解

    这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...

  8. 基于Schema的AOP 配置使用详解

    原文地址:http://jinnianshilongnian.iteye.com/blog/1418598 基于Schema的AOP从Spring2.0之后通过"aop"命名空间来 ...

  9. 基于XML配置的Sping AOP详解

    一.编写基本处理方法 package com.kang.sping.xml.aop; public class Math{ //加 public int add(int n1,int n2){ int ...

  10. 基于TCP实现的Socket通讯详解

    Socket通信是基于TCP协议进行的传输层通信,是在应用和应用之间的通信,一般应用在即时通讯上. 建立连接 用Socket创建连接需要在客户端和服务端都使用socket套接字. Linux内存创建S ...

随机推荐

  1. 为什么要加 REQUIRE8 and PRESERVE8? 栈的8字节对齐

    REQUIRE8 and PRESERVE8   The REQUIRE8 and PRESERVE8 directives specify that the current file require ...

  2. 解锁强强组合: 使用 Kafka + ClickHouse 快速搭建流数据实时处理平台(DoubleCloud 博客)

    我们想要解决的问题 让我们深入一个现实场景: 设想你负责汇总多个销售点系统产生的大量数据.这些数据需要被实时处理并在高级分析仪表板上展示,以提供全面的洞察. 在数据处理领域,速度至关重要.ClickH ...

  3. Win32 动态库dll

    这两天学习动态库的练习,分享下方法 实例.封装窗口类的两种状态. 1.自定义窗口类QWnd 2.资源模板窗口对话框类 下面是dll的头文件,类的声明 #pragma once #ifndef _CLA ...

  4. win指令学习收集

    要执行多句,需要用到逻辑判断 1 & 2 1成不成功都会执行2 1 && 2 1成功才会执行2 1 || 2 1不成功才会执行2

  5. 老母鸡安装mqtt

    大佬写好了, 按部就班操作一下就行了,在hass中添加mqtt可进行测试 玩客云搭建MQTT服务器 - 崔安兵 - 博客园 (cnblogs.com)

  6. Goby 漏洞发布|泛微 e-cology v10 appThirdLogin 权限绕过漏洞【漏洞复现】

    漏洞名称:泛微 e-cology v10 appThirdLogin 权限绕过漏洞 English Name:Weaver e-cology v10 appThirdLogin Permission ...

  7. Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析

    其实网上有大量讨论HTTP长连接的文章,而且Idle Timeout和KeepAlive Timeout都是HTTP协议上的事情,跟Vert.x本身没有太大关系,只不过最近在项目上遇到了一些问题,用到 ...

  8. CSS & JS Effect – Virtual Scrolling

    前言 我正在写 Angular CDK Scrolling 教程,它里面有一个 Virtual Scrolling 功能.借此机会,我想顺便写一篇纯 Sass & TS 的版本作为学习. Vi ...

  9. Angular 18+ 高级教程 – Component 组件 の ng-template

    前言 上一篇 Dynamic Component 我们有提到,作为 MVVM 框架的 Angular 需要有方法替代掉 2 个 DOM Manipulation: document.createEle ...

  10. HTML & CSS – Responsive Image 响应式图片 (完整版)

    前言 之前就有写过关于 Retina 和 Responsive Image 响应式图片 (responsive image) Retina 显示屏 但写的太烂了, 所以有了后来的 屏幕, 打印, 分辨 ...