第五周周报

主要学习内容

  • PHP 学习
  • 本周web题解

不得不说…差的知识太多了…
感谢博主详细的wp LCTF bestphp’s revenge

解题思路
1、SoapClient触发反序列化导致ssrf
2、serialize_hander处理session方式不同导致session注入
3、crlf漏洞

0x00 序列化与反序列化
序列化使用serialize()将对象的用字符串的方式进行表示
反序列化使用unserialize()将序列化的字符串,构造成相应的对象,反序列化是序列化的逆过程。
在PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。

当想要将数组值存储到数据库时,就可以对数组进行序列化操作,然后将序列化后的值存储到数据库中。其实PHP序列化数组就是将复杂的数组数据类型转换为字符串,这样就方便数组存库操作。
为什么会产生反序列化漏洞?

PHP反序列化漏洞又称PHP对象注入,是因为程序对输入数据处理不当导致的。

需要具备反序列化漏洞的前提:

  • 必须有 unserailize();
  • 函数 unserailize() 函数的参数可控。

参考 入门Web需要了解的PHP反序列化漏洞&深度剖析PHP 序列化与反序列化

0x01 魔术方法

如果反序列化对象中存在魔术方法,而且魔术方法中的代码或变量用户可控,就可能产生反序列化漏洞,根据反序列化后不同的代码可以导致各种攻击,如代码注入、SQL注入、目录遍历等。

魔术方法:PHP的类中可能会包含一些特殊的函数叫魔术函数,魔术函数命名以符号__开头。

有以下的魔术方法:

__construct(), __destruct(),
__call(), __callStatic(), __get(), __set(), __isset(), __unset(),
__sleep(), __wakeup(), __toString(), __invoke(), __set(), _state(),
__clone(), __debugInfo() …

反序列化漏洞中常见到有一些魔术方法:

__construct():在对象创建时自动被调用;
__destruct():在脚本运行结束时自动被调用;
__sleep():在对象序列化的时候自动被调用;
__wakeup():在反序列化为对象时自动被调用;
__toString():直接输出对象引用时自动被调用;

魔术方法的触发

构造方法 __construct()

构造方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct()。在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。该方法无返回值。

语法:

function __construct(arg1,arg2,) 
{

}

0x02 CRLF漏洞
漏洞原理:http数据包通过\r\n\r\n来分开http header和 body

回车符(CR,ASCII 13,\r,%0d)
换行符(LF,ASCII 10,\n,%0a)

漏洞检测:通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。(XSS一般输出在主体中)

漏洞修复:过滤 \r 、\n 之类的行结束符,避免输入的数据污染其他 HTTP 首部字段。

还没完全理解题目相关知识点…持续更新中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值