web漏洞靶场学习分享

news2025/4/17 13:44:35

靶场:pikachu靶场

pikachu漏洞靶场漏洞类型:

  • Burt Force(暴力破解漏洞)
  • XSS(跨站脚本漏洞)
  • CSRF(跨站请求伪造)
  • SQL-Inject(SQL注入漏洞)
  • RCE(远程命令/代码执行)
  • Files Inclusion(文件包含漏洞)
  • Unsafe file downloads(不安全的文件下载)
  • Unsafe file uploads(不安全的文件上传)
  • Over Permisson(越权漏洞)
  • ../../../(目录遍历)
  • I can see your ABC(敏感信息泄露)
  • PHP反序列化漏洞
  • XXE(XML External Entity attack)
  • 不安全的URL重定向
  • SSRF(Server-Side Request Forgery)

今天重点说一下Token暴力破解与PHP反序列化

一、暴力破解之Token爆破

        token是表单验证的方法之一、也是防止爆破的,但是它如果出现在前端页面标签中,就会被捕获到实施爆破,因此就是去了它原本的作用。

                                                           表单爆破结果

首先爆破的方法与常规方法一样,都要进行抓包。【在我的文章上有爆破表单账号密码过程和待验证码的爆破方法】

一、 当我们抓到包后进行添加攻击者方法、选择爆破方法是草叉方法,因为分别爆破、token是独立的。

 二、之后我们进行token的爆破设置方法、首先在设置中找到Grep-Extract、让它识别到token。

三、 之后我们点击Add 、进行token识别设置

在Start after expression 部分是你的token开始标志、也就是除开这里,就是token的开始部分

之后再设置End at fied length 这个是token的结束长度、token的长度是多少、这里就设置多少

也可以设置end ad delimiter 是token结束的标志。

四、之后、我们设置Redirctions 把它从Never 改到always,设置重定向

 五、我们设置token的payload、把payload类型设置为Recursive grep,并且把payload sttings[Recursive grep]中的frst request【第一个请求】设置我们当时抓包的token值

 以上设置好后,pyload1 和普通爆破模式一样、爆破即可。

二、PHP反序列化

 在面向对象编程语言中有类的概念,当我们把类转化为字符串输出就是进行了一次序列化操作。

那么我们将序列化后的字符串进行还原便是反序列化操作。

例如:我们进行个序列化操作

 <?php 
//声明个类human
class human{
//定义变量属性
	public $name = "小李";
	public $age = "20";
}
//将类实体化
$Li = new human();
//序列化
$enstr = serialize($Li);
//反序列化
$class_str = unserialize($enstr);
var_dump($class_str)
?>

此时输出结果为:O:5:"human":2:{s:4:"name";s:6:"小李";s:10:"humanage";s:2:"20";} 

 我们来看一下字符串:O 表示对象(Object)5表示类名长度,后面跟着类名字、2表示有两个属性、其中内容用{}括起来、s表示字符串(string)4表示变量名长度、、、、以此类推。

这是进行了一次序列化操作、那么反序列化呢?

 <?php 
//声明个类human
class human{
//定义变量属性
	public $name = "小李";
	public $age = "20";
}
//将类实体化
$Li = new human();
//序列化
$enstr = serialize($Li);
//反序列化
$class_str = unserialize($enstr);
var_dump($class_str)
 ?>

输出结果为: 

object(human)#2 (2) {
  ["name"]=>
  string(6) "小李"
  ["age"]=>
  string(2) "20"
}

由此我们就进行了一次序列化和反序列化操作。

PHP反序列化漏洞

那么、在此过程中是如何有漏洞发生呢?这就要谈到php的魔法函数。在序列化和反序列化中魔法函数是以下划线开头的函数、它们会在特定的事件发生后自动调用、这样增加了类的灵活性。

其中魔法函数有:

__construct()       对象被创建时候调用

__destruct()        对象销毁时调用

__toString()        对象当作字符串时调用

__get()                在访问对象时候不存在或不可访问属性时调用

__set()                给不存在的访问对象或者不可访问属性赋值时调用

__call()               当调用对象不存在时调用

__callstatic()       当类中不存在静态类时调用

魔法函数还有很多种、不一一举例了。

 <?php 
//声明个类human
class human{
//定义变量属性
	public $name = "小李";
    //当类被创建时调用
    public function __construct(){
        echo "此类被创建了!我的名字是".$this->name;
    }
    //当类被销毁时调用
	public function __destruct(){
        echo "此类被销毁了!我的名字是".$this->name;
    }
}
//将类实体化
$Li = new human();
//序列化
$enstr = serialize($Li);
//输出结果
echo $enstr
?>

其结果为:  此类被创建了!我的名字是小李O:5:"human":1:{s:4:"name";s:6:"小李";}此类被销毁了!我的名字是小李

由此我们知道魔法函数的作用了,现在我们整理一下信息:

1、魔法函数是在类特定的情况被自动调用

2、类可以序列化以及反序列化。

那么、试想一下、类可序列化以及反序列化、那如果我们在魔法函数内的变量可控、并且进行序列化后再反序列化、并且可控函数是system()这样执行系命令操作,那么这是不是就造成了任意命令执行呢?

漏洞payload:

<?php 
//声明个类human
class human{
//定义变量属性
	public $name = "小李";
    //当类被销毁时调用
	public function __destruct(){
        system("echo 此类被销毁了!我的名字是".$this->name);
    }
}
//将类实体化
$Li = new human();
//payload 中用;隔开分开执行命令、这样保证后半部分单独执行命令
$payload = "小李;whoami";
//把类中的name属性替换掉攻击命令
$Li-> name = $payload;
//序列化
$enstr = urlencode(serialize($Li));
//输出结果
echo $enstr;
?>

我们进行了带有执行系统命令的序列化操作后,目标进行反序列化操作即可执whoami命令了。

 那么我们来看pikaqiu中的反序列化漏洞吧:

pikachu提示说接收以及序列化的数据,那么我们就构造个前端XSS的序列化操作。

<?php 
//声明个类human
class S{
//定义变量属性
	var $test = "hello";
}
//将类实体化
$a = new S();
$payload = "<script>alert('xss')</script>";
$a-> test = $payload;
//序列化
$enstr = serialize($a);
//输出结果
echo $enstr;
?>

 结果为:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

提交即可 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MCP over MQTT:EMQX 开启物联网 Agentic 时代

前言 随着 DeepSeek 等大语言模型&#xff08;LLM&#xff09;的广泛应用&#xff0c;如何找到合适的场景&#xff0c;并基于这些大模型构建服务于各行各业的智能体成为关键课题。在社区中&#xff0c;支持智能体开发的基础设施和工具层出不穷&#xff0c;其中&#xff0c;Ant…

ACM代码模式笔记

系列博客目录 文章目录 系列博客目录1.换行符 1.换行符 nextInt()、nextDouble() 等不会消耗换行符&#xff1a; 当使用 nextInt() 或 nextDouble() 读取数字时&#xff0c;它只读取数字部分&#xff0c;不会消耗掉输入后的换行符。 nextLine() 会读取并消耗换行符&#xff1a…

[王阳明代数讲义]具身智能才气等级分评价排位系统领域投射模型讲义

具身智能才气等级分评价排位系统领域投射模型讲义 具身智能胆识曲线调查琴语言的行为主义特性与模式匹配琴语言的"气质邻域 "与气度&#xff0c;云藏山鹰符号约定 琴语言的"气质邻域 "与气度&#xff0c;一尚韬竹符号约定 琴语言的"气质邻域 "与…

【Block总结】PlainUSR的局部注意力,即插即用|ACCV2024

论文信息 标题: PlainUSR: Chasing Faster ConvNet for Efficient Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguang Liu发表时间: 2024年会议/期刊: 亚洲计算机视觉会议&#xff08;ACCV 2024&#xff09;研究背景: 超分辨率&#xff08;Super-Resolution, S…

【C++】从零实现Json-Rpc框架(2)

目录 JsonCpp库 1.1- Json数据格式 1.2 - JsonCpp介绍 • 序列化接口 • 反序列化接口 1.3 - Json序列化实践 JsonCpp使用 Muduo库 2.1 - Muduo库是什么 2.2 - Muduo库常见接口介绍 TcpServer类基础介绍 EventLoop类基础介绍 TcpConnection类基础介绍 TcpClient…

FastAPI依赖注入:链式调用与多级参数传递

title: FastAPI依赖注入:链式调用与多级参数传递 date: 2025/04/05 18:43:12 updated: 2025/04/05 18:43:12 author: cmdragon excerpt: FastAPI的依赖注入系统通过链式调用和多级参数传递实现组件间的解耦和复用。核心特性包括解耦性、可复用性、可测试性和声明式依赖解析…

【STM32单片机】#5 定时中断

主要参考学习资料&#xff1a; B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装&#xff1a;STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…

OrbStack 作为 Mac 用户的 Docker 替代方案

推荐使用 OrbStack 作为 Mac 用户的 Docker 替代方案 在现代开发环境中,容器化技术已经成为了软件开发的重要组成部分。对于 Mac 用户来说,Docker Desktop 是一个广泛使用的工具,但它并不是唯一的选择。本文将推荐 OrbStack 作为 Docker Desktop 的替代方案,并探讨其优势。…

运行小程序报错

[ app.json 文件内容错误] app.json: ["tabBar"]["list"] 不能超过 5 项(env: Windows,mp,1.06.2206090; lib: 3.7.12) 他的意思大概是&#xff0c;微信小程序 app.json 文件中的 tabBar.list 配置项超过了 5 项。这是微信小程序的限制&#xff0c;tabBar…

深入剖析丝杆升降机工作原理,解锁工业传动奥秘

丝杆升降机&#xff0c;在工业设备的大舞台上扮演着不可或缺的角色&#xff0c;被广泛应用于机械制造、自动化生产线、建筑施工等众多领域。它能够精准实现重物的升降、定位等操作&#xff0c;为各类工业生产提供了稳定可靠的支持。想要深入了解丝杆升降机&#xff0c;就必须探…

【51单片机】2-3【I/O口】震动传感器控制LED灯

1.硬件 51最小系统LED灯模块震动传感器模块 2.软件 #include "reg52.h"sbit led1 P3^7;//根据原理图&#xff08;电路图&#xff09;&#xff0c;设备变量led1指向P3组IO口的第7口 sbit vibrate P3^3;//震动传感器DO接P3.3口void Delay2000ms() //11.0592MHz {…

医疗思维图与数智云融合:从私有云到思维图的AI架构迭代(代码版)

医疗思维图作为AI架构演进的重要方向,其发展路径从传统云计算向融合时空智能、大模型及生态开放的“思维图”架构迭代,体现了技术与场景深度融合的趋势。 以下是其架构迭代的核心路径与关键特征分析: 一、从“智慧云”到“思维图”的架构演进逻辑 以下是针对医疗信息化领域…

【JS】接雨水题解

题目 思路 首先我们要明确如何计算每条柱子的接水量&#xff1a; 每条柱子对应接到的雨水量该柱子左边最大值和右边最大值中的较小值-该柱子本身的高度。举例&#xff1a;第二条柱子自身高度为0&#xff0c;左边最大值为1&#xff0c;右边最大值为3&#xff0c;取较小值1-自身…

线代[12]|《高等几何》陈绍菱(1984.9)(文末有对三大空间的分析及一个合格数学系毕业生的要求)

文章目录 一、概述二、平面仿射几何的基本概念三、平面射影几何的基本概念四、变换群和几何学五、二次曲线的射影理论、仿射理论和度量理论六、射影几何公理基础七、非欧几里得几何概要八、自我测试题九、欧氏解析几何、仿射解析几何、射影解析几何与其他&#xff08;博主借助A…

第3课:状态管理与事件处理

第3课&#xff1a;状态管理与事件处理 学习目标 掌握useState Hook的使用理解组件事件处理机制实现表单输入与状态绑定完成任务添加功能原型 一、useState基础 1. 创建第一个状态 新建src/Counter.js&#xff1a; import { useState } from react;function Counter() {co…

【速写】Transformer-encoder-decoder深度解析

文章目录 一、理论分析1. Transformers概述2. Transformer的输入部分具体是如何构成&#xff1f;2.1 单词 Embedding2.2 位置 Embedding 3 自注意力原理3.1 自注意力结构3.2 QKV的计算3.3 自注意力的输出3.4 多头注意力 4 Encoder结构4.1 AddNorm4.2 前馈4.3 组成Encoder 二、代…

MyBatis八股文-执行流程、延迟加载、一级与二级缓存

(一)执行流程 mybatis-config.xml核心配置文件的作用&#xff1a; 在MyBatis框架的核心配置文件中需要去指定当前的环境配置、指定需要操作的是哪个数据库&#xff0c;并且输入当前的用户名与密码&#xff0c;只有配置了他才能真正操作数据库。同时还去加载了SQL映射文件&#…

基于Spark的哔哩哔哩舆情数据分析系统

【Spark】基于Spark的哔哩哔哩舆情数据分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python和Django框架进行开发&#xff0c;为了便于广大用户针对舆情进行个性化分析处…

【Linux】日志模块实现详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

Java基础:面向对象高级(四)

内部类&#xff08;类中五大成分之一&#xff09; 四种形式 成员内部类【了解】 静态内部类【了解】 局部内部类【了解】 匿名内部类【重点】 枚举 泛型 什么是泛型 泛型类-模拟ArrayList 泛型接口-操作学生&#xff0c;老师增删改查 泛型方法 泛型擦除和注意事项