ctf web-部分

**

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 页面中链接到本地文件,或者读取本地文件中的数据。

相关推荐
一起学安全技术39 分钟前
C11期作业27(09.27)
网络安全
YongCheng_Liang5 小时前
Kali Linux TCP 泛洪攻击实验教程与防御方案(仅限合法测试场景)
运维·网络·网络安全
苦瓜炒蛋挞1 天前
小迪安全第二十二天-安全开发-PHP应用&数据库操作&留言板功能&第三方插件
数据库·网络安全·php·小迪安全
WayneJoon.H1 天前
Java反序列化 CC7链分析
java·安全·网络安全·cc链·反序列化
三七吃山漆1 天前
攻防世界——easy_web
安全·网络安全·web·ctf
Whoami!1 天前
⸢ 拾陆-Ⅵ⸥⤳ 安全数智化建设:安全智能平台(下)▸场景
网络安全·信息安全·智能安全
jenchoi4131 天前
【2025-11-19】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全·npm
jenchoi4131 天前
【2025-11-18】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·数据库·安全·web安全·网络安全
星尘安全1 天前
研究人员发现严重 AI 漏洞,Meta、英伟达及微软推理框架面临风险
人工智能·microsoft·网络安全·程序员必看