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

相关推荐
Suckerbin2 小时前
Hms?: 1渗透测试
学习·安全·网络安全
newxtc3 小时前
【国内中间件厂商排名及四大中间件对比分析】
安全·web安全·网络安全·中间件·行为验证·国产中间件
follycat8 小时前
[极客大挑战 2019]HTTP 1
网络·网络协议·http·网络安全
Lionhacker1 天前
网络工程师这个行业可以一直干到退休吗?
网络·数据库·网络安全·黑客·黑客技术
centos081 天前
PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0]
网络安全·二进制·pwn·ctf
程序员小予1 天前
如何成为一名黑客?小白必学的12个基本步骤
计算机网络·安全·网络安全
蜗牛学苑_武汉1 天前
Wazuh入侵检测系统的安装和基本使用
网络·网络安全
乐茵安全1 天前
linux基础
linux·运维·服务器·网络·安全·网络安全
如光照1 天前
Linux与Windows中的流量抓取工具:wireshark与tcpdump
linux·windows·测试工具·网络安全