基于pikachu靶场的水平越权详解
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靶场的水平越权详解的更多相关文章
- 基于H5的微信支付开发详解
这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...
- ****基于H5的微信支付开发详解[转]
这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...
- ***PHP基于H5的微信支付开发详解(CI框架)
这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...
- 基于JavaSE阶段的IO流详解
1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...
- 基于Memcache的分布式缓存系统详解
文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...
- 转:基于科大讯飞语音API语音识别开发详解
原文来自于: http://www.52wulian.org/android_voice/ 最近项目需要用到android语音识别,立马就想到科大讯飞,结合官方实例及阅读API文档,初步的完成了And ...
- ThinkPHP框架下基于RBAC的权限控制模式详解
这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...
- 基于Schema的AOP 配置使用详解
原文地址:http://jinnianshilongnian.iteye.com/blog/1418598 基于Schema的AOP从Spring2.0之后通过"aop"命名空间来 ...
- 基于XML配置的Sping AOP详解
一.编写基本处理方法 package com.kang.sping.xml.aop; public class Math{ //加 public int add(int n1,int n2){ int ...
- 基于TCP实现的Socket通讯详解
Socket通信是基于TCP协议进行的传输层通信,是在应用和应用之间的通信,一般应用在即时通讯上. 建立连接 用Socket创建连接需要在客户端和服务端都使用socket套接字. Linux内存创建S ...
随机推荐
- [天线原理及设计>基本原理] 1. 辐射机制
1. 辐射机制 1.1. Single Wire 单线 如果电荷不移动,则不会产生电流,也不会产生辐射. 如果电荷以匀速移动: a. 如果电线是直的,并且范围是无限的,则没有辐射. b. 如果电线弯曲 ...
- C语言基础函数
C语言 文件操作 fopen(filename, "r") // 只读模式打开文件 -r // 只读 -w // 可写 -b // 二进制 fgetc(fd) // 从fd获取ch ...
- AArch64 汇编学习笔记
PIE(Position Independent Executable,位置无关的可执行文件)通过随机化可执行文件各个部分在虚拟内存中的地址使得攻击者无法通过预测地址进行恶意行为. 汇编开发工具: a ...
- iptables 工作过程整理
转载注明出处: 1.概念和工作原理 iptables是Linux系统中用来配置防火墙的命令.iptables是工作在TCP/IP的二.三.四层,当主机收到一个数据包后,数据包先在内核空间处理,若发现目 ...
- 【YashanDB知识库】yasql登录报错:YAS-00413
[问题分类]错误码处理 [关键字]yasql,00413 [问题描述]使用工具设置不同并发迁移数据的过程中,导致yasql登录报错:YAS-00413 [问题原因分析]工具使用与数据库使用资源超过了操 ...
- chroot 整理
chroot 是什么? 就是change root directory ,比如默认是 /, 可以用这个chroot 把 / 换成其他指定的目录 chroot 干什么的? 增加了系统的安全性,限制了用户 ...
- 用CSS border画一个铅笔
先上效果图 该例子来自 CSS世界 的书中项目 总结技巧如下: 巧用 border 和 伪元素 来 绘制层叠效果. 使用 transform-origin 来改变元素的轴心 使用 filter:dro ...
- SQL Server – Work with JSON
前言 JSON 是一个很好的格式, array, object 就能表达一个表格了. 如果想保存一些结构格式, 又不想用表格这么大费周章的话, JSON 会是很好选择. 比如我用它来记入 Audit ...
- 2021年11月墨天轮国产数据库排行榜:openGauss闯入前三,Kingbase流行度与日俱增,TDengine厚积薄发
2021年11月的国产数据库流行度排行榜已在墨天轮发布,本月共有163家数据库参与排名.就前15名的总体情况来看,除openGauss反超OceanBase闯入前三,TDengine厚积薄发来到第15 ...
- js中有哪些定时器 , 它们的用法和区别?
js有setInterval() 间隔函数 和 setTimeout()延迟函数 2 种定时器 1. setInterval间隔函数 setInterval() 方法可按照指定的周期(以毫秒计)来调用 ...