基于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 ...
随机推荐
- 学习SSD—day1_20240814
1.SSD的基本概念以及结构 SSD是一种以半导体(半导体闪存)作为存储介质吗,使用纯电子电路实现的存储设备. SSD硬件包括几大组成部分:主控.闪存.缓存芯片DRAM(可选,有些SSD上可能只有SR ...
- 使用python-slim镜像遇到无法使用PostgreSQL的问题
前言 之前不是把 DjangoStarter 的 docker 方案重新搞好了吗 一开始demo部署是使用 SQLite 数据库的,用着没问题,但很快切换到 PostgreSQL 的时候就遇到问题了- ...
- WPF 模拟UWP原生窗口样式——亚克力|云母材质、自定义标题栏样式、原生DWM动画 (附我封装好的类)
先看一下最终效果,左图为使用亚克力材质并添加组合颜色的效果:右图为MicaAlt材质的效果.两者都自定义了标题栏并且最大限度地保留了DWM提供的原生窗口效果(最大化最小化.关闭出现的动画.窗口阴影.拖 ...
- uni-app 小程序 前置摄像头
在小程序拍照的话,uni.chooseImage()可以直接调取摄像头拍照,而如果要调用前置摄像头,这个api就没有提供了. 在查找官方文档发现,可以通过camera有提供这么一个组件,页面内嵌的区域 ...
- Docker网络上篇-网络介绍
通过前面的学习,我们已经可以把自己写的微服务项目通过dockerfile文件方式部署到docker上面了.那么微服务之间通信,怎么通信的?是在同一个网络还是在不同的网络环境下?docker中怎么配置网 ...
- 【图文教程】Centos 7下安装Hadoop
环境说明: 系统:Centos7 在VM中安装的 hadoop版本:2.7.7 JDK:1.8 注意:Hadoop需要Java环境的.记得安装Java环境 PS:Centos JDK安装 mkdir ...
- Codeforces Round 916 (Div. 3) (A~F附带题解和详细思路)
Codeforces Round 916 (Div. 3) (A~E2) A. Problemsolving Log 签到题,对于给出的字符串,用数组记录每个字母出现的次数,然后遍历一边记录数组,如果 ...
- 像 Mysql 和 MongoDB 这种大型软件在设计上都是精益求精的,它们为什么选择B树,B+树这些数据结构?
为什么 MongoDB (索引)使用B-树而 Mysql 使用 B+树? B 树与 B+ 树,其比较大的特点是:B 树对于特定记录的查询,其时间复杂度更低.而 B+ 树对于范围查询则更加方便,另外 B ...
- OpenAI GPT-4发布总结
OpenAI官方发布了GPT-4模型,GPT-4是一个大型多模态模型,支持输入文本+图片,输出还是文字形式,GPT-4比任何 GPT-3.5 模型都更强大,能够执行更复杂的任务,并针对聊天进行了优化. ...
- Ubuntu开机直接进入grub终极解决方法
https://zhuanlan.zhihu.com/p/59062434 我遇到的问题是,每一步都操作没问题,但是开机还是会进入grub.最后只能进bios解决了. 我的服务器是supermicro ...