ctf web-部分

news2024/11/15 10:22:41

**

web基础知识

**

*一.反序列化

在PHP中,反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。

1.序列化serialize()

序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:
class S{
public $test=“pikachu”;
}
s = n e w S ( ) ; / / 创建一个对象 s e r i a l i z e ( s=new S(); //创建一个对象 serialize( s=newS();//创建一个对象serialize(s); //把这个对象进行序列化
序列化后得到的结果是这个样子的:O:1:“S”:1:{s:4:“test”;s:7:“pikachu”;}
O:代表object
1:代表对象名字长度为一个字符
S:对象的名称
1:代表对象里面有一个变量
s:数据类型
4:变量名称的长度
test:变量名称
s:数据类型
7:变量值的长度
pikachu:变量值

2.反序列化unserialize()

就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。
$u=unserialize(“O:1:“S”:1:{s:4:“test”;s:7:“pikachu”;}”);
echo $u->test; //得到的结果为pikachu

3.PHP常见魔法函数

(1)__wakeup()
在PHP中如果需要进行反序列化,会先检查类中是否存在_wakeup()函数,如果存在,则会先调用此类方法,预先准备对象需要的资源。
(2)__sleep()
使用serialize时触发
(3)__destruct()
在对象的所有引用都被删除或类被销毁时自动调用
(4)__construct()
此函数会在创建一个类的实例时自动调用
(5)__toString()
此函数会在类被当作字符串时调用
(6)__get()
在读取不可访问的属性值时自动调用,例如读取私有变量
(7)__call()
调用未定义的方法时调用,例如调用实例化类中未定义的方法

4.序列化其属性

序列化对象:
private变量会被序列化为:\x00类名\x00变量名
protected变量会被序列化为: \x00*\x00变量名
public变量会被序列化为:变量名

5.__wakeup()绕过

版本限制
PHP5:<5.6.25
PHP7:<7.0.10
当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行
只需将O:1:“S”:1:{s:4:“test”;s:7:“pikachu”;}改成O:1:“S”:2:{s:4:“test”;s:7:“pikachu”;}即可绕过wakeup()

*二.PHP文件包含

PHP文件包含漏洞(File Inclusion Vulnerability)是一种安全漏洞,允许攻击者在应用程序中执行恶意的文件包含操作。这种漏洞通常出现在开发人员使用了不安全的文件包含函数时,例如include()、require()、include_once()、require_once()等,并且未正确过滤用户提供的输入。

1.php://filter伪协议

存在文件包含漏洞时,我们可以用php://filter进行文件的读取和写入,如读取flag.php文件,“?file=php://filter/read=convert.base64-encode/resource=flag.php”

2.php://input 协议

存在文件包含漏洞时,我们可以用php://input 命令执行也可直接写webshell,通常用法:执行<?php system("ls") ?>可查看文件,通常用来查找和读取flag文件位置,也配合php://filter进行读取
在这里插入图片描述

3.data 协议

其实data协议和input协议差不多,只是data是get方法,input是post方法,data伪协议配合命令来读取到的文件会在 PHP 脚本生成的 HTML 页面中显示。
用法:
读取文件:?c=data://text/plain,<?php system('cat fla*.php');?>
查找文件:?c=data://text/plain,<?php system('ls');?>
利用编码:data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

4.file协议

file伪协议
file 伪协议用于访问本地文件系统中的文件,可以在 web 页面中链接到本地文件,或者读取本地文件中的数据。

在这里插入图片描述

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

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

相关文章

2024年五一数学建模C题完整解题思路代码

2024年第二十一届五一数学建模竞赛题目 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动力灾害风险越来越大&#xff0c;严重影响着煤矿的安全高效开采。在各类深…

如何快速搭建nginx服务

华子目录 nginx简介概念特点nginx框架nginx关键工作机制 nginx正向代理功能nginx反向代理功能nginx反向代理的工作流程代理本质 nginx负载均衡部署nginx常用命令systemctl系列nginx自带命令 nginx配置文件主配置文件/etc/nginx/nginx.conf内容结构模块分析配置分析注意示例 ngi…

常见公式的几何解释

本文旨在深入探讨常见数学公式的几何意义&#xff0c;通过直观的图形和解释&#xff0c;帮助读者更好地理解并掌握这些公式的本质。文章首先概述了公式与几何图形之间的紧密联系&#xff0c;然后选取了几个典型的数学公式&#xff0c;进行详细解析。每个公式都将配以相应的几何…

Zynq 7000 系列之启动模式—JTAG启动

JTAG Boot&#xff08;JTAG启动&#xff09;是一种使用JTAG接口来启动设备的方法。JTAG&#xff08;Joint Test Action Group&#xff09;是一种国际标准测试协议&#xff0c;最初用于对芯片进行测试&#xff0c;现在已广泛应用于各种设备的调试和启动过程。在JTAG Boot过程中&…

是机遇?是未来?拥抱 AI Agent ,拥抱 AI 2.0时代~

✍️ 作者&#xff1a;哈哥撩编程&#xff08;视频号同名&#xff09; 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5; 程序员&#xff1a;职场关键角色通识宝…

社交媒体数据恢复:飞机 X

飞机 X数据恢复方法 在本文中&#xff0c;我们将探讨如何在不使用特定数据恢复软件的情况下尝试恢复飞机 X聊天记录和文件。请注意&#xff0c;这些方法并不保证100%的成功率&#xff0c;但它们可以在一定程度上帮助您恢复丢失的数据。 1. 检查最近的备份 如果您启用了飞机 …

【17-模型选择与调优:交叉验证和网格搜索在Scikit-learn中的实践】

文章目录 前言交叉验证:保证模型的稳健性理论基础Scikit-learn中的实现网格搜索:寻找最佳参数理论基础Scikit-learn中的实现应用示例结论前言 模型选择和调优是机器学习项目成功的关键步骤。在Scikit-learn中,交叉验证和网格搜索是两个强大的工具,用于选择最佳模型和调整参…

Qt Creator导入第三方so库和jar包——Qt For Android

前言 之前了解了在Android Studio下导入so库和jar包&#xff0c;现在实现如何在Qt上导入so库和jar包。 实现 下面是我安卓开发&#xff08;需调用安卓接口的代码&#xff09;的目录&#xff08;图1&#xff09;&#xff0c;此目录结构和原生态环境&#xff08;Android Studi…

如何反向查看某个命令所属的rpm包的2个方法?(rpm -qf `which xxx`和yum provides和 rpm -ql xxx.rpm)

文章目录 快速回忆方法1&#xff1a; rpm -qf方法2&#xff1a;yum provides 其他rpm如何查看某个rpm包里面包含哪些命令: rpm -ql主推方法1&#xff1a; rpm -ql方法2&#xff1a;yum info 其他查看rdma-core中包含哪些cmd&#xff1a;一些其他命令所在包探索 快速回忆 rpm -…

使用Gitbook生成电子书

背景 《Google工程实践文档》相对原文Google’s Engineering Practices documentation &#xff0c;部分内容过时了。需要更新中文版&#xff0c;并使用Gitbook把Markdown文件转换成对应的PDF电子书。   上一次生成PDF电子书是5年前&#xff0c;当时生成电子书的环境早已不在…

在做题中学习(48):朴素的二分查找

. - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a; 暴力求解 for循环中&#xff0c;从nums[0]枚举到nums[n-1]&#xff0c;依次判断&#xff0c;返回 target的值。 时间复杂度 : O(N) :因为要遍历一遍数组 解法二&#xff1a;二分查找 因为此数组为有序的…

【QT学习】14.线程学习

一。线程了解 线程是计算机科学中的一个重要概念&#xff0c;它是操作系统能够进行运算调度的最小单位。线程是进程中的一个执行流&#xff0c;一个进程可以包含多个线程。与进程相比&#xff0c;线程更轻量级&#xff0c;可以更高效地利用计算机资源。 线程有以下几个特点&…

小酒馆点餐系统实现-C++项目详细过程

目录 项目介绍1、项目描述2、市场调研3、技术调研 项目设计1、概要设计2、详细设计① 数据管理模块&#xff1a;② 业务控制模块&#xff1a;③ 前端界面模块&#xff1a; 3、代码实现实现数据管理模块实现业务控制模块实现前端界面模块 项目介绍 1、项目描述 使用户可以通过…

外包干了3天,技术就明显退步了。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

UE5 蓝图入门

基础节点创建&#xff1a; 常量&#xff1a; 按住 1 &#xff0c;点击鼠标左键&#xff0c;创建常量 二维向量&#xff1a; 按住 2 &#xff0c;点击鼠标左键&#xff0c;创建二维向量 三维向量&#xff1a; 按住 3 &#xff0c;点击鼠标左键 按 c 键打出一个注释框 参考视…

[数据结构]———交换排序

目录 ​编辑 ​编辑 1.交换排序 第一个定义了一个名为Swap的函数 第二个三数取中 2.冒泡排序 代码解析 冒泡排序的特性总结&#xff1a; 3.快速排序 1. hoare版本 2. 挖坑法 代码解析 3. 前后指针版本 代码解析 1.交换排序 基本思想&#xff1a;所谓交换&#xff0…

maven插件:dockerfile-maven-plugin和docker-maven-plugin

Maven插件dockerfile-maven-plugin和docker-maven-plugin都是为Java开发人员提供了一种便捷的方式&#xff0c;通过Maven构建流程来自动化创建、管理和推送Docker镜像。虽然它们有着相似的目标&#xff0c;即集成Docker与Maven项目&#xff0c;但这两个插件在实现细节、功能侧重…

windows驱动开发-WDF对象

WDF封装了大量的WDF对象&#xff0c;不过&#xff0c;和应用层不一样&#xff0c;不用去尝试从WDF框架对象类上派生和改写原有的WDF类&#xff0c;本意WDF就是希望我们使用这些对象和类&#xff0c;而不是创造新的奇怪的类。 每个WDF对象都代表着对一项驱动需要使用的子功能的…

骑缝电子章怎么盖?

盖骑缝电子章通常涉及几个基本步骤&#xff0c;这里提供一个通用的流程&#xff0c;适用于大多数电子文档处理软件&#xff0c;尤其是那些支持电子签名和印章功能的软件&#xff0c;比如Adobe Acrobat Pro DC、e-章宝(易友EU3000智能盖章软件)等。请注意&#xff0c;具体操作可…

附录3-小程序常用事件

目录 1 点击事件 tap 2 文本框输入事件 input 3 状态改变事件 change 4 下拉刷新事件 onPullDownRefresh() 5 上拉触底事件 onReachBottom() 1 点击事件 tap 2 文本框输入事件 input 可以使用 e.detail.value 打印出当前文本框的值 我现在在文本框中依次输入12345&…