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

相关推荐
儒道易行1 小时前
【攻防实战】Redis未授权RCE联动metasploit打穿三层内网(上)
数据库·redis·网络安全·缓存
small_white_robot3 小时前
vulnerable_docker_containement 靶机
运维·网络·web安全·网络安全·docker·容器
Bruce_Liuxiaowei1 天前
[特殊字符] C&C服务器:网络攻击的指挥中心
运维·服务器·网络安全
-曾牛2 天前
深入浅出 SQL 注入
网络·sql·安全·网络安全·渗透测试·sql注入·盲注
汤愈韬2 天前
IIS服务器
windows·网络安全
-曾牛2 天前
从零到一:XSS靶场 haozi.me 全关卡通关教程(含冷知识汇总)
前端·网络安全·渗透测试·靶场·xss·攻略·靶场教程
挨踢攻城2 天前
网络安全 | 如何防御勒索软件?
安全·web安全·网络安全·php·厦门微思网络·防疫勒索软件
belldeep2 天前
网络安全:Apache Druid 安全漏洞
网络安全·apache·druid
Whoami!2 天前
6-1〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸侦查客户端指纹
网络安全·信息安全·客户端侦查
Whoami!2 天前
6-2〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸利用WORD宏让客户端执行命令
网络安全·信息安全·oscp·宏文件攻击