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

相关推荐
ManageEngine卓豪3 小时前
企业网络安全建设实践:2026 威胁态势、合规基线与分层防御落地
web安全·网络安全·it运维·网络安全防护
QZ166560951594 小时前
可视化易用·低误报率·跨区域部署:知源-AI数据分类分级系统在金融行业的落地实践
大数据·网络·安全·网络安全
2501_915909065 小时前
抓包工具断点拦截是什么?如何半路拦截修改 HTTP 请求
网络协议·计算机网络·网络安全·adb·https·udp
大方子7 小时前
【PolarCTF】PHP_Deserialization
网络安全·polarctf
持敬chijing9 小时前
白盒测试与代码审计-Claude Code Windows环境搭建
windows·安全·网络安全·网络攻击模型
Vitaliy Kostrov(柯维远)10 小时前
客户端如何检查直播流:从流内标记到停止播放
android·运维·服务器·驱动开发·网络安全·系统架构·cdn
sbjdhjd1 天前
从签名重放到 Agent Harness:一堂安全课程如何把前端逆向、MCP 与工程约束串起来
网络安全·ai·github·agent·webshell·mcp·harness
持敬chijing2 天前
白盒测试与代码审计-js登录逆向实战
javascript·网络·安全·web安全·网络安全·网络攻击模型
南棋网络安全2 天前
ssrf跨站请求伪造(保姆级教程)
运维·服务器·网络·网络安全
科技象限2 天前
数据防泄漏系统:文件是怎么溜出门的,就该怎么堵
运维·网络·网络安全·安企神