Lab: Arbitrary object injection in PHP:PHP中任意对象的注入(反序列化漏洞)

靶场内容

本实验使用基于序列化的会话机制,因此容易受到任意对象注入的影响。为了解决实验室问题,创建并注入恶意序列化对象以morale.txt从 Carlos 的主目录中删除文件。您需要获得源代码访问权限才能解决此实验。

您可以使用以下凭据登录自己的帐户: wiener:peter

有时,您可以通过将波浪号 ( 附加~)到文件名以检索编辑器生成的备份文件来读取源代码。

漏洞解析

  • 这个属于是创建了一个对象,把值注入了进去

  • 登录到您自己的帐户并注意会话 cookie 包含一个序列化的 PHP 对象。

  • 从Site map中,请注意该网站引用了文件/libs/CustomTemplate.php. 右键单击该文件并选择“send Repeater”。
    image

  • 在 Burp Repeater 中,请注意您可以通过在请求行中的文件名后附加波浪号 ~ 来阅读源代码
    image

  • 在源代码中,请注意CustomTemplate该类包含__destruct()魔法方法。这将调用属性unlink()上的方法lock_file_path,这将删除此路径上的文件。
    image

  • 在 Burp Decoder 中,使用序列化 PHP 数据的正确语法来创建属性设置为lock_file_path/home/carlos/morale.txt的CustomTemplate对象。确保使用正确的数据类型标签和长度指示符。最终对象应如下所示:O:14:"CustomTemplate":1:{s:14:"lock_file_path";s:23:"/home/carlos/morale.txt";}

  • Base64 和 URL 编码此对象并将其保存到剪贴板。
    image

  • 向 Burp Repeater 发送一个包含会话 cookie 的请求。

  • 在 Burp Repeater 中,将会话 cookie 替换为剪贴板中修改后的 cookie。

  • 发送请求。该__destruct()魔术方法自动调用并会删除卡洛斯的文件。
    image

思考一下

这里主要用到的方法就是代码审计
我们发现有个对象的方法是删除文件
然后我们就可以用序列化书写参数
通过cookie将序列化传参
就可以达到修改的目的
几个基本的魔术方法还是需要知道的

posted @ 2021-08-23 11:06  Zeker62  阅读(165)  评论(0编辑  收藏  举报